Ejemplo n.º 1
0
        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;
        }
Ejemplo n.º 2
0
        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;
        }
Ejemplo n.º 3
0
        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;
        }
Ejemplo n.º 4
0
 public WeaponAttack(BattleScreen screen, Soldier pikeman)
     : base(screen, pikeman.getSide())
 {
     _pikeman = pikeman;
     _screen.removeScreenObject(this);
 }