private AudioSource CreateNewAudioSource(GameObject obj) { if (string.IsNullOrEmpty(m_AudioSourceName)) { return(null); } GameObject audiosource_obj = ResourceSystem.NewObject( m_AudioSourceName, (m_StartTime + m_AudioSourceLifeTime) / 1000.0f) as GameObject; if (audiosource_obj == null) { return(null); } if (m_IsBoneSound) { Transform attach_node = TriggerUtil.GetChildNodeByName(obj, m_BoneName); if (attach_node != null) { audiosource_obj.transform.parent = attach_node; audiosource_obj.transform.rotation = UnityEngine.Quaternion.identity; audiosource_obj.transform.position = UnityEngine.Vector3.zero; if (!m_IsAttach) { audiosource_obj.transform.parent = null; } } else { audiosource_obj.transform.position = obj.transform.TransformPoint(m_Position); if (m_IsAttach) { audiosource_obj.transform.parent = obj.transform; } } } else { audiosource_obj.transform.position = obj.transform.TransformPoint(m_Position); if (m_IsAttach) { audiosource_obj.transform.parent = obj.transform; } } return(audiosource_obj.GetComponent <AudioSource>()); }
void TriggerAnim() { TriggerUtil.TriggerAnimations(0, animators); if (sSoundPlayed != "") { CustomSoundManager.Instance.PlaySound(Camera.main.gameObject, sSoundPlayed, false, fSoundVolume); } if (startsNextSequenceOnTrigger) { Invoke("StartNextsequence", timeBeforeNextSequence); } if (startsShakeAfterAllTriggers) { TriggerUtil.TriggerShake(0, shakeForce); } }
void DoTrigger() { switch (typeTrigger) { case TriggerType.Spawner: TriggerUtil.TriggerSpawners(tTimeBeforeStart, spawners); this.gameObject.SetActive(false); break; case TriggerType.SlowMo: TriggerUtil.TriggerSlowMo(tTimeBeforeStart, slowMoDuration, slowMoPower); this.gameObject.SetActive(false); break; case TriggerType.Activation: TriggerUtil.TriggerActivation(tTimeBeforeStart, affected, isActivation); this.gameObject.SetActive(false); break; case TriggerType.Sound: TriggerUtil.TriggerSound(tTimeBeforeStart, soundPlayed, volume); this.gameObject.SetActive(false); break; case TriggerType.Animator: TriggerUtil.TriggerAnimators(tTimeBeforeStart, animated); this.gameObject.SetActive(false); break; case TriggerType.Shake: TriggerUtil.TriggerShake(tTimeBeforeStart, ShakeValue); this.gameObject.SetActive(false); break; default: break; } }
public bool Execute(object sender, SkillInstance instance, long delta, long curSectionTime) { GfxSkillSenderInfo senderObj = sender as GfxSkillSenderInfo; if (null == senderObj) { return(false); } if (senderObj.ConfigData.type == (int)SkillOrImpactType.Skill) { return(false);//track只能在impact或buff里使用 } GameObject obj = senderObj.GfxObj; if (null != obj) { if (curSectionTime >= m_TriggerProxy.StartTime) { if (!m_IsStarted) { m_IsStarted = true; Vector3 dest; string trackBone = m_TrackBone.Get(instance); m_BoneTransform = Utility.FindChildRecursive(obj.transform, trackBone); if (null != m_BoneTransform) { dest = m_BoneTransform.position; } else { dest = obj.transform.position; dest.y += 1.5f; LogSystem.Warn("[skill:{0} dsl skill id:{1}] trackbullet bone {2} can't find.", senderObj.SkillId, instance.DslSkillId, trackBone); } m_StartPos = EntityController.Instance.GetImpactSenderPosition(senderObj.ObjId, senderObj.SkillId, senderObj.Seq); object speedObj; if (instance.Variables.TryGetValue("emitSpeed", out speedObj)) { m_Speed = (float)speedObj; } else { return(false); } long duration = m_Duration.Get(instance); m_Lifetime = duration / 1000.0f; if (Geometry.DistanceSquare(m_StartPos.x, m_StartPos.z, dest.x, dest.z) > 0.01f) { m_TargetPos = Utility.FrontOfTarget(dest, m_StartPos, m_Speed * m_Lifetime); } else { m_TargetPos = obj.transform.TransformPoint(0, 0, m_Speed * m_Lifetime); } long newSectionDuration = m_TriggerProxy.StartTime + (long)(m_Lifetime * 1000); if (instance.CurSectionDuration < newSectionDuration) { instance.SetCurSectionDuration(newSectionDuration); } Quaternion dir; object dirObj; if (instance.Variables.TryGetValue("emitDir", out dirObj)) { dir = (Quaternion)dirObj; } else { dir = Quaternion.identity; } Vector3 scale; object scaleObj; if (instance.Variables.TryGetValue("emitScale", out scaleObj)) { scale = (Vector3)scaleObj; } else { scale = Vector3.one; } Vector3 lookDir = dest - m_StartPos; Quaternion q = Quaternion.LookRotation(lookDir); m_ControlPos = m_StartPos + Vector3.Scale(q * dir * Vector3.forward, scale * lookDir.magnitude * 0.5f); string effectPath = SkillParamUtility.RefixResourceVariable("emitEffect", instance, senderObj.ConfigData.resources); m_Effect = ResourceSystem.Instance.NewObject(effectPath, m_Lifetime) as GameObject; if (null != m_Effect) { senderObj.TrackEffectObj = m_Effect; TriggerUtil.SetObjVisible(m_Effect, true); m_Effect.SetActive(false); m_Effect.transform.position = m_StartPos; m_Effect.transform.localRotation = q; m_Effect.SetActive(true); EffectManager em = instance.CustomDatas.GetData <EffectManager>(); if (em == null) { em = new EffectManager(); instance.CustomDatas.AddData <EffectManager>(em); } em.AddEffect(m_Effect); em.SetParticleSpeed(instance.EffectScale); } else { if (string.IsNullOrEmpty(effectPath)) { LogSystem.Warn("[skill:{0} dsl skill id:{1}] trackbullet effect is empty.", senderObj.SkillId, instance.DslSkillId); } else { LogSystem.Warn("[skill:{0} dsl skill id:{1}] trackbullet effect {2} can't find.", senderObj.SkillId, instance.DslSkillId, effectPath); } } } else if (null != m_Effect) { Vector3 dest; if (null != m_BoneTransform) { dest = m_BoneTransform.position; } else { dest = obj.transform.position; dest.y += 1.5f; } dest = Utility.FrontOfTarget(m_StartPos, dest, 0.1f); //m_Effect.transform.position = Vector3.MoveTowards(m_Effect.transform.position, m_TargetPos, m_RealSpeed * Time.deltaTime); m_Effect.transform.position = Utility.GetBezierPoint(m_StartPos, m_ControlPos, m_TargetPos, (curSectionTime - m_TriggerProxy.StartTime) / 1000.0f / m_Lifetime); var pos = m_Effect.transform.position; if (!m_IsHit) { float distSqr = float.MaxValue; if (m_LastPos.sqrMagnitude > Geometry.c_FloatPrecision) { ScriptRuntime.Vector2 np; ScriptRuntime.Vector2 targetPos = new ScriptRuntime.Vector2(dest.x, dest.z); ScriptRuntime.Vector2 lastPos = new ScriptRuntime.Vector2(m_LastPos.x, m_LastPos.z); distSqr = Geometry.PointToLineSegmentDistanceSquare(targetPos, lastPos, new ScriptRuntime.Vector2(pos.x, pos.z), out np); } else { distSqr = (dest - pos).sqrMagnitude; } m_LastPos = pos; if (distSqr <= m_BulletRadiusSquare) { float curTime = Time.time; float interval = m_DamageInterval.Get(instance) / 1000.0f; if (m_LastTime + interval <= curTime) { m_LastTime = curTime; m_HitEffectRotation = Quaternion.LookRotation(m_StartPos - dest); int impactId = TriggerUtil.GetSkillImpactId(instance.Variables, senderObj.ConfigData); Dictionary <string, object> args; TriggerUtil.CalcImpactConfig(0, impactId, instance, senderObj.ConfigData, out args); if (args.ContainsKey("hitEffectRotation")) { args["hitEffectRotation"] = m_HitEffectRotation; } else { args.Add("hitEffectRotation", m_HitEffectRotation); } EntityController.Instance.TrackSendImpact(senderObj.ObjId, senderObj.SkillId, senderObj.Seq, impactId, args); //m_IsHit = true; } } } if (curSectionTime > m_TriggerProxy.StartTime + m_Lifetime * 1000) { m_Effect.SetActive(false); ResourceSystem.Instance.RecycleObject(m_Effect); m_Effect = null; instance.StopCurSection(); return(false); } } else { return(false); } return(true); } else { return(true); } } else { instance.StopCurSection(); return(false); } }
public bool Execute(object sender, SkillInstance instance, long delta, long curSectionTime) { GfxSkillSenderInfo senderObj = sender as GfxSkillSenderInfo; if (null == senderObj) { return(false); } if (senderObj.ConfigData.type == (int)SkillOrImpactType.Skill) { return(false);//track只能在impact或buff里使用 } GameObject obj = senderObj.GfxObj; if (null != obj) { if (curSectionTime >= m_TriggerProxy.StartTime) { if (!m_IsStarted) { m_IsStarted = true; //LogSystem.Warn("trackbullet start."); Vector3 dest; string trackBone = m_TrackBone.Get(instance); m_BoneTransform = Utility.FindChildRecursive(obj.transform, trackBone); if (null != m_BoneTransform) { dest = m_BoneTransform.position; } else { dest = obj.transform.position; dest.y += 1.5f; LogSystem.Warn("[skill:{0} dsl skill id:{1}] trackbullet bone {2} can't find.", senderObj.SkillId, instance.DslSkillId, trackBone); } m_StartPos = EntityController.Instance.GetImpactSenderPosition(senderObj.ObjId, senderObj.SkillId, senderObj.Seq); dest = Utility.FrontOfTarget(m_StartPos, dest, 0.1f); object speedObj; if (instance.Variables.TryGetValue("emitSpeed", out speedObj)) { m_Speed = (float)speedObj; } else { return(false); } float duration = m_Duration.Get(instance); if (duration > Geometry.c_FloatPrecision) { float d = duration / 1000.0f; m_Lifetime = d; m_Speed = (dest - m_StartPos).magnitude / m_Lifetime; } else { m_Lifetime = 1.0f; if (m_Speed > Geometry.c_FloatPrecision) { m_Lifetime = (dest - m_StartPos).magnitude / m_Speed; } } long newSectionDuration = m_TriggerProxy.StartTime + (long)(m_Lifetime * 1000); if (instance.CurSectionDuration < newSectionDuration) { instance.SetCurSectionDuration(newSectionDuration); } Quaternion dir; object dirObj; if (instance.Variables.TryGetValue("emitDir", out dirObj)) { dir = (Quaternion)dirObj; } else { dir = Quaternion.identity; } Vector3 scale; object scaleObj; if (instance.Variables.TryGetValue("emitScale", out scaleObj)) { scale = (Vector3)scaleObj; } else { scale = Vector3.one; } Vector3 lookDir = dest - m_StartPos; Quaternion q = Quaternion.LookRotation(lookDir); m_ControlPos = m_StartPos + Vector3.Scale(q * dir * Vector3.forward, scale * lookDir.magnitude * 0.5f); string effectPath = SkillParamUtility.RefixResourceVariable("emitEffect", instance, senderObj.ConfigData.resources); m_Effect = ResourceSystem.Instance.NewObject(effectPath, m_Lifetime) as GameObject; if (null != m_Effect) { //LogSystem.Warn("trackbullet effect {0} {1}", effectPath, m_Lifetime); BulletManager.Instance.AddBullet(m_Effect); senderObj.TrackEffectObj = m_Effect; TriggerUtil.SetObjVisible(m_Effect, true); m_Effect.SetActive(false); m_Effect.transform.position = m_StartPos; m_Effect.transform.localRotation = q; m_Effect.SetActive(true); //LogSystem.Warn("trackbullet effect actived {0} {1} pos {2} {3} {4}", effectPath, m_Lifetime, m_StartPos.x, m_StartPos.y, m_StartPos.z); } else { if (string.IsNullOrEmpty(effectPath)) { LogSystem.Warn("[skill:{0} dsl skill id:{1}] trackbullet effect is empty.", senderObj.SkillId, instance.DslSkillId); } else { LogSystem.Warn("[skill:{0} dsl skill id:{1}] trackbullet effect {2} can't find.", senderObj.SkillId, instance.DslSkillId, effectPath); } } } else if (null != m_Effect) { if (!m_NotMove && !m_IsHit) { Vector3 dest; if (null != m_BoneTransform) { dest = m_BoneTransform.position; } else { dest = obj.transform.position; dest.y += 1.5f; } dest = Utility.FrontOfTarget(m_StartPos, dest, 0.1f); //m_Effect.transform.position = Vector3.MoveTowards(m_Effect.transform.position, dest, m_RealSpeed * Time.deltaTime); m_Effect.transform.position = Utility.GetBezierPoint(m_StartPos, m_ControlPos, dest, (curSectionTime - m_TriggerProxy.StartTime) / 1000.0f / m_Lifetime); var pos = m_Effect.transform.position; if (CheckCollide(senderObj, instance, obj)) { return(true); } //LogSystem.Warn("trackbullet effect move to {0} {1} {2}", pos.x, pos.y, pos.z); if ((dest - m_Effect.transform.position).sqrMagnitude <= 0.01f) { m_HitEffectRotation = Quaternion.LookRotation(m_StartPos - dest); if (m_NoImpact) { instance.SetVariable("hitEffectRotation", m_HitEffectRotation); } else { int impactId = TriggerUtil.GetSkillImpactId(instance.Variables, senderObj.ConfigData); Dictionary <string, object> args; TriggerUtil.CalcImpactConfig(0, impactId, instance, senderObj.ConfigData, out args); if (args.ContainsKey("hitEffectRotation")) { args["hitEffectRotation"] = m_HitEffectRotation; } else { args.Add("hitEffectRotation", m_HitEffectRotation); } EntityController.Instance.TrackSendImpact(senderObj.ObjId, senderObj.SkillId, senderObj.Seq, impactId, args); //LogSystem.Warn("trackbullet effect hit target {0} {1} {2}", pos.x, pos.y, pos.z); } m_IsHit = true; } } BulletManager.Instance.UpdatePos(m_Effect); if (CheckCollide(senderObj, instance, obj)) { return(true); } if (m_IsHit || curSectionTime > m_TriggerProxy.StartTime + m_Lifetime * 1000) { m_Effect.SetActive(false); ResourceSystem.Instance.RecycleObject(m_Effect); BulletManager.Instance.RemoveBullet(m_Effect); m_Effect = null; instance.StopCurSection(); //LogSystem.Warn("trackbullet effect finish."); return(false); } } else { return(false); } return(true); } else { return(true); } } else { instance.StopCurSection(); return(false); } }
/// <summary> /// Passes to the next sequence. Does nothing is no sequence is left /// </summary> public void NextSequence() { if (currentSequence.cutsSlowMoOnEnd) { C_TimeScale.Instance.ForceStopSlowMo(); } GameObject.FindObjectOfType <C_CameraRail>().bFeedbckActivated = currentSequence.bEnableCamFeedback; GameObject.FindObjectOfType <C_CameraRail>().FeedbackTransition(currentSequence.bEnableCamTransition, currentSequence.fSpeedTransition); if (currentSequence.hasEventOnEnd) { switch (currentSequence.seqEvent) { case M_Sequence.SequenceEndEventType.SlowMo: TriggerUtil.TriggerSlowMo(currentSequence.tTimeBeforeEvent, currentSequence.slowMoDuration, currentSequence.slowMoPower); break; case M_Sequence.SequenceEndEventType.Activation: TriggerUtil.TriggerActivation(currentSequence.tTimeBeforeEvent, currentSequence.affected, currentSequence.isActivation); break; case M_Sequence.SequenceEndEventType.Sound: TriggerUtil.TriggerSound(currentSequence.tTimeBeforeEvent, currentSequence.soundPlayed, currentSequence.volume); break; case M_Sequence.SequenceEndEventType.Animation: TriggerUtil.TriggerAnimationsFromTags(currentSequence.tTimeBeforeEvent, currentSequence.tagsAnimated); break; default: break; } } if (sequenceIndex < sequences.Count - 1) { sequenceIndex++; isWaitingTimer = false; currentSequence = sequences[sequenceIndex]; //Debug.Log(currentVirtualCamera); //CREATION DU NOUVEAU BLEND CinemachineBlendDefinition blendDef = new CinemachineBlendDefinition { m_Style = currentSequence.animationStyle, m_Time = currentSequence.fAnimationTime }; //SETUP BLEND CinemachineBlenderSettings.CustomBlend blend = new CinemachineBlenderSettings.CustomBlend { m_From = currentVirtualCamera.Name, m_To = currentSequence.vCamTargetName, m_Blend = blendDef }; blenderSettings.m_CustomBlends[0] = blend; cameraBrain.m_CustomBlends = blenderSettings; //CHANGEMENT DE CAM currentVirtualCamera.Priority = 10; PastCamPos = currentVirtualCamera.transform.position; currentVirtualCamera = GameObject.Find(currentSequence.vCamTargetName).GetComponent <CinemachineVirtualCamera>(); currentVirtualCamera.Priority = 11; NewCamPos = currentVirtualCamera.transform.position; //APPEL DE FONCTIONS DANS LES CHARGEURS C_Charger[] _Chargeurs = GameObject.FindObjectsOfType <C_Charger>(); for (int i = 0; i < _Chargeurs.Length; i++) { _Chargeurs[i].PlayerChangePosition(); } C_Shooter[] _Shooter = GameObject.FindObjectsOfType <C_Shooter>(); for (int i = 0; i < _Shooter.Length; i++) { _Shooter[i].PlayerChangePosition(); } fDelayOnBlendSequence = currentSequence.fAnimationTime + (currentSequence.sequenceType == M_Sequence.SequenceType.Timer ? currentSequence.fTimeSequenceDuration : 0); enemiesKilled = 0; //DECLENCHEMENT DU FEEDBACK DE CAM if (GameObject.FindObjectOfType <C_CameraRail>()) { GameObject.FindObjectOfType <C_CameraRail>().ChangeSpeedMoving(Vector3.Distance(PastCamPos, NewCamPos) / 5 / fDelayOnBlendSequence, 50); } if (currentSequence.sequenceType == M_Sequence.SequenceType.KillEnnemies) { if (currentSequence.bAcceptsBufferKill) { enemiesKilled = bufferedKills; } bufferedKills = 0; } } else { Debug.Log("No sequence left"); readSequences = false; } }
internal bool StartSkill(int actorId, TableConfig.Skill configData, int seq, params Dictionary <string, object>[] locals) { bool ret = false; if (null == configData) { LogSystem.Error("{0} can't cast skill, config is null !", actorId, seq); Helper.LogCallStack(); return(false); } if (!m_Scene.EntityController.CanCastSkill(actorId, configData, seq)) { m_Scene.EntityController.CancelCastSkill(actorId); LogSystem.Warn("{0} can't cast skill {1} {2}, cancel.", actorId, configData.id, seq); m_Scene.EntityController.CancelIfImpact(actorId, configData, seq); return(false); } GfxSkillSenderInfo senderInfo = m_Scene.EntityController.BuildSkillInfo(actorId, configData, seq, m_Scene); if (null != senderInfo && null != senderInfo.GfxObj) { int skillId = senderInfo.SkillId; EntityInfo obj = senderInfo.GfxObj; SkillLogicInfo logicInfo = m_SkillLogicInfos.Find(info => info.GfxObj == obj && info.SkillId == skillId && info.Seq == seq); if (logicInfo != null) { LogSystem.Warn("{0} is casting skill {1} {2}, cancel.", actorId, skillId, seq); m_Scene.EntityController.CancelIfImpact(actorId, configData, seq); return(false); } SkillInstanceInfo inst = null; SkillInstance innerInstance = null; if (skillId == PredefinedSkill.c_EmitSkillId) { for (int i = 0; i < locals.Length; ++i) { object instObj; if (locals[i].TryGetValue("emitskill", out instObj)) { innerInstance = instObj as SkillInstance; } } if (null == innerInstance) { LogSystem.Warn("{0} use predefined skill {1} {2} but not found emitskill, cancel.", actorId, skillId, seq); //m_Scene.EntityController.CancelIfImpact(actorId, configData, seq); //return false; } } else if (skillId == PredefinedSkill.c_HitSkillId) { for (int i = 0; i < locals.Length; ++i) { object instObj; if (locals[i].TryGetValue("hitskill", out instObj)) { innerInstance = instObj as SkillInstance; } } if (null == innerInstance) { LogSystem.Warn("{0} use predefined skill {1} {2} but not found hitskill, cancel.", actorId, skillId, seq); //m_Scene.EntityController.CancelIfImpact(actorId, configData, seq); //return false; } } if (null == innerInstance) { inst = NewSkillInstance(skillId, senderInfo.ConfigData); } else { inst = NewInnerSkillInstance(skillId, innerInstance); } if (null != inst) { m_SkillLogicInfos.Add(new SkillLogicInfo(senderInfo, inst)); } else { LogSystem.Warn("{0} cast skill {1} {2}, alloc failed.", actorId, skillId, seq); m_Scene.EntityController.CancelIfImpact(actorId, configData, seq); return(false); } logicInfo = m_SkillLogicInfos.Find(info => info.GfxObj == obj && info.SkillId == skillId && info.Seq == seq); if (null != logicInfo) { if (null != locals) { int localCount = locals.Length; for (int i = 0; i < localCount; ++i) { foreach (KeyValuePair <string, object> pair in locals[i]) { logicInfo.SkillInst.SetVariable(pair.Key, pair.Value); } } } EntityInfo target = senderInfo.TargetGfxObj; if (null != target && target != obj && configData.type == (int)SkillOrImpactType.Skill) { TriggerUtil.Lookat(m_Scene, obj, target.GetMovementStateInfo().GetPosition3D()); } m_Scene.EntityController.ActivateSkill(actorId, skillId, seq); logicInfo.SkillInst.Context = m_Scene; logicInfo.SkillInst.Start(logicInfo.Sender); ret = true; } } return(ret); }