public void PlayUpdateRankEffect(UpdateUserRankEffectEvent evt, ReadyTankNode tank, UserRankNode user, [JoinByUser] BattleUserNode battleUser) { GameObject effectPrefab = tank.updateUserRankEffect.EffectPrefab; GetInstanceFromPoolEvent eventInstance = new GetInstanceFromPoolEvent { Prefab = effectPrefab, AutoRecycleTime = effectPrefab.GetComponent <UpdateRankEffectSettings>().DestroyTimeDelay }; base.ScheduleEvent(eventInstance, tank); Transform instance = eventInstance.Instance; GameObject gameObject = instance.gameObject; Transform transform = new GameObject("RankEffectRoot").transform; transform.parent = tank.tankVisualRoot.transform; transform.localPosition = Vector3.zero; transform.localRotation = Quaternion.identity; transform.localScale = Vector3.one; transform.gameObject.AddComponent <UpdateUserRankTransformBehaviour>().Init(); instance.parent = transform; instance.localPosition = Vector3.zero; instance.localRotation = Quaternion.identity; instance.localScale = Vector3.one; foreach (UpdateRankEffectParticleMovement movement in gameObject.GetComponentsInChildren <UpdateRankEffectParticleMovement>(true)) { movement.parent = transform; } transform.GetComponentInChildren <UpdateRankEffectSettings>(true).icon.SetRank(user.userRank.Rank); gameObject.SetActive(true); base.NewEvent <UpdateRankEffectFinishedEvent>().Attach(battleUser).ScheduleDelayed(tank.updateUserRankEffect.FinishEventTime); if (!tank.Entity.HasComponent <UpdateUserRankEffectInstantiatedComponent>()) { tank.Entity.AddComponent <UpdateUserRankEffectInstantiatedComponent>(); } tank.Entity.RemoveComponent <UpdateUserRankEffectReadyComponent>(); }
public void PlaySelfUserRankSoundEffect(UpdateUserRankEffectEvent evt, SelfTankNode tank, [JoinAll] SingleNode <MapInstanceComponent> map) { AudioSource source = Object.Instantiate <AudioSource>(tank.updateUserRankSoundEffectAsset.SelfUserRankSource); Entity entity = base.CreateEntity("UpdateUserRankSoundEffect"); entity.AddComponent(new SelfUserRankSoundEffectInstanceComponent(source)); source.transform.SetParent(map.component.SceneRoot.transform, true); source.Play(); base.NewEvent <RemoveSelfUserRankSoundEffectEvent>().Attach(entity).ScheduleDelayed(source.clip.length); }
public void PlayRemoteUserRankSoundEffect(UpdateUserRankEffectEvent evt, RemoteTankNode tank, [JoinAll] SingleNode <MapInstanceComponent> map) { AudioSource source = Object.Instantiate <AudioSource>(tank.updateUserRankSoundEffectAsset.RemoteUserRankSource); source.transform.position = tank.tankSoundRoot.SoundRootTransform.position; source.transform.rotation = tank.tankSoundRoot.SoundRootTransform.rotation; source.transform.SetParent(map.component.SceneRoot.transform, true); source.Play(); Object.DestroyObject(source.gameObject, source.clip.length + 0.3f); }