コード例 #1
0
ファイル: Unit.cs プロジェクト: uniquecorn/lasergem2
    public void StartAttack(int attack)
    {
        attackTarget = null;
        attackReticule.gameObject.SetActive(false);
        minAttackRange = data.actions[attack].minRange;
        maxAttackRange = data.actions[attack].maxRange;
        currentAttack  = attack;
        faceTiles      = new List <Tile>();
        int _x = tile.x;
        int _y = tile.y;

        if (_y + 1 <= GameManager.MAP_HEIGHT)
        {
            faceTiles.Add(GameManager.instance.GetTile(_x, _y + 1));
        }
        if (_y - 1 >= 0)
        {
            faceTiles.Add(GameManager.instance.GetTile(_x, _y - 1));
        }
        if (_x - 1 >= 0)
        {
            faceTiles.Add(GameManager.instance.GetTile(_x - 1, _y));
        }
        if (_x + 1 <= GameManager.MAP_WIDTH)
        {
            faceTiles.Add(GameManager.instance.GetTile(_x + 1, _y));
        }
        unitPhase = UnitPhase.ATTACK;
        GameManager.instance.state = GameManager.GameState.DISABLESELECTING;
        GetAttackTiles(tile, false);
    }
コード例 #2
0
ファイル: Unit.cs プロジェクト: uniquecorn/lasergem2
 public void StartMove()
 {
     if (data.movementRange - movementUsed > 1)
     {
         attackTarget = null;
         attackReticule.gameObject.SetActive(false);
         unitPhase = UnitPhase.MOVE;
         moveTile  = tile;
         GetMovementTiles();
         GameManager.instance.state = GameManager.GameState.DISABLESELECTING;
     }
 }
コード例 #3
0
ファイル: Unit.cs プロジェクト: uniquecorn/lasergem2
 public override void Unselect()
 {
     GameManager.selectedObject = null;
     selector.color             = Color.grey;
     GameManager.instance.unitDisplay.Hide();
     unitPhase = UnitPhase.IDLE;
     GameManager.instance.state = GameManager.GameState.IDLE;
     if (movementUsed == 0)
     {
         pathDisplay.hidden = true;
     }
 }
コード例 #4
0
ファイル: Unit.cs プロジェクト: uniquecorn/lasergem2
    void AttackCheck()
    {
        for (int i = 0; i < attackRangeTiles.Count; i++)
        {
            attackRangeTiles[i].Highlight(attackColor);
        }
        if (CastleManager.selectedObject && CastleManager.selectedObject is Tile)
        {
            bool inRange = false;
            for (int i = 0; i < attackRangeTiles.Count; i++)
            {
                if (CastleManager.selectedObject == attackRangeTiles[i])
                {
                    attackTarget = attackRangeTiles[i];
                    inRange      = true;
                    break;
                }
            }
            if (!inRange)
            {
                Unselect();
            }
            else
            {
                attackReticule.transform.position = attackTarget.transform.position - Vector3.forward;
                attackReticule.gameObject.SetActive(true);

                if (TileInCone(attackTarget, Facing.UP))
                {
                    SetFacing(Facing.UP);
                }
                else if (TileInCone(attackTarget, Facing.DOWN))
                {
                    SetFacing(Facing.DOWN);
                }
                else if (TileInCone(attackTarget, Facing.LEFT))
                {
                    SetFacing(Facing.LEFT);
                }
                else if (TileInCone(attackTarget, Facing.RIGHT))
                {
                    SetFacing(Facing.RIGHT);
                }

                unitPhase = UnitPhase.IDLE;
                GameManager.instance.state = GameManager.GameState.IDLE;
            }
        }
    }
コード例 #5
0
ファイル: Unit.cs プロジェクト: uniquecorn/lasergem2
    public void SetFacing(Facing _face)
    {
        facing = _face;
        switch (facing)
        {
        case Facing.UP:
            faceIndicator.transform.rotation = Quaternion.identity;
            break;

        case Facing.DOWN:
            faceIndicator.transform.rotation = Quaternion.Euler(0, 0, 180);
            break;

        case Facing.LEFT:
            faceIndicator.transform.rotation = Quaternion.Euler(0, 0, 270);
            break;

        case Facing.RIGHT:
            faceIndicator.transform.rotation = Quaternion.Euler(0, 0, 90);
            break;
        }
        unitPhase = UnitPhase.IDLE;
    }
コード例 #6
0
    public void ShowCursor(Unit unit)
    {
        Vector3 mouseVector3 = GridUtils.GetMouseWorldPosition(Input.mousePosition);

        mouseVector3.z = 0;
        int mouseX, mouseY;

        _grid.GetCellPosition(mouseVector3, out mouseX, out mouseY);
        if (mouseX < _grid.GetGridWidth() && mouseY < _grid.GetGridHeight() && mouseX >= 0 && mouseY >= 0)
        {
            GridCell gridCell = _grid.GetCell(mouseX, mouseY);
            PathNode pathNode = gridCell.GetPathNode();

            UnitPhase unitPhase = unit.GetUnitPhase();

            switch (unitPhase)
            {
            case UnitPhase.Standby:
                if (pathNode.isMovable)
                {
                    ChangeCursorTo(movementCursor);
                    break;
                }
                else if (pathNode.isAttackable && pathNode.isOccupied && gridCell.GetOccupiedBy().GetStatistics().team != unit.GetStatistics().team)
                {
                    ChangeCursorTo(attackCursor);
                    break;
                }
                else
                {
                    ResetCursor();
                    break;
                }

            case UnitPhase.AbilityActivated:
                if (pathNode.isAttackable)
                {
                    if (unit.unitData.unitAbility.abilityName == "Whirlwind" && pathNode.isOccupied && gridCell.GetOccupiedBy().GetStatistics().team != unit.GetStatistics().team)
                    {
                        ChangeCursorTo(whirlwindSkillCursor);
                    }
                    else if (unit.unitData.unitAbility.abilityName == "Throw" && pathNode.isOccupied && gridCell.GetOccupiedBy().GetStatistics().team != unit.GetStatistics().team)
                    {
                        ChangeCursorTo(throwSkillCursor);
                    }
                    else if (unit.unitData.unitAbility.abilityName == "Heal" && pathNode.isOccupied && gridCell.GetOccupiedBy().GetStatistics().team == unit.GetStatistics().team)
                    {
                        ChangeCursorTo(healSkillCursor);
                    }
                    else
                    {
                        ResetCursor();
                    }
                    break;
                }
                else
                {
                    ResetCursor();
                    break;
                }

            case UnitPhase.AfterMovement:
                if (pathNode.isAttackable && pathNode.isOccupied && gridCell.GetOccupiedBy().GetStatistics().team != unit.GetStatistics().team)
                {
                    ChangeCursorTo(attackCursor);
                    break;
                }
                else
                {
                    ResetCursor();
                    break;
                }
                break;

            case UnitPhase.AfterAttack:
                if (pathNode.isMovable)
                {
                    ChangeCursorTo(movementCursor);
                    break;
                }
                else
                {
                    ResetCursor();
                    break;
                }

            case UnitPhase.AfterDash:
                break;

            case UnitPhase.OnCooldown:
                break;

            default:
                ResetCursor();
                break;
            }
        }
        else
        {
            ResetCursor();
        }
    }
コード例 #7
0
 private void SetUnitPhase(UnitPhase unitPhase)
 {
     _unitPhase = unitPhase;
 }
コード例 #8
0
 public void ToggleAbility()
 {
     _phaseBeforeAbility = _unitPhase;
     EndAction(ActionType.ActiveAbility);
 }