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); } }
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; }
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; } }
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"); } } } }
public override void Clicked(UGameObjectBase g) { MainWindow.game.ClickedObj = g; }
public abstract void Clicked(UGameObjectBase g);
public Hit(UGameObjectBase Target) { target = Target; }