public virtual void CreateFlyParticle() { bool isCreate = false; foreach (SkillEffectData.SkillFlyParticleData flyParticleData in _mSkillDataSlot._skillEffectData._skillFlyParticleList) { if (_mCurrentTrackTime >= flyParticleData._delayTime) { // tzz added for null if (_mSkillUser.U3DGameObject == null) { continue; } // Play fly sound if (null != flyParticleData._skillSound) { Debug.Log("_mSkillUser " + _mSkillUser.U3DGameObject.name + "Sound " + flyParticleData._skillSound._soundName); Globals.Instance.MSoundManager.PlaySoundEffect(flyParticleData._skillSound._soundName); } Vector3 startPosition = _mSkillUser.U3DGameObject.transform.position; // Create multiple missile effects foreach (SkillDataSlot.AttackTargetData attackTargetData in _mSkillDataSlot._attackTargetDataList.Values) { UnityEngine.Object obj = Resources.Load(flyParticleData._particleName); if (null == obj) { isCreate = true; Debug.Log("[Skill]: Cann't find the fly effect name " + flyParticleData._particleName); continue; } // Calculate the Projectile ParticleEffect information GameObject go = GameObject.Instantiate(obj, Vector3.zero, Quaternion.identity) as GameObject; WarshipL target = Globals.Instance.MPlayerManager.GetWarship(attackTargetData._targetID); Vector3 endPosition = target.U3DGameObject.transform.position; float missileHorzSpeed = flyParticleData.speed; float targetHorzSpeed = target.MoveSpeed; if (attackTargetData._moveState == (int)GameData.BattleGameData.MoveState.STOP) { targetHorzSpeed = 0.0f; } MotionTrack motionTrack = null; // Lihaojie 2012.09.26 Add a time track model, solve the problem which caused by the cure skill and damage skill order if (_mSkillDataSlot.IsCureSkill()) { motionTrack = new TimeTrack(GameDefines.BATTLE_STEP_TIME - flyParticleData._delayTime - 0.05f); } else { switch ((EWarshipType)_mSkillUser.Property.WarshipType) { case EWarshipType.CARRIER: { startPosition.y += 50.0f; endPosition.y += 50.0f; // missileHorzSpeed = 150; motionTrack = new AirCraftTrack(startPosition, endPosition, missileHorzSpeed, targetHorzSpeed); break; } case EWarshipType.SUBMARINE: { motionTrack = new LineTrack(startPosition, endPosition, missileHorzSpeed, targetHorzSpeed); break; } case EWarshipType.SURFACE_SHIP: { // Assume the two speed is in x axis float gravityAcceleration = -100.0f; // MotionTrack motionTrack = new ParabolicTrack(startPosition, endPosition, horzSpeed); motionTrack = new ParabolicTrack(startPosition, endPosition, missileHorzSpeed, targetHorzSpeed, gravityAcceleration); break; } } } MissileL missile = new MissileL(go, motionTrack); _mMissileEffectList.Add(missile); _mFlyEffectObjs.Add(go); isCreate = true; _mSkillState = SkillState.FLY; } // End foreach } } _mIsFlyParticleCreated = isCreate; }
public override void CreateFlyParticle() { // tzz modified for enemy NiVose fly particle // // if (!_mSkillUser.Property.WarshipIsAttacker) // { // base.CreateFlyParticle(); // // // tzz modified for creating fly state // // // if(_mIsFlyParticleCreated){ // _mSkillState = SkillState.FLY; // } // return; // } bool isCreate = false; foreach (SkillEffectData.SkillFlyParticleData flyParticleData in _mSkillDataSlot._skillEffectData._skillFlyParticleList) { if (_mCurrentTrackTime >= flyParticleData._delayTime) { if (null != flyParticleData._skillSound) { Globals.Instance.MSoundManager.PlaySoundEffect(flyParticleData._skillSound._soundName); } WarshipL skillUser = Globals.Instance.MPlayerManager.GetWarship(_mSkillDataSlot._attackerID); Vector3 startPosition = skillUser.U3DGameObject.transform.position; // Create multiple missile effects foreach (SkillDataSlot.AttackTargetData attackTargetData in _mSkillDataSlot._attackTargetDataList.Values) { string effectName = flyParticleData._particleName; if (_mSkillUser.Property.WarshipIsAttacker) { effectName = flyParticleData._particleName + "_L"; } else { effectName = flyParticleData._particleName + "_R"; } // Calculate the Projectile ParticleEffect information GameObject go = GameObject.Instantiate(Resources.Load(effectName), Vector3.zero, Quaternion.identity) as GameObject; if (null == go) { Debug.Log("The effect resource " + effectName + "is not found"); continue; } WarshipL target = Globals.Instance.MPlayerManager.GetWarship(attackTargetData._targetID); Vector3 endPosition = target.U3DGameObject.transform.position; float missileHorzSpeed = flyParticleData.speed; float targetHorzSpeed = target.MoveSpeed; if (attackTargetData._moveState == (int)GameData.BattleGameData.MoveState.STOP) { targetHorzSpeed = 0.0f; } MotionTrack motionTrack = null; startPosition.y += 50.0f; endPosition.y += 50.0f; // missileHorzSpeed = 150; go.transform.position = startPosition; motionTrack = new AirCraftTrack(startPosition, endPosition, missileHorzSpeed, targetHorzSpeed); MissileL missile = new MissileL(go, motionTrack); _mMissileEffectList.Add(missile); _mFlyEffectObjs.Add(go); isCreate = true; _mSkillState = SkillState.FLY; break; } // End foreach } } _mIsFlyParticleCreated = isCreate; }