Files
Gen_Hack-and-Slash-Roguelite/Client/Assets/Scripts/Entity/BuildingOutline.cs

63 lines
2.0 KiB
C#

using System;
using Base;
using Data;
using TMPro;
using UnityEngine;
namespace Entity
{
public class BuildingOutline : Outline
{
public BoxCollider2D boxCollider;
public CircleCollider2D trigger;
public TMP_Text tip;
public bool PlayerOnGround { get; private set; }
override public void Init()
{
var textureSize = GetBodyTextureSize();
outlineRenderer.size = textureSize;
var colliderSize = GetColliderSize();
boxCollider.size = colliderSize;
boxCollider.offset = GetOffset();
if (progressBarPrefab)
{
progressBarPrefab.transform.localPosition += new Vector3(0f, textureSize.y * 2 / 3, 0f);
progressBarPrefab.transform.localScale = new Vector3(textureSize.x, 1f / 10f, 1);
}
if (entity.entityDef is not BuildingDef buildingDef || buildingDef.triggerEvents == null)
{
trigger.enabled = false;
return;
}
trigger.radius = buildingDef.detectionRadius;
if (!string.IsNullOrEmpty(buildingDef.triggerPosition))
{
var position = Utils.StringUtils.StringToVector2(buildingDef.triggerPosition);
trigger.offset = position;
}
tip.transform.localPosition += new Vector3(0f, textureSize.y * 2 / 3, 0f);
tip.text = $"按{buildingDef.activateKey}打开{buildingDef.label}\n{buildingDef.description}";
tip.gameObject.SetActive(false);
}
private void OnTriggerEnter2D(Collider2D other)
{
if (other.gameObject.CompareTag("Player"))
{
tip.gameObject.SetActive(true);
PlayerOnGround = true;
}
}
private void OnTriggerExit2D(Collider2D other)
{
tip.gameObject.SetActive(false);
PlayerOnGround = false;
}
}
}