Ejemplo n.º 1
0
 private void Awake()
 {
     GameUnit     = GetComponent <GameUnit>();
     Vision       = GetComponent <UnitVision>();
     NavMeshAgent = GetComponent <NavMeshAgent>();
     InvokeRepeating("Movement", 0f, GameStaticVariables.MovementRefreshTime);
 }
Ejemplo n.º 2
0
    /// <summary>
    /// 计算所有单位的视野数据
    /// </summary>
    /// <param name="units">所有单位的列表</param>
    void CalculateVision(List <UnitVision> units)
    {
        m_visionGrid.Clear();

        for (int unitIndex = 0; unitIndex < units.Count; unitIndex++)
        {
            UnitVision unit       = units[unitIndex];
            Vector2Int centerTile = WorldPosToTilePos(unit.WorldPos);

            if (IsOutsideMap(centerTile))
            {
                Debug.LogError($"单位{unit.m_gameObject.name}的格子位置{centerTile}超出了地图范围");
                continue;
            }

            List <Vector2Int> tiles = Utils.CircleByBoundingCircle(centerTile, unit.m_range, m_tileSize);
            for (int i = 0; i < tiles.Count; i++)
            {
                if (!IsBlocked(centerTile, tiles[i], unit))
                {
                    m_visionGrid.SetVisible(tiles[i].x, tiles[i].y, unit.m_mask);
                }
            }
        }
    }
Ejemplo n.º 3
0
    protected virtual void Awake()
    {
        NavMeshAgent = GetComponent <NavMeshAgent>();
        Vision       = GetComponent <UnitVision>();

        _laser = GetComponent <LineRenderer>();
    }
Ejemplo n.º 4
0
    /// <summary>
    /// 两点间的视野是否因为地形被阻挡了
    /// </summary>
    bool IsBlocked(Vector2Int startTile, Vector2Int targetTile, UnitVision unit)
    {
        List <Vector2Int> points = Utils.LineByBresenhams(startTile, targetTile);

        for (int i = 0; i < points.Count; i++)
        {
            short altitude = m_terrainGrid.GetAltitude(points[i]);
            if (altitude > unit.m_terrainHeight)
            {
                return(true);
            }
        }

        return(false);
    }
Ejemplo n.º 5
0
    bool IsVisible(int curtMask, UnitVision unit)
    {
        if ((curtMask & unit.m_mask) > 0)
        {
            return(true);
        }

        Vector2Int tilePos = WorldPosToTilePos(unit.WorldPos);

        if (m_visionGrid.IsVisible(tilePos, curtMask))
        {
            return(true);
        }

        return(false);
    }
Ejemplo n.º 6
0
    void Update()
    {
        UnitVision unit = new UnitVision(gameObject, m_mask, m_radius, m_height);

        Demo.Instance.UpdateUnit(GetInstanceID(), unit);
    }
Ejemplo n.º 7
0
 private void Awake()
 {
     GameUnit = GetComponent <GameUnit>();
     Vision   = GetComponent <UnitVision>();
 }
Ejemplo n.º 8
0
 public void UpdateUnit(int id, UnitVision unit)
 {
     m_unitDict[id] = unit;
 }
Ejemplo n.º 9
0
 protected virtual void Start()
 {
     _currentlyActiveVision = Vision;
 }