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()); }
/// <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); } } } }
public void SendNewObjectToAll(GameObjectServer newObject) { BasePacket packetToSend = PacketFactory.NewCreatePacket(newObject); SendAll(PacketUtil.Serialize(packetToSend)); }