public Wall(Vector2 point1, Vector2 point2, Color color, ulong time, Player owner) { p1 = point1; p2 = point2; Color = color; LayTime = time; Owner = owner; }
public void ApplyOnPlayer(Game1 game, Player player) { ShouldBeRemoved = true; List<Player> enemies; List<Player> players; Player enemy; switch (Type) { case PowerupType.Confuse: for (int i = 0; i < game.Players.Count; i++) if (game.Players[i].Team != player.Team) game.Players[i].ConfuseTimer = 300; //player.ConfuseTimer = 300; break; case PowerupType.Slow: player.SlowTimer = 420; player.SpeedTimer = 0; break; case PowerupType.Speed: player.SlowTimer = 0; player.SpeedTimer = 420; break; case PowerupType.Wallhack: player.WallhackTimer = 300; break; case PowerupType.SlowTurn: for (int i = 0; i < game.Players.Count; i++) if (game.Players[i].Team != player.Team) game.Players[i].SlowTurnTimer = 300; break; case PowerupType.Party: for (int i = 0; i < game.Players.Count; i++) { game.Players[i].PartyTimer = 300; game.Players[i].SpeedTimer = 300; } break; case PowerupType.Satan: players = game.Players.Where(p => !p.Dead).ToList(); for (int i = 0; i < players.Count; i++) { if (players[i].WallhackTimer < 15) { players[i].WallhackTimer = 15; players[i].HideIcons = 16; } players[i].LayWall(game, true); players[i].OlderPos = players[i].LastPos; players[i].LastPos = players[i].Position; players[i].LayWallDelay = 0; } for (int i = 1; i < players.Count; i++) { int k = game.rnd.Next(i); Vector2 pos = players[i].Position; players[i].Position = players[k].Position; players[k].Position = pos; pos = players[i].LastPos; players[i].LastPos = players[k].LastPos; players[k].LastPos = pos; float rot = players[i].Angle; players[i].Angle = players[k].Angle; players[k].Angle = rot; } for (int i = 0; i < players.Count; i++) { players[i].OlderPos = players[i].LastPos; players[i].LastPos = players[i].Position; } break; case PowerupType.Reverse: enemies = game.Players.Where(p => !p.Dead && (p.Team != player.Team)).ToList(); if (enemies.Count == 0) return; enemy = enemies[game.rnd.Next(enemies.Count)]; if (enemy.WallhackTimer < 15) { enemy.WallhackTimer = 15; enemy.HideIcons = 16; } enemy.LayWall(game, true); Vector2 oldPos = enemy.Position; float oldAngle = enemy.Angle; enemy.OlderPos = enemy.LastPos = enemy.Position = enemy.ReversePos; enemy.Angle = enemy.ReverseAngle; enemy.ReversePos = oldPos; enemy.ReverseAngle = oldAngle; enemy.LayWallDelay = 0; break; case PowerupType.OneDirection: enemies = game.Players.Where(p => !p.Dead && (p.Team != player.Team)).ToList(); if (enemies.Count == 0) return; enemy = enemies[game.rnd.Next(enemies.Count)]; if (enemy.OneDirectionTimer == 0) enemy.OneDirectionMask = 0; enemy.OneDirectionTimer = 420; break; } }
public bool IntersectsPlayer(Player p) { return !ShouldBeRemoved && (X - p.Position.X) * (X - p.Position.X) + (Y - p.Position.Y) * (Y - p.Position.Y) <= Radius * Radius; }
public bool IsOwner(Player p) { return Owner != null && p.ID == Owner.ID; }
public static Player FromLine(Game1 game, string line) { string[] splits = line.Split(' '); ControlsType controls = ControlsFromString(splits[0]); if (splits.Length == 2) // controls and team { string team = splits[1]; Team t = game.Teams.First(tm => tm.Name == team); Player p = new Player(Vector2.Zero, 0, controls, t.GetColor(t.Players.Count)); p.Team = t; t.Players.Add(p); return p; } else if (splits.Length == 4) // controls and color { return new Player(Vector2.Zero, 0, controls, new Color(int.Parse(splits[1]), int.Parse(splits[2]), int.Parse(splits[3]))) { ForceColor = true }; } else// controls, team and color { string team = splits[1]; Team t = game.Teams.First(tm => tm.Name == team); Player p = new Player(Vector2.Zero, 0, controls, new Color(int.Parse(splits[2]), int.Parse(splits[3]), int.Parse(splits[4]))); p.Team = t; t.Players.Add(p); p.ForceColor = true; return p; } }