internal bool findPikeTip(Soldier soldier, float range) { if(soldier.DEBUGFOUNDPIKE) soldier.DEBUGFOUNDPIKE = false; foreach (ScreenObject pt in _screenObjects) { if(pt is PikeTip) { if(((PikeTip)pt).getSoldierState() != Pikeman.STATE_RECOILING || soldier.getState() == Targeteer.STATE_DEFEND || soldier.getState() == Colmillos.STATE_ATTACK) { // figure out the center of the pike tip and the center of the man float ptX = pt.getPosition().X + pt.getWidth() * 0.5f; float ptY = pt.getPosition().Y + pt.getHeight() * 0.5f; float soX = soldier.getPosition().X + soldier.getWidth() * 0.5f; float soY = soldier.getPosition().Y + soldier.getHeight() * 0.5f; if (soldier.getSide() == SIDE_ENEMY && pt.getSide() == SIDE_PLAYER) { //ptX += pt.getWidth() * 0.5f; //soX -= soldier.getWidth() * 0.5f; if ( (ptX < soX && soX - ptX <= Soldier.WIDTH * range) && (Math.Abs(ptY - soY) <= Soldier.HEIGHT * 0.5f) ) { soldier.setReactionDest(ptX + Soldier.WIDTH * range); return true; } } else if (soldier.getSide() == SIDE_PLAYER && pt.getSide() == SIDE_ENEMY) { //ptX -= pt.getWidth() * 0.5f; //soX += soldier.getWidth() * 0.5f; if ( (ptX > soX + soldier.getWidth() && ptX - (soX + soldier.getWidth()) <= Soldier.WIDTH * range) && (Math.Abs(ptY - soY) <= Soldier.HEIGHT * 0.5f) ) { soldier.setReactionDest(ptX - soldier.getWidth() - Soldier.WIDTH * range); return true; } } } } } return false; }
private Soldier checkGuard(Soldier guard, Soldier shot, ScreenObject enemy) { if (guard == null) { if (shot.getState() != Soldier.STATE_MELEE_WIN && shot.getState() != Soldier.STATE_MELEE_LOSS) return shot; else return null; } else { bool ySmaller = Math.Abs(enemy.getPosition().Y - shot.getDestination().Y) < Math.Abs(enemy.getPosition().Y - guard.getDestination().Y); if (ySmaller && shot.guardTarget == null && shot.getState() != Soldier.STATE_MELEE_WIN && shot.getState() != Soldier.STATE_MELEE_LOSS) return shot; } return guard; }