public void InitDotResources(GameObject continueFX, AudioClip continueAC, GameObject effectFX, AudioClip effectAC, GameObject endFX, AudioClip endAC) { effectContinue = EffectPlayer.PlayOnTransform(continueFX, Target.BeAtkPoint); audioContinue = AudioSystem.Instance.PlayOnTransform(continueAC, Target.BeAtkPoint); objContinueEffectFX = effectFX; acContinueEffectSE = effectAC; objEndEffectFX = endFX; acEndEffectSE = endAC; }
protected CastResult OnExucete() { if (SkillStatus == Status.Casting) { return(CastResult.IsCasting); } if (InCD) { return(CastResult.InCD); } CastResult result = PreExecute(); if (result != CastResult.Success) { return(result); } result = CanExecute(); if (result != CastResult.Success) { return(result); } if (!IsInRange()) { return(CastResult.OutOfRange); } for (int i = 0, length = SkillCost.Length; i < length; ++i) { if (!Master.HasSkillEnergy(SkillCost[i].type, SkillCost[i].value)) { return(CastResult.NoEnergy); } } ClearCastObjs(); Master.OnSkillStart(this); if (CastTime > 0) { SkillStatus = Status.Casting; fTimeCounter = 0; if (CastFX) { effectCastFx = EffectPlayer.PlayOnTransform(CastFX, CastFXPoint ? CastFXPoint : transform); } if (CastSE) { castPlayer = AudioSystem.Instance.PlayOnTransform(CastSE, CastFXPoint ? CastFXPoint : transform); } Master.Role.PlayAction(CastActionName, 0.1f); } else { PrepareCast(); } return(result); }
protected override void OnExecute(InteractiveObj self, InteractiveObj target) { target.DoDamage(new Damage(EffectType, self.CalAtkDamage(EffectBaseValue)), self); EffectPlayer.PlayOnTransform(EffectFX, target.BeAtkPoint); AudioSystem.Instance.PlayOnTransform(EffectSE, target.BeAtkPoint); Debuff_Dot dot = new Debuff_Dot(); dot.Init(nBuffOrder, nDuration, BuffBase.Type.Debuff, self, target); dot.InitDot(nFirstEffectTime, nDuration, EffectType, self.CalAtkDamage(nEffectDamage), self.CalAtkDamage(nEndDamage)); dot.InitDotResources(objContinueFX, acContinueSE, objContinueEffectFX, acContinueEffectSE, objEndEffectFX, acEndEffectSE); target.AddBuff(dot); }
public void Execute(InteractiveObj self, InteractiveObj target) { GameClient.Instance.NextTick(() => { if (!target) { return; } EffectPlayer.PlayOnTransform(EffectFX, target.BeAtkPoint); AudioSystem.Instance.PlayAtPos(EffectSE, target.BeAtkPoint.position); OnExecute(self, target); }, EffectDelay / 1000f); }
public override void DoUpdate(float deltaTime) { if (RaimainingTime < 0) { return; } if ((RaimainingTime -= (int)deltaTime * 1000) < nNextEffectTime) { Target.DoDamage(new Damage(eEffectType, nDamage), Master); nNextEffectTime = RaimainingTime - nEffectInterval; EffectPlayer.PlayOnTransform(objContinueEffectFX, Target.BeAtkPoint); AudioSystem.Instance.PlayOnTransform(acContinueEffectSE, Target.BeAtkPoint); } }
protected override void OnRemove(bool isDead) { if (effectContinue) { effectContinue.Recycle(); } if (audioContinue) { audioContinue.Recycle(); } effectContinue = null; audioContinue = null; Target.DoDamage(new Damage(eEffectType, nEndDamage), Master); EffectPlayer.PlayOnTransform(objEndEffectFX, Target.BeAtkPoint); AudioSystem.Instance.PlayOnTransform(acEndEffectSE, Target.BeAtkPoint); }
protected virtual void Settlement(InteractiveObj target) { if (!target) { return; } if (HitFX) { EffectPlayer.PlayOnTransform(HitFX, target.BeAtkPoint); } if (HitSE) { AudioSystem.Instance.PlayAtPos(HitSE, target.BeAtkPoint.position); } SkillEffectBase[] effects = GetComponentsInChildren <SkillEffectBase>(true); for (int i = 0, length = effects.Length; i < length; ++i) { effects[i].Execute(Master, target); } }
protected override CastResult OnCast() { for (int i = 0, length = Random.Range(MissleMinCount, MissleMaxCount + 1); i < length; ++i) { if (ReleaseFX) { EffectPlayer.PlayOnTransform(ReleaseFX, ReleaseFXPoint); } if (ReleaseSE) { AudioSystem.Instance.PlayOnTransform(ReleaseSE, ReleaseFXPoint); } Missle missle = Instantiate(MisslePrefab, transform.position, transform.rotation).GetOrAddComponent <Missle>(); switch (LockType) { case SkillLockType.Position: switch (MissleType) { case Type.Bullet: missle.InitBullet(TargetPos, MissileSpeed, Settlement); break; default: missle.Init(TargetPos, MissileSpeed, Settlement); break; } break; case SkillLockType.NoLock: switch (MissleType) { case Type.Bullet: //missle.InitBullet(TargetPos, MissileSpeed, Settlement); break; default: missle.gameObject.AddComponent <SphereCollider>().isTrigger = true; missle.gameObject.AddComponent <Rigidbody>().isKinematic = true; missle.InitFlyFront(Master.transform.forward, MissileSpeed, SkillMaxRange, (hitObj, missleScript) => { if (hitObj) { InteractiveObj target = hitObj.GetComponent <InteractiveObj>(); if (target) { if (target.IsAlive && target.IsEnemy(Master.Camp)) { Settlement(target); Destroy(missleScript.gameObject); } return; } Q_SceneObj sceneObj = hitObj.GetComponent <Q_SceneObj>(); if (sceneObj) { switch (sceneObj.objType) { case Q_SceneObj.Type.Skill: case Q_SceneObj.Type.Item: case Q_SceneObj.Type.NeedItem: break; default: return; } } } if (HitFX) { EffectPlayer.PlayAtPos(HitFX, missleScript.transform.position); } if (HitSE) { AudioSystem.Instance.PlayAtPos(HitSE, missleScript.transform.position); } missleScript.Alive = false; Destroy(missleScript.gameObject); }); break; } break; default: if (Target) { missle.Init(Target.transform, MissileSpeed, (tsf) => Settlement(tsf.GetComponent <InteractiveObj>())); } else { missle.Init(TargetPos, MissileSpeed, Settlement); } break; } missle.SetLifeTime(MissleLifeTime); if (FlySE) { AudioSystem.Instance.PlayOnTransform(FlySE, missle.transform); } } return(CastResult.Success); }