/// <summary> /// Load an entity /// </summary> /// <param name="evnt">our event</param> public static void LoadEntity(CreateNetworkedBuilding evnt) { GameObject prefab = PrefabDB.instance.GetGO(evnt.prefabID); if (prefab != null) { var instance = GameObject.Instantiate(prefab); ForgeBuilding building = instance.GetComponent <ForgeBuilding>(); building.LoadData(evnt); entities.Add(building); } }
/// <summary> /// Set up callbacks /// </summary> /// <param name="socket">our socket</param> void Networking_Setup(NetWorker socket) { Networking.PrimarySocket.AddCustomDataReadEvent(CreateNetworkedBuilding.UID, (NetworkingPlayer player, NetworkingStream stream) => { CreateNetworkedBuilding data = new CreateNetworkedBuilding().Deserialize(stream); BeardedManStudios.Network.Unity.MainThreadManager.Run(() => CreateNetworkBuildingEvent(data)); }); Networking.PrimarySocket.AddCustomDataReadEvent(UpdateNetworkedBuilding.UID, (NetworkingPlayer player, NetworkingStream stream) => { UpdateNetworkedBuilding data = new UpdateNetworkedBuilding().Deserialize(stream); BeardedManStudios.Network.Unity.MainThreadManager.Run(() => UpdateNetworkedBuildingEvent(data)); }); if (Networking.PrimarySocket.IsServer) { Networking.PrimarySocket.playerConnected += (NetworkingPlayer player) => StartCoroutine(ClientConnected(player)); } }
public CreateNetworkedBuilding PackData(SimpleNetworkedMonoBehavior requester, bool initiateEvent) { if (initiateEvent) { CallPack(this); } var evnt = new CreateNetworkedBuilding(); evnt.pos = transform.position; evnt.rot = transform.rotation; evnt.id = networkedID; evnt.placedOnID = networkedPlacedOnID; evnt.prefabID = this.prefabID; evnt.health = this.health; evnt.requesterID = requester == null ? 99999 : requester.NetworkedId; return(evnt); }
/// <summary> /// Called when the CreateNetworkBuilding event is called /// </summary> /// <param name="evnt">event data</param> public void CreateNetworkBuildingEvent(CreateNetworkedBuilding evnt) { if (Networking.PrimarySocket.IsServer) { GameObject prefab = PrefabDB.instance.GetGO(evnt.prefabID); if (prefab != null && evnt.requester != null) { var instance = GameObject.Instantiate(prefab); ForgeBuilding building = instance.GetComponent <ForgeBuilding>(); building.transform.position = evnt.pos; building.transform.rotation = evnt.rot; if (!building.CheckConditions()) // check conditions serverside { Destroy(instance); return; } entities.Add(building); evnt.id = entities.Count; evnt.health = building.maxHealth; building.LoadData(evnt); building.PackData(evnt.requester, false).Send(NetworkReceivers.Others); } } else { LoadEntity(evnt); } }
public void LoadData(CreateNetworkedBuilding data) { this.transform.position = data.pos; this.transform.rotation = data.rot; CallLoad(this); this.networkedID = data.id; this.placedOn = ForgeEntitiesManager.GetEntity(data.placedOnID); if (placedOn != null) { this.SnappedTo = placedOn.ReturnSocket(transform.position, this.buildingType); } this.PlaceBuilding(); if (data.requester != null) { ForgeBuildingPlacer.LocalNetworkedBuildingPlaced(data.requester); } this.health = data.health; }