Exemplo n.º 1
0
        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
                                                  ));
            }
        }
Exemplo n.º 2
0
        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);
                }
            }
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
 protected void RemoveTeleport()
 {
     foreach (var t in Teleports)
     {
         if (t.HasPoint(Cursor.Position))
         {
             t.RemoveExitPoint(Cursor.Position);
             if (!t.HasAnyPoint())
             {
                 Teleports.Remove(t);
             }
             return;
         }
     }
 }
Exemplo n.º 5
0
 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);
     }
 }
Exemplo n.º 6
0
        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;
                }
            }
        }
Exemplo n.º 7
0
    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)]);
    }
Exemplo n.º 8
0
        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);
                            }
                        }
                    }
                }
            }
        }