Пример #1
0
    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;
    }
Пример #2
0
    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;
    }