public static int TracePath(Vector2 fromPos, Vector2 toPos, PlayerTeam team, bool fullCheck = false) { int width = 4; float angle = TwoPointAngle(fromPos, toPos); Vector2 diff = toPos - fromPos; float offsetX = (float)Math.Cos(angle) * (width + 8); float offsetY = (float)Math.Sin(angle) * (width + 8); int itCount = (int)Math.Ceiling(diff.X / offsetX); Vector2 currentPos = fromPos; int vision = 0; for (int i = 0; i < itCount; i++) { Area area = new Area(currentPos.Y + width / 2.0f, currentPos.X - width / 2.0f, currentPos.Y - width / 2.0f, currentPos.X + width / 2.0f); IObject[] objList = GlobalGame.GetObjectsByArea(area); for (int j = 0; j < objList.Length; j++) { string name = objList[j].Name; if (name.StartsWith("Bg") || name.StartsWith("FarBg")) { continue; } if (IsPlayer(name)) { TPlayer pl = GetPlayer((IPlayer)objList[j]); if (pl.IsAlive() && !fullCheck) { if (pl.Team == team) { vision = 3; } else { return(vision); } } else { vision = Math.Max(vision, 1); } } else if (VisionObjects.ContainsKey(name)) { vision = Math.Max(vision, VisionObjects[name]); } if (vision >= 3) { return(vision); } } currentPos.X += offsetX; currentPos.Y += offsetY; } return(vision); }
public static TPlayer GetRandomPlayer(PlayerTeam team, bool isAlive) { List <TPlayer> players = new List <TPlayer>(); for (int i = 0; i < PlayerList.Count; i++) { TPlayer player = PlayerList[i]; if (player.Team == team && player.IsAlive() == isAlive) { players.Add(player); } } if (players.Count == 0) { return(null); } int index = GlobalRandom.Next(0, players.Count); return(players[index]); }
public void CallReinforcement(TPlayer player) { Area area = GlobalGame.GetCameraArea(); for (int i = 0; i < PlayerList.Count; i++) { TPlayer pl = PlayerList[i]; if (pl != null && pl.IsActive() && pl != player && pl.Team == player.Team && !pl.IsAlive()) { float x = GlobalRandom.Next((int)(area.Left + area.Width / 5), (int)(area.Right - area.Width / 5)); float y = WorldTop + 50; IObject crate = GlobalGame.CreateObject("SupplyCrate00", new Vector2(x, y)); IObject platf = GlobalGame.CreateObject("Lift00A", new Vector2(x, y - 10)); IObject leftBorder = GlobalGame.CreateObject("Lift00A", new Vector2(x - 10, y), (float)Math.PI / -2); IObject rightBorder = GlobalGame.CreateObject("Lift00A", new Vector2(x + 10, y), (float)Math.PI / 2); leftBorder.SetBodyType(BodyType.Dynamic); rightBorder.SetBodyType(BodyType.Dynamic); IObjectDestroyTargets destroy = (IObjectDestroyTargets)GlobalGame.CreateObject("DestroyTargets", new Vector2(x, y)); platf.SetMass(1e-3f); leftBorder.SetMass(1e-3f); rightBorder.SetMass(1e-3f); IObjectWeldJoint joint = (IObjectWeldJoint)GlobalGame.CreateObject("WeldJoint", new Vector2(x, y)); joint.AddTargetObject(crate); joint.AddTargetObject(platf); joint.AddTargetObject(rightBorder); joint.AddTargetObject(leftBorder); destroy.AddTriggerDestroyObject(crate); destroy.AddObjectToDestroy(joint); destroy.AddObjectToDestroy(platf); destroy.AddObjectToDestroy(leftBorder); destroy.AddObjectToDestroy(rightBorder); ObjectsToRemove.Add(destroy); ObjectsToRemove.Add(platf); ObjectsToRemove.Add(joint); ObjectsToRemove.Add(leftBorder); ObjectsToRemove.Add(rightBorder); pl.Equipment.Clear(); pl.Armor.SetId(0); pl.Revive(100, false, true, x, y); player.AddExp(5, 5); } } }