/// <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)); } }
/// <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; } }
/// <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); }