internal bool findSoldier(Soldier soldier, float range, float spread) { foreach (ScreenObject pt in _screenObjects) { if (pt is Soldier && pt.getSide() != soldier.getSide()) { if (((Soldier)pt).getState() != Soldier.STATE_DEAD && ((Soldier)pt).getState() != Soldier.STATE_DYING) { // 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) { bool bool1 = ptX < soX; bool bool2 = soX - (ptX + pt.getWidth()) <= Soldier.WIDTH * range; bool bool3 = Math.Abs(ptY - soY) <= Soldier.WIDTH * spread; if ( (bool1 && bool2) && (bool3) ) { //soldier.react(ptX + Soldier.WIDTH * range); return true; } } else if (soldier.getSide() == SIDE_PLAYER && pt.getSide() == SIDE_ENEMY) { if ( (ptX > soX && ptX - (soX + soldier.getWidth()) <= Soldier.WIDTH * range) && (Math.Abs(ptY - soY) <= Soldier.WIDTH * spread) ) { //soldier.react(ptX - soldier.getWidth() - Soldier.WIDTH * range); return true; } } } } } return false; }
internal bool findShot(Soldier soldier, float range) { foreach (ScreenObject pt in _screenObjects) { if (pt is Shot && !(pt is Pavise) && pt.getSide() != soldier.getSide()) { // 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) { if ( (ptX < soX && soX - ptX <= Soldier.WIDTH * range + 5f) && (Math.Abs(ptY - soY) <= Soldier.HEIGHT * 0.5f) ) { soldier.react(ptX + Soldier.WIDTH * range); return true; } } else if (soldier.getSide() == SIDE_PLAYER && pt.getSide() == SIDE_ENEMY) { if ( (ptX > soX && ptX - soX <= Soldier.WIDTH * range + 5f) && (Math.Abs(ptY - soY) <= Soldier.HEIGHT * 0.5f) ) { soldier.react(ptX - soldier.getWidth() - Soldier.WIDTH * range); return true; } } } } return false; }
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; }
public void collectCoin(Soldier soldier) { Loot loot = new Loot(this, soldier.getPosition()); LootTwinkle twinkle = new LootTwinkle(this, soldier.getPosition(), 500f, COIN_METER_POSITION + new Vector2(_coinMeter.getBoundingRect().Width/2, 0f)); loot.addListener(twinkle); twinkle.addListener(this); }
private void assignGuard(Soldier enemy) { Soldier guard = null; foreach (Pikeman pike in (ArrayList)_pikeRows[0]) { if (pike.guardTarget == enemy) return; } if (_pikeRows.Count > 1) { foreach (Pikeman pike in (ArrayList)_pikeRows[1]) { if (pike.guardTarget == enemy) return; } } foreach (Pikeman pike in (ArrayList)_pikeRows[0]) { if (pike.guardTarget == null) { if (guard == null && pike.getState() != Soldier.STATE_MELEE_WIN && pike.getState() != Soldier.STATE_MELEE_LOSS) guard = pike; else { guard = checkGuard(guard, pike, enemy); } } } if (_pikeRows.Count > 1) { foreach (Pikeman pike in (ArrayList)_pikeRows[1]) { if (pike.guardTarget == null && pike.getState() != Soldier.STATE_MELEE_WIN && pike.getState() != Soldier.STATE_MELEE_LOSS) { if (guard == null) guard = pike; else { bool ySmaller = Math.Abs(enemy.getPosition().Y - pike.getDestination().Y) < Math.Abs(enemy.getPosition().Y - guard.getDestination().Y); bool xBigger = (pike.getDestination().X - guard.getDestination().X) * _side >= 0; bool ySubstanciallyBigger = Math.Abs(guard.getDestination().Y - pike.getDestination().Y) > (float)Soldier.HEIGHT * 3f; if (ySmaller && (xBigger || ySubstanciallyBigger) && pike.guardTarget == null && pike.getState() != Soldier.STATE_MELEE_WIN && pike.getState() != Soldier.STATE_MELEE_LOSS) guard = pike; } } } } if (guard != null) { guard.guardTarget = enemy; guard.setSpeed(0.18f); } }
private void assignDoppel(Soldier enemy) { Soldier guard = null; foreach (Soldier dopp in _soldiers) { if (dopp is Dopple) { if (dopp.guardTarget == enemy) return; } } foreach (Soldier dopp in _soldiers) { if (dopp is Dopple) { if (dopp.guardTarget == null) { if (guard == null && dopp.guardTarget == null) guard = dopp; else { bool ySmaller = Math.Abs(enemy.getPosition().Y - dopp.getPosition().Y) < Math.Abs(enemy.getPosition().Y - guard.getPosition().Y); if (ySmaller && dopp.guardTarget == null) guard = dopp; } } } } if (guard != null) guard.guardTarget = enemy; }