예제 #1
0
        public void AddObject(string name, GOParams par)
        {
            UGameObjectBase u = null;

            switch (name)
            {
            case "SimpleFlyer":
                u = new UGameObjectBase(par.X, par.Y, "flyerRed1", 1);
                u.SetContainerSize(40, 40);
                u.Par.Velocity = 3;
                u.SetAngle(-90);
                u.Par.AngularVelocity = 1;
                u.AddBehavior(new ControlSimpleFlyer(), "ctrl");
                u.Par.ChargeLevel = 1000;
                u.Par.ChargeReady = 1000;
                u.Par.ChargeRate  = 10;
                u.AddBehavior(new ShootWhenAimed(Base, "Rocket", friendly), "Shoot");
                u.AddBehavior(new Reloading(), "Reloadng");
                enemies.Add(u);

                break;
            }

            if (u != null)
            {
                GameObjectsList.Add(u);
                teamUnits[u.Team].Add(u);
            }
        }
예제 #2
0
 public void AddBase(double X, double Y, string picture)
 {
     Base = new UGameObjectBase(X, Y, picture);
     GameObjectsList.Add(Base);
     Base.SetContainerSize(100, 100);
     friendly.Add(Base);
     Base.Par.HP = 99999;
 }
예제 #3
0
        public void AddShell(string name, List <UGameObjectBase> targetList, int X, int Y, int Angle, int Range)
        {
            UGameObjectBase obj = null;

            switch (name)
            {
            case "LightShell":
                obj = new UGameObjectBase(X, Y, "blast5");
                Map.ContainerSetMaxSide(obj.Container, 12);
                obj.Par.Velocity = 12;
                obj.AddBehavior(new MoveForward(), "MoveForward");
                obj.SetAngle(Angle);
                obj.AddBehavior(new hitAny(targetList), "hitAny");
                obj.Par.DamageMax = 5;

                break;

            case "ArmorPiercing":
                obj = new UGameObjectBase(X, Y, "blast5");
                Map.ContainerSetMaxSide(obj.Container, 17);
                obj.Par.Velocity = 12;
                obj.AddBehavior(new MoveForward(), "MoveForward");
                obj.SetAngle(Angle);
                obj.AddBehavior(new hitAny(targetList), "hitAny");
                obj.Par.DamageMax = 50;
                break;

            case "Ripper":
                obj = new UGameObjectBase(X, Y, "blast5");
                Map.ContainerSetMaxSide(obj.Container, 25);
                obj.Par.Velocity = 12;
                obj.AddBehavior(new MoveForward(), "MoveForward");
                obj.SetAngle(Angle);
                obj.AddBehavior(new hitAny(targetList), "hitAny");
                obj.Par.DamageMax = 200;
                break;

            case "Rocket":
                obj = new UGameObjectBase(X, Y, "MissileRed1", 1);
                obj.SetContainerSize(30, 12);
                obj.Par.Velocity = 8;
                obj.SetAngle(Angle);
                obj.AddBehavior(new MoveForward(), "Move");
                obj.AddBehavior(new Hit(Base), "Hit");

                break;
            }

            if (obj != null)
            {
                GameObjectsList.Add(obj);
                obj.Par.Par.Add("Distance", 0);
                obj.Par.Range = Range;
                obj.Par.Type  = UnitTypes.shell;
            }
        }
예제 #4
0
        public override void Init(params object[] par)
        {
            CompositeUnit = (UCompositeGameObject)unit;
            SquareRadius  = CompositeUnit.Children[0].Par.Range * CompositeUnit.Children[0].Par.Range;
            UGameObjectBase tempTarget   = null;
            double          tempMinAngle = 360;
            double          a;
            double          r;
            double          MinRange = 9999999999;
            //temp out the range target
            UGameObjectBase tempOTRTarget = null;

            //поиск цели в радиусе поражения
            for (int i = 0; i < targetList.Count; i++)
            {
                r = (targetList[i].Par.X - unit.Par.X) * (targetList[i].Par.X - unit.Par.X) + (targetList[i].Par.Y - unit.Par.Y) * (targetList[i].Par.Y - unit.Par.Y);
                if (r < SquareRadius)
                {
                    a = GameMath.CompareAngles(unit.Par.Angle, GameMath.GetAngleOfVector(targetList[i].Par.X - unit.Par.X, targetList[i].Par.Y - unit.Par.Y));
                    if (a < tempMinAngle)
                    {
                        tempMinAngle = a;
                        tempTarget   = targetList[i];
                    }
                }
                else
                {
                    if (r < MinRange)
                    {
                        MinRange      = r;
                        tempOTRTarget = targetList[i];
                    }
                }
            }
            //поиск цели вне радиуса при необходимости
            RemoveAllBehaviorsExceptAI();

            if (tempTarget != null)
            {
                // if (currTarget != tempTarget)

                currStatus = 1;
                currTarget = tempTarget;
                CompositeUnit.Children[0].AddBehavior(new ShootWhenAimed(currTarget, "LightShell", targetList), "ShootWhenAimed");
            }
            else
            {
                currStatus = 3;
                currTarget = tempOTRTarget;
                unit.AddBehavior(new MoveForward(), "MoveForward");
                //что если tempOTRTarget=null?
            }
            unit.AddBehavior(new RotateTo(currTarget, 1), "RotateTo");
            CompositeUnit.Children[0].AddBehavior(new RotateTo(currTarget, 1), "RotateTo");
        }
        public override void Act()
        {
            UGameObjectBase t = Target;

            SetTarget();
            if (t != Target)
            {
                unit.RemoveBehavior("RotateTo");
                unit.AddBehavior(new RotateTo(Target.Par, 1), "RotateTo");
            }
        }
        void SetTarget()
        {
            double t, min = 999999999999999999;

            Target = null;
            for (int i = 0; i < targetsList.Count; i++)
            {
                t = (targetsList[i].Par.X - unit.Par.X) * (targetsList[i].Par.X - unit.Par.X) + (targetsList[i].Par.Y - unit.Par.Y) * (targetsList[i].Par.Y - unit.Par.Y);
                if (t < min && t > 0)
                {
                    min     = t;
                    minimum = min;
                    //if(currTarget != null)
                    //game.Map.ContainerSetFrame(currTarget.GetContainerName(), "flyerRed3");
                    Target = targetsList[i];
                    //game.Map.ContainerSetFrame(currTarget.GetContainerName(), "flyerRed2");
                }
            }
        }
        void SetTarget()
        {
            double t, min = 361;

            Target = null;

            for (int i = 0; i < targets.Count; i++)
            {
                if (targets[i].Par.HP > 0)
                {
                    t = GameMath.CompareAngles(unit.Par.Angle, GameMath.GetAngleOfVector(targets[i].Par.X - unit.Par.X, targets[i].Par.Y - unit.Par.Y));
                    if (t < min)
                    {
                        min = t;
                        //if(currTarget != null)
                        //game.Map.ContainerSetFrame(currTarget.GetContainerName(), "flyerRed3");
                        Target = targets[i];
                        //game.Map.ContainerSetFrame(currTarget.GetContainerName(), "flyerRed2");
                    }
                }
            }
        }
예제 #8
0
 public override void Clicked(UGameObjectBase g)
 {
     MainWindow.game.ClickedObj = g;
 }
예제 #9
0
 public abstract void Clicked(UGameObjectBase g);
예제 #10
0
 public Hit(UGameObjectBase Target)
 {
     target = Target;
 }