Пример #1
0
        public void SendWorldUpdateToAllClients()
        {
            List <GameObjectServer> gameObjects = GameServer.instance.GetInteractableObjects();

            List <byte> allPackets = new List <byte>();

            for (int i = 0; i < gameObjects.Count; i++)
            {
                GameObjectServer objectToSend = gameObjects[i];

                //Send an update if the object is not a leaf or if the leaf has been modified.
                if ((objectToSend is LeafServer && objectToSend.Modified) || (objectToSend is PlayerServer))
                {
                    objectToSend.Modified = false;
                    BasePacket packetToSend = ServerPacketFactory.CreateUpdatePacket(gameObjects[i]);
                    allPackets.AddRange(PacketUtil.Serialize(packetToSend));
                }
            }

            SendAll(allPackets.ToArray());
            List <byte> destroyPackets = new List <byte>();

            lock (GameServer.instance.toDestroyQueue)
            {
                foreach (var gameObj in GameServer.instance.toDestroyQueue)
                {
                    BasePacket packet = PacketFactory.NewDestroyPacket(gameObj);
                    destroyPackets.AddRange(PacketUtil.Serialize(packet));
                }
            }

            SendAll(destroyPackets.ToArray());
        }
Пример #2
0
        /// <summary>
        /// Affects any object's within range of the player's tool.
        /// </summary>
        /// <param name="allObjects">A list of all objects in the game.</param>
        public void AffectObjectsInToolRange(List <GameObjectServer> allObjects)
        {
            // Iterate through all objects.
            for (int j = 0; j < allObjects.Count; j++)
            {
                //Get the current object.
                GameObjectServer gameObject = allObjects[j];

                if (ActiveToolMode == ToolMode.PRIMARY || ActiveToolMode == ToolMode.SECONDARY)
                {
                    // Check if it's within tool range, and that it's not the current player.
                    if (gameObject != this && gameObject.IsWithinToolRange(GetToolTransform(), ToolEquipped, ActiveToolMode))
                    {
                        // Hit the object.
                        gameObject.HitByTool(this, GetToolTransform(), ToolEquipped, ActiveToolMode);
                    }
                }
            }
        }
Пример #3
0
        public void SendNewObjectToAll(GameObjectServer newObject)
        {
            BasePacket packetToSend = PacketFactory.NewCreatePacket(newObject);

            SendAll(PacketUtil.Serialize(packetToSend));
        }