コード例 #1
0
ファイル: AStarAlgo.cs プロジェクト: snafua/TrollsAndGods
 /// <summary>
 /// Calculates the estimated cost of moving to goal from this node, ignoring obstacles, as hScore
 /// </summary>
 /// <param name="goal">Goal</param>
 /// <param name="hex">If hex</param>
 public void calculateH(Point goal, bool hex)
 {
     if (hex)
     {
         hScore = HandyMethods.DistanceHex(pos, goal);
     }
     else
     {
         hScore = (int)Math.Sqrt(Math.Abs(goal.x - pos.x) + Math.Abs(goal.y - pos.y));
     }
 }
コード例 #2
0
    /// <summary>
    /// Method for attacking without moving
    /// </summary>
    /// <param name="attackingUnitPos">Position of attacking unit</param>
    /// <param name="defendingUnitPos">Position of defending unit</param>
    public void attackWithoutMoving(Point attackingUnitPos, Point defendingUnitPos, bool ranged)
    {
        int           distance       = HandyMethods.DistanceHex(attackingUnitPos, defendingUnitPos);
        UnitAndAmount attackingUnits = unitsPos[attackingUnitPos.x, attackingUnitPos.y];
        UnitAndAmount defendingUnits = unitsPos[defendingUnitPos.x, defendingUnitPos.y];

        attackingUnits.dealDamage(defendingUnits, ranged, distance);
        if (defendingUnits.Unit.HaveNotRetaliated && defendingUnits.Amount > 0 && !ranged)
        {
            defendingUnits.dealDamage(attackingUnits, ranged, distance);
            defendingUnits.Unit.HaveNotRetaliated = false;
        }
        if (attackingUnits.Amount < 0)
        {
            attackingUnits.Amount = 0;
        }
        if (defendingUnits.Amount < 0)
        {
            defendingUnits.Amount = 0;
        }
    }
コード例 #3
0
ファイル: CombatAi.cs プロジェクト: snafua/TrollsAndGods
    /// <summary>
    /// Method finds wich enemy unit to attack and then calls the checkPos method
    /// </summary>
    /// <param name="activeUnit">The unit whose turn it is</param>
    public void act(UnitGameObject activeUnit)
    {
        x = activeUnit.LogicalPos.x;
        y = activeUnit.LogicalPos.y;
        UnitGameObject[] possibleTargets = new UnitGameObject[UnitTree.TREESIZE + 1];
        int next = 0;

        //Finds enemy units
        for (int i = 0; i < width; i++)
        {
            for (int j = 0; j < height; j++)
            {
                if (field[i, j].GetComponent <GroundGameObject>().IsOccupied&& unitsOnField[i, j] != null &&
                    unitsOnField[i, j].GetComponent <UnitGameObject>().AttackingSide)
                {
                    possibleTargets[next++] = unitsOnField[i, j].GetComponent <UnitGameObject>();
                }
            }
        }
        //Finds closest enemy unit
        UnitGameObject target   = possibleTargets[0];
        int            distance = HandyMethods.DistanceHex(activeUnit.LogicalPos, target.LogicalPos);

        for (int i = 1; i < possibleTargets.Length; i++)
        {
            if (possibleTargets[i] == null)
            {
                break;
            }
            int tmpDistance = HandyMethods.DistanceHex(activeUnit.LogicalPos, possibleTargets[i].LogicalPos);
            if (tmpDistance < distance)
            {
                target   = possibleTargets[i];
                distance = tmpDistance;
            }
        }

        checkPos(target.LogicalPos.x, target.LogicalPos.y);
    }