Ejemplo n.º 1
0
    public override void AI_RunActiveUnit()
    {
        Example1Unit myActiveUnit = (Example1Unit)_activeUnit;

        if (myActiveUnit.State == Example1Unit.CustomState.ReadyToMove)
        {
            int minDist = int.MaxValue;
            _targetUnit = null;
            foreach (SrpgUnit unit in _playerUnits)
            {
                int dist = SrpgGameUtils.CalcSimpleDistance(myActiveUnit, unit);
                if (dist < minDist)
                {
                    minDist     = dist;
                    _targetUnit = (Example1Unit)unit;
                }
            }

            if (minDist == 1)
            {
                myActiveUnit.SetState(Example1Unit.CustomState.ReadyToAttack);
                ClearActiveUnitCells();
                CreateActiveUnitAttackCells();
            }
            else
            {
                minDist = int.MaxValue;
                SrpgCell targetCell = null;
                foreach (SrpgCell cell in _activeUnitCells)
                {
                    int dist1   = SrpgGameUtils.CalcSimpleDistance(cell.x, cell.y, _activeUnit.x, _activeUnit.y);
                    int dist2   = SrpgGameUtils.CalcSimpleDistance(cell.x, cell.y, _targetUnit.x, _targetUnit.y);
                    int distSum = dist1 + dist2;
                    if (distSum < minDist)
                    {
                        minDist    = distSum;
                        targetCell = cell;
                    }
                }

                MoveActiveUnit(targetCell);
            }
        }
        else if (myActiveUnit.State == Example1Unit.CustomState.ReadyToAttack)
        {
            int dist = SrpgGameUtils.CalcSimpleDistance(myActiveUnit, _targetUnit);
            if (dist <= myActiveUnit.attackRange)
            {
                Attack(myActiveUnit, _targetUnit);
            }
            else
            {
                myActiveUnit.SetState(Example1Unit.CustomState.End);
                ClearActiveUnit();
            }
        }
    }
Ejemplo n.º 2
0
    public SrpgCell InstantiateCellIntoLayer(SrpgLayer layer, GameObject cellPrefab, int x, int y)
    {
        GameObject cellObj = Instantiate(cellPrefab, layer.transform);

        cellObj.name = string.Format("[{0}, {1}] {2}", x, y, cellObj.name);

        SrpgCell cell = cellObj.GetComponent <SrpgCell>();

        cell.x = x;
        cell.y = y;
        cell.SetZIndex(layer.zIndexStart);

        float cellScale = _tileWidth / cell.GetSize().x;

        cellObj.transform.localScale = new Vector3(cellScale, cellScale, 1);
        cellObj.transform.position   = CalcTilePosition(x, y);

        return(cell);
    }
Ejemplo n.º 3
0
 public void MoveActiveUnit(SrpgCell cell)
 {
     MoveActiveUnit(cell.x, cell.y);
 }
Ejemplo n.º 4
0
 public bool IsThereEnemyUnitAt(SrpgCell cell, SrpgUnit self = null)
 {
     return(IsThereEnemyUnitAt(cell.x, cell.y));
 }
Ejemplo n.º 5
0
 public bool IsTherePlayerUnitAt(SrpgCell cell, SrpgUnit self = null)
 {
     return(IsTherePlayerUnitAt(cell.x, cell.y, self));
 }