You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
2.2 KiB
71 lines
2.2 KiB
using System.Runtime.CompilerServices;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public class Cell : MonoBehaviour
|
|
{
|
|
GameManager gameManager;
|
|
public GameObject mask = null; //选中角色时在单元格上显示攻击范围
|
|
public Cell parent = null;
|
|
public int cost = 99; //走在单元格上消耗的行动点数
|
|
public int damage = 0; //单元格对站在上面的角色造成的伤害
|
|
bool occupied = false; //是否有角色占着单元格
|
|
public Character currentCharacter; //当前单元格上的角色
|
|
public int gCost; //路径耗散
|
|
public int hCost; //预测耗散
|
|
public int fCost; //A*耗散
|
|
private void Awake()
|
|
{
|
|
gameManager = GameObject.Find("GameManager").GetComponent<GameManager>();
|
|
if(gameObject.tag == "Block") cost = 99;
|
|
}
|
|
public void SetOccupied(bool value)
|
|
{
|
|
occupied = value;
|
|
}
|
|
|
|
public bool GetOccupied()
|
|
{
|
|
return occupied;
|
|
}
|
|
|
|
public void SetMask(bool value)
|
|
{
|
|
mask.SetActive(value);
|
|
}
|
|
public void SetCurrentCharacter(Character character)
|
|
{
|
|
currentCharacter = character;
|
|
}
|
|
public Character GetCurrentCharacter()
|
|
{
|
|
return currentCharacter;
|
|
}
|
|
private void OnMouseEnter()
|
|
{
|
|
gameManager.ChangeCellInformation(cost, damage);
|
|
}
|
|
public List<Cell> GetNeighbor() //寻找邻居节点
|
|
{
|
|
RaycastHit2D[] hits ;
|
|
List<Vector2> directions = new List<Vector2> {Vector2.up, Vector2.down, Vector2.left, Vector2.right};
|
|
List<Cell> neighbors = new List<Cell>();
|
|
foreach(var direction in directions)
|
|
{
|
|
hits = Physics2D.RaycastAll(transform.position,direction,1.0f,LayerMask.GetMask("Cells"));
|
|
if(hits.GetLength(0) < 2) continue;
|
|
Cell cell = hits[1].collider.GetComponent<Cell>();
|
|
neighbors.Add(cell);
|
|
}
|
|
return neighbors;
|
|
}
|
|
public void CalculateCosts(Vector2 goal)
|
|
{
|
|
gCost = parent.gCost + cost + damage;
|
|
hCost = GameSettlement.Manhattan(transform.position, goal);
|
|
fCost = gCost + hCost;
|
|
}
|
|
}
|