Example #1
0
        IEnumerator LoadScene(string sceneName)
        {
            Debug.Log($"[Client] <b>Loading level</b> '<i>{sceneName}</i>'");

            EventHub <StartedLoading> .Emit(new StartedLoading());

            // Cleanup
            currentReplicaPossess = ReplicaId.Invalid;

            Client.replicaManager.Reset();

            if (sceneHandle.IsValid())
            {
                yield return(Addressables.UnloadSceneAsync(sceneHandle));
            }

            // New map
#if !UNITY_EDITOR
            sceneHandle            = Addressables.LoadSceneAsync(sceneName, LoadSceneMode.Additive);
            sceneHandle.Completed += ctx => {
                SendLoadSceneDone();
                EventHub <EndedLoading> .Emit(new EndedLoading());
            };
#else
            SendLoadSceneDone();
            EventHub <EndedLoading> .Emit(new EndedLoading());
#endif
        }
        public override void DeserializeDestruction(BitStream bs)
        {
            DamageInfo?reason         = null;
            var        hasDeathReason = bs.ReadBool();

            if (hasDeathReason)
            {
                var newReason = new DamageInfo();
                newReason.Deserialize(bs);
                reason = newReason;
            }
            OnDeath?.Invoke(reason);
            if (isOwner)
            {
                EventHub <DeathEvent> .Emit(new DeathEvent());
            }
        }
        public override void Deserialize(BitStream bs)
        {
            var newHealth = bs.ReadByte();

            if (newHealth != Health)
            {
                if (newHealth < Health)
                {
                    OnDamage?.Invoke(null);
                    if (isOwner)
                    {
                        EventHub <HurtEvent> .Emit(new HurtEvent(this));
                    }
                }
                if (newHealth > Health)
                {
                    EventHub <HealedEvent> .Emit(new HealedEvent(this));
                }
                Health = newHealth;
            }
        }
Example #4
0
        public void DestroyLayer(PedestalLayer layer, bool turnPedestalToStone = false)
        {
            layer.hasDestroyed = true;

            layer.pedestales.RemoveAll(p => !p.Active);
            foreach (var pedestal in layer.pedestales)
            {
                pedestal.Fall();
            }

            // if (turnPedestalToStone)
            // {
            //     foreach (var pedestal in layer.pedestales)
            //     {
            //         if (pedestal.CanBeTurnedToStone)
            //             pedestal.SetMaterial(_stoneMaterial);
            //     }
            // }

            EventHub.Emit(new EventPedestalLayerDestroy(layer));
        }