コード例 #1
0
ファイル: BattleScreen.cs プロジェクト: JamesEdSmith/gamedev
        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;
        }
コード例 #2
0
ファイル: Formation.cs プロジェクト: JamesEdSmith/gamedev
        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;
        }