private void OnServerReceiveTeleportMsg(IServerPlayer fromPlayer, TeleportMsg msg) { if (!msg.DoRemove) { if (Teleports.ContainsKey(msg.Pos)) { Teleports[msg.Pos] = msg.Data; } else { Teleports.Add(msg.Pos, msg.Data); } } else { if (Teleports.ContainsKey(msg.Pos)) { Teleports.Remove(msg.Pos); } } if (!msg.Synced) { serverChannel.BroadcastPacket(new TeleportMsg( msg.Pos, msg.Data, msg.DoRemove, true )); } }
public override void React(Block moving, Block standing) { Point origin = Level().GetPoint(standing); Point currentStart = origin; var remote = Teleports.Next(currentStart); var moveTo = new Point(remote.X, remote.Y); Move.UpdatePoint(ref moveTo, moving.Facing); var goal = Level().GetBlockContainer(moveTo.X, moveTo.Y); currentStart = remote; if (!goal.CanMoveTo(moving) && !currentStart.Equals(origin)) { // destination blocked // TODO: Play ChipHum. If moving is block, do not move it away from teleport. } else if (remote.Equals(origin)) { // Totally blocked } else { Level().Teleport(moving, remote); if (moving.Chip) { Sound().Play(Shared.Sound.Teleport); } } }
public string GetAdjacentTeleport() { var teleport = Teleports.FirstOrDefault(tel => Utilities.CalculateManhattanDistance(tel.Value.Position, Position) == 1); if (!teleport.Equals(default(KeyValuePair <Coordinate, Node>))) { return(TeleportIDs.First(tid => tid.Value.Contains(teleport.Value)).Key); } else { return(string.Empty); } }
protected void RemoveTeleport() { foreach (var t in Teleports) { if (t.HasPoint(Cursor.Position)) { t.RemoveExitPoint(Cursor.Position); if (!t.HasAnyPoint()) { Teleports.Remove(t); } return; } } }
protected void AddTeleport() { if (this[Cursor.Position.X, Cursor.Position.Y] is Blank) { foreach (var t in Teleports) { if (!t.IsTeleport()) { t.AddExitPoint(Cursor.Position); Add(t); return; } } var tel = new Teleport(Cursor.Position); Teleports.Add(tel); Add(tel); } }
public Map(string mapName) { var tmxMap = new TmxMap( Paths.AssemblyDirectory + "/Content/Maps/" + mapName + ".tmx" ); Width = tmxMap.Width; Height = tmxMap.Height; TileWidth = tmxMap.TileWidth; TileHeight = tmxMap.TileHeight; for (var i = 0; i < tmxMap.TileLayers.Count; i++) { var tmxLayer = tmxMap.TileLayers[i]; var layer = new Layer(); if (IsGameLayer(tmxLayer)) { layer.Init <Maps.Tiles.Game>(tmxLayer, tmxMap); GameLayer = layer; } } for (var i = 0; i < tmxMap.ObjectGroups.Count; i++) { var tmxObjectGroup = tmxMap.ObjectGroups[i]; switch (tmxObjectGroup.Name) { case "Spawns": spawns = new Spawns(tmxObjectGroup); break; case "Teleports": teleports = new Teleports(tmxObjectGroup); break; default: System.Console.WriteLine("[WARN] Unknown object group"); break; } } }
public void SetupTeleport() { List <Transform> allTeleportHoles = new List <Transform>(); for (int i = 0; i < _levelHoles.Count; i++) { foreach (Transform t in _levelHoles[i]) { if (t.name.EndsWith("T")) { allTeleportHoles.Add(t); } } } Teleports.Clear(); Teleports.Add(allTeleportHoles[Random.Range(0, allTeleportHoles.Count)]); allTeleportHoles.Remove(Teleports[0]); Teleports.Add(allTeleportHoles[Random.Range(0, allTeleportHoles.Count)]); }
public Node(int x, int y, NodeType type, char symbol) { Position = new Coordinate(x, y); Type = type; Symbol = symbol; List <Coordinate> sides = GetSides(x, y); if (type == NodeType.PATH) { Field.Add(Position, this); foreach (var side in sides) { if (Field.ContainsKey(side)) { AddEdge(Field[side]); } } } else { Teleports.Add(Position, this); foreach (var side in sides) { if (Teleports.ContainsKey(side)) { Node teleport = Teleports[side]; if (symbol == 'A' && teleport.Symbol == 'A') { Type = NodeType.START; teleport.Type = NodeType.START; Soulmate = teleport; teleport.Soulmate = this; } else if (symbol == 'Z' && teleport.Symbol == 'Z') { Type = NodeType.END; teleport.Type = NodeType.END; Soulmate = teleport; teleport.Soulmate = this; } else { string telId = string.Concat(new[] { symbol, teleport.Symbol }); var pair = new List <Node> { this, teleport }; if (TeleportIDs.ContainsKey(telId)) { TeleportIDs[telId].AddRange(pair); } else { TeleportIDs.Add(telId, pair); } } } } } }