コード例 #1
0
        /// <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);
            }
        }
コード例 #2
0
        /// <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));
            }
        }
コード例 #3
0
ファイル: ForgeBuilding.cs プロジェクト: milkcorp/wiener
        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);
        }
コード例 #4
0
        /// <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);
            }
        }
コード例 #5
0
ファイル: ForgeBuilding.cs プロジェクト: milkcorp/wiener
        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;
        }