Esempio n. 1
0
    public override void FixedUpdateComponent(float _FixedDeltaTime)
    {
        base.FixedUpdateComponent(_FixedDeltaTime);

        if (m_TailAttack)
        {
            Vector3 dir = m_FireDragonCharacter.m_TailPoint[0].position - m_FireDragonCharacter.transform.position;
            dir.y = 0.0f;
            dir.Normalize();
            HashSet <CharacterBase> list = OverlabShape(m_FireDragonCharacter, m_FireDragonCharacter.transform.position, dir, 2.5f, 6.5f);
            foreach (CharacterBase c in list)
            {
                if (m_DamageList.Contains(c))
                {
                    continue;
                }
                c.GiveToDamage(m_FireDragonCharacter, m_TailAttackDamage, true);
                m_DamageList.Add(c);

                LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_TailAttackHitEffectPrefab);
                life.Initialize();
                life.transform.position = c.transform.position + Vector3.up;
                life.gameObject.SetActive(true);
            }
        }
    }
Esempio n. 2
0
    void HitBreath()
    {
        RaycastHit[] hits = Physics.SphereCastAll(m_CurrentBreathPoint.position, 0.5f, m_CurrentBreathPoint.forward, m_UseMaxDistance, m_FireDragonCharacter.m_EnemyLayerMask);
        foreach (RaycastHit h in hits)
        {
            CharacterBase character = h.transform.GetComponentInParent <CharacterBase>();
            if (!character)
            {
                continue;
            }
            if (character.m_Team == m_AICharacter.m_Team)
            {
                continue;
            }
            if (m_DamageHash.Contains(character))
            {
                continue;
            }
            m_DamageHash.Add(character);
            character.GiveToDamage(m_FireDragonCharacter, m_Damage, true);

            LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_BreathHitEffectPrefab);
            life.Initialize();
            life.transform.position = character.transform.position + Vector3.up;
            life.gameObject.SetActive(true);
        }
    }
    public override void AttackMomentEvent()
    {
        if (m_Live == E_LIVE.DEAD)
        {
            return;
        }

        Vector3 location             = transform.position + (transform.forward * m_AttackRange) + new Vector3(0.0f, 0.01f, 0.0f);
        LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_AttackImpactEffect.name);

        if (life)
        {
            life.Initialize();
            life.transform.position = location;
            life.gameObject.SetActive(true);
        }
        List <Character> list = FindEnemyAllArea(this, location, 2.0f);

        if (list != null)
        {
            for (int i = 0; i < list.Count; ++i)
            {
                list[i].GiveToDamage(GetDamages(), this);
            }
        }
    }
    IEnumerator C_SkillEvent(float _Delay)
    {
        yield return(new WaitForSeconds(_Delay));

        LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_CastEndEffectPrefab.name);

        if (life)
        {
            life.Initialize();
            life.transform.position = m_PlayerCharacter.transform.position;
            life.gameObject.SetActive(true);
        }

        Shader.SetGlobalFloat("GrayScaleFactor", 1.0f);
        GameManager.Instance.TimeScale = 0.1f;
        while (m_SkillTimer > 0.0f)
        {
            m_SkillTimer -= Time.deltaTime;
            yield return(null);
        }
        Shader.SetGlobalFloat("GrayScaleFactor", 0.0f);
        GameManager.Instance.TimeScale = 1.0f;

        m_Coroutine = null;
    }
Esempio n. 5
0
    void FrontWingAttackRight()
    {
        HitDamage(m_FireDragonCharacter, m_FireDragonCharacter.m_RightHandPoint.transform.position, m_WingAttackDamage, 1);
        LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_DragonWingAttackSmokePrefab);

        life.Initialize();
        life.transform.position = m_FireDragonCharacter.m_RightHandPoint.transform.position + Vector3.down * 0.5f;
        life.gameObject.SetActive(true);
    }
Esempio n. 6
0
    void BreathStart()
    {
        LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_BreathFirePrefab);

        life.Initialize();
        life.transform.SetParent(m_CurrentBreathPoint);
        sunTT.sunTTHelper.SetLocalTransformIdentity(life.transform);
        life.gameObject.SetActive(true);
        m_DamageHash.Clear();
        m_EnableBreath = true;
    }
    void HitEffect(string _EffectPath, Vector3 _EffectPosition)
    {
        UIManager.Instacne.m_MotionCancelGauge.AddGauge(1);
        LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(_EffectPath);

        if (life)
        {
            life.Initialize();
            life.transform.position = _EffectPosition;
            life.gameObject.SetActive(true);
        }
    }
Esempio n. 8
0
    public override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex)
    {
        float frame = stateInfo.normalizedTime;

        if (frame > 1.0f)
        {
            frame = frame - Mathf.Floor(frame);
            if (frame < m_CurrentFrame)
            {
                m_Enable = true;
            }
        }
        m_CurrentFrame = frame;
        if (!m_Enable)
        {
            return;
        }
        if (m_CurrentFrame <= m_PlayNormalizeFrame)
        {
            return;
        }
        m_Enable = false;

        CharacterBase character = animator.GetComponentInParent <CharacterBase>();

        if (character)
        {
            LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_ObjectPrefab.name);
            if (life)
            {
                life.Initialize();
                switch (m_SpawnPoint)
                {
                case E_POINT.LEFTHAND:
                    life.transform.position = character.m_LeftHandPoint.position;
                    break;

                case E_POINT.RIGHTHAND:
                    life.transform.position = character.m_RightHandPoint.position;
                    break;

                case E_POINT.ORIGIN:
                    life.transform.position = character.transform.position;
                    break;

                default:
                    break;
                }
                life.gameObject.SetActive(true);
            }
        }
    }
Esempio n. 9
0
 void FrontTailStart()
 {
     m_DamageList.Clear();
     SoundManager.Instance.PlayDefaultSound(m_CharacterBase.m_AudioList[2], 0.5f);
     for (int i = 0; i < m_FireDragonCharacter.m_TailPoint.Length; ++i)
     {
         LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_TailAttackSmokeEffectPrefab);
         life.Initialize();
         life.SetTargetTransform(m_FireDragonCharacter.m_TailPoint[i]);
         life.gameObject.SetActive(true);
     }
     m_TailAttack = true;
 }
    public void UseMeteor()
    {
        m_UseMeteor = true;
        m_CharacterBase.m_Immortal = true;
        m_CharacterBase.m_Animator.CrossFade(m_AnimKeyFlyStart, 0.3f);
        m_FlyTimer         = m_FlyTime;
        m_MeteorSpawnTimer = m_MeteorSpawnDelay;
        LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_FlySmokePrefab);

        life.Initialize();
        life.transform.position = m_FireDragonCharacter.transform.position;
        life.gameObject.SetActive(true);
    }
Esempio n. 11
0
    void HitEvent()
    {
        Vector3 pos = m_CharacterBase.transform.position + (Vector3.up + m_CharacterBase.transform.forward);

        if (HitDamage(m_CharacterBase, pos, Mathf.Floor((m_Damage + (UIManager.Instacne.m_ComboViewer.GetCurrentCombo() * 1.2f))), 0.7f))
        {
            LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_HitEffectPrefabName);
            if (life)
            {
                life.Initialize();
                life.transform.SetPositionAndRotation(m_CharacterBase.transform.position + (Vector3.up + m_CharacterBase.transform.forward * 0.35f), m_CharacterBase.transform.rotation);
                life.gameObject.SetActive(true);
            }
        }
    }
    private void OnEnable()
    {
        m_LightPower = m_StartValue;

        if (m_First)
        {
            return;
        }

        LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_EnableEffect.name);

        life.Initialize();
        life.SetTargetTransform(this.transform);
        life.gameObject.SetActive(true);
    }
Esempio n. 13
0
    protected override void OnUpdate()
    {
        float deltatime = Time.DeltaTime * GameManager.Instance.TimeScale;

        EntityCommandBuffer commandBuffer = m_EndSimulationEcbSystem.CreateCommandBuffer();

        Entities.ForEach((Entity _Entity, ref BulletComponent _Bullet, ref Translation _Translation) =>
        {
            Ray ray = new Ray(_Translation.Value, _Bullet.Direction);
            RaycastHit hit;

            float length = _Bullet.Speed * deltatime;
            if (Physics.Raycast(ray, out hit, length, _Bullet.TargetLayerMask, QueryTriggerInteraction.Collide))
            {
                CharacterBase character = hit.transform.GetComponent <CharacterBase>();
                if (character)
                {
                    //Debug.Log("character hit!!");
                    _Translation.Value = hit.point;
                    commandBuffer.DestroyEntity(_Entity);
                    character.GiveToDamage(_Bullet.HostID, _Bullet.Damage);
                }
                else
                {
                    if (math.dot(-_Bullet.Direction, hit.normal) > 0.0f)
                    {
                        _Translation.Value = hit.point;
                        commandBuffer.DestroyEntity(_Entity);
                    }
                    else
                    {
                        _Translation.Value += _Bullet.Direction * length;
                        return;
                    }
                }

                LifeTimerWithObjectPool hiteffect = ObjectPool.GetObject <LifeTimerWithObjectPool>(BulletHitPrefabs[(int)_Bullet.BulletType].name);
                if (hiteffect)
                {
                    hiteffect.Initialize();
                    hiteffect.transform.position = hit.point;
                    hiteffect.gameObject.SetActive(true);
                }
            }

            _Translation.Value += _Bullet.Direction * length;
        });
    }
    IEnumerator C_SkillEvent(float _Delay)
    {
        yield return(new WaitForSeconds(_Delay));

        LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_CastEndEffectPrefab.name);

        if (life)
        {
            life.m_LifeTime = m_SkillDuration;
            life.Initialize();
            life.transform.position = m_PlayerCharacter.transform.position;
            life.gameObject.SetActive(true);
        }

        m_Coroutine = null;
    }
    void HitEvent()
    {
        Vector3 pos = m_CharacterBase.transform.position + Vector3.up;

        if (HitDamage(m_CharacterBase, pos, m_PlayerCharacter.transform.forward, m_Damage, 0.5f, 1.5f))
        {
            UIManager.Instacne.m_MotionCancelGauge.AddGauge(1);

            LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_HitEffectPrefabName);
            if (life)
            {
                life.Initialize();
                life.transform.SetPositionAndRotation(m_CharacterBase.transform.position + (Vector3.up + m_CharacterBase.transform.forward * 0.35f), m_CharacterBase.transform.rotation);
                life.gameObject.SetActive(true);
            }
        }
    }
Esempio n. 16
0
    void HitEvent()
    {
        LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_HitEffectPrefabName);

        if (life)
        {
            life.Initialize();
            life.transform.position = m_CharacterBase.transform.position + m_CharacterBase.transform.forward;
            life.gameObject.SetActive(true);
        }
        Vector3 pos = m_CharacterBase.transform.position + (Vector3.up + m_CharacterBase.transform.forward);

        if (HitDamage(m_CharacterBase, pos, m_Damage, 0.75f))
        {
            UIManager.Instacne.m_MotionCancelGauge.AddGauge(1);
        }
    }
Esempio n. 17
0
    private void Update()
    {
        float deltatime = Time.deltaTime;

        m_Ray.origin    = transform.position;
        m_Ray.direction = m_Direction;

        if (!m_Hit && Physics.SphereCast(m_Ray, 0.5f, out m_RayHit, m_Speed * deltatime, m_GroundLayer))
        {
            m_Hit = true;
            LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_MiniMeteorImpactPrefab.name);
            life.Initialize();
            life.transform.position = m_RayHit.point;
            life.gameObject.SetActive(true);

            RaycastHit[] hits = Physics.SphereCastAll(m_Ray, m_DamageRadius, m_Speed * deltatime, m_Other.m_EnemyLayerMask);
            foreach (RaycastHit h in hits)
            {
                CharacterBase character = h.transform.GetComponentInParent <CharacterBase>();
                if (!character)
                {
                    continue;
                }
                if (character.m_Live == CharacterBase.E_Live.DEAD)
                {
                    continue;
                }
                if (character.m_Team == m_Other.m_Team)
                {
                    continue;
                }

                character.GiveToDamage(m_Other, m_Damage, true);
            }

            LifeTimerWithObjectPool mylife = GetComponent <LifeTimerWithObjectPool>();
            mylife.SetTimer(1.5f);
        }
        else
        {
            Vector3 nextpos = transform.position + m_Direction * m_Speed * deltatime;
            transform.position = nextpos;
        }
    }
    private void OnDisable()
    {
        if (m_First)
        {
            m_First = false;
            return;
        }
        LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_DisableEffect.name);

        life.Initialize();
        life.transform.position = this.transform.position;
        life.gameObject.SetActive(true);

        m_TrailEnableTimer = m_TrailEnableTime;
        if (m_TrailEnableTimer > 0.0f)
        {
            m_Trail.gameObject.SetActive(false);
        }
    }
Esempio n. 19
0
 public void UseSkill_RPC()
 {
     m_Caster.SetCharging_RPC(false);
     m_CurrentCooldown = m_MaxCooldown;
     if (m_UseEffect != null)
     {
         LifeTimerWithObjectPool effect = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_UseEffect.name);
         if (effect)
         {
             effect.transform.position = transform.position + m_EffectLocalPosition;
             effect.Initialize();
             effect.gameObject.SetActive(true);
         }
     }
     if (m_UseSoundClip != null)
     {
         SoundManager.Instance.PlayEffectSound(m_UseSoundClip);
     }
     m_UseSkillAction?.Invoke();
 }
    public override void GiveToDamage(CharacterBase _Attacker, float _Damage, bool _Knockback = false)
    {
        if (m_Immortal)
        {
            return;
        }
        if (m_Down)
        {
            return;
        }

        if (m_IsDashing)
        {
            CreateSpectrumMesh(1.5f, true, GameManager.Instacne.m_Main.m_SpectrumMaterialSkyBlue);
            LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>("AvoidEffect");
            life.Initialize();
            life.transform.position = transform.position + Vector3.up;
            life.gameObject.SetActive(true);
            UIManager.Instacne.m_MotionCancelGauge.AddGauge(2);
            return;
        }

        if (m_UseHitAnimation)
        {
            if (m_Health - _Damage > 0.0f)
            {
                if (!_Knockback)
                {
                    int number = Random.Range(0, 100);
                    SoundManager.Instance.PlayDefaultSound(number > 50 ? m_AudioListHit[0] : m_AudioListHit[1]);
                }
                else
                {
                    SoundManager.Instance.PlayDefaultSound(m_AudioListHit[2]);
                }
            }
            AllWeaponDisable();
        }

        base.GiveToDamage(_Attacker, _Damage, _Knockback);
    }
    protected override void SkillAction()
    {
        base.SkillAction();
        Debug.Log("ForceField");

        LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_CastStartEffectPrefab.name);

        if (life)
        {
            life.Initialize();
            life.transform.SetParent(m_PlayerCharacter.m_RightHandPoint);
            sunTT.sunTTHelper.SetLocalTransform(life.transform, Vector3.zero, Quaternion.identity);
            life.gameObject.SetActive(true);
        }
        m_PlayerCharacter.SetCastMode(2, true, true);
        if (m_Coroutine != null)
        {
            return;
        }
        m_Coroutine = StartCoroutine(C_SkillEvent(0.7f));
    }
Esempio n. 22
0
    protected override void SkillAction()
    {
        base.SkillAction();

        LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_CastStartEffectPrefab.name);

        if (life)
        {
            life.Initialize();
            life.transform.SetParent(m_PlayerCharacter.m_LeftHandPoint);
            sunTT.sunTTHelper.SetLocalTransform(life.transform, Vector3.zero, Quaternion.identity);
            life.gameObject.SetActive(true);
        }
        m_PlayerCharacter.SetCastMode(1, true, m_PlayerCharacter.m_UnderAnimState != CharacterBase.E_UnderBodyAnimState.JUMP);
        m_SkillTimer = m_SkillDuration;
        if (m_Coroutine != null)
        {
            return;
        }
        m_Coroutine = StartCoroutine(C_SkillEvent(1.0f));
    }
Esempio n. 23
0
    void FrontHeadHitEvent()
    {
        if (Random.Range(0, 1) == 0)
        {
            SoundManager.Instance.PlayDefaultSound(m_CharacterBase.m_AudioList[0], 0.5f);
        }
        else
        {
            SoundManager.Instance.PlayDefaultSound(m_CharacterBase.m_AudioList[1], 0.5f);
        }

        Vector3 pos = m_FireDragonCharacter.m_HeadPoint.transform.position;

        if (HitDamage(m_CharacterBase, pos, m_HeadAttackDamage, 0.75f))
        {
            LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_DragonHeadAttackHitPrefab);
            life.Initialize();
            life.transform.position = pos;
            life.gameObject.SetActive(true);
        }
    }
Esempio n. 24
0
    void FinishPunch(InputActionPhase _Phase)
    {
        if (_Phase != InputActionPhase.Started)
        {
            return;
        }
        if (UIManager.Instacne.m_ComboViewer.GetCurrentCombo() < 7)
        {
            return;
        }
        if (!CheckSkillAvailability())
        {
            return;
        }

        if (CheckMotionCancelAvailability())
        {
            SkillAnimationPlay(true, 0.5f);
        }
        else if (!DefaultStateCheck())
        {
            return;
        }
        else
        {
            SkillAnimationPlay();
        }
        m_PlayerCharacter.AllWeaponDisable();
        LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_ChargeEffect);

        life.Initialize();
        life.SetTargetTransform(m_CharacterBase.m_RightHandPoint);
        life.gameObject.SetActive(true);
        SoundManager.Instance.PlayDefaultSound(m_PlayerCharacter.m_FinishAttackClip1);
        StartNewMotion();

        m_PlayerCharacter.m_Immortal      = true;
        m_PlayerCharacter.m_StopCharacter = true;
        m_PlayerCharacter.m_FinishCamera.SetFocus();
    }
Esempio n. 25
0
    void UseSkillEvent()
    {
        m_Trigger[m_TriggerNumber] = true;
        ++m_TriggerNumber;

        m_Caster.SetStateAndAnimationLocal(E_ANIMATION.SPECIAL1, 0.25f, 1.0f, 1.5f);
        if (!m_PhotonView.IsMine)
        {
            return;
        }

        for (int i = 0; i < m_SpawnLocation.Length; ++i)
        {
            Vector3 spawnpos = m_Caster.transform.position + m_SpawnLocation[i] + new Vector3(0.0f, 0.01f, 0.0f);

            LifeTimerWithObjectPool effect = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_SummonEffectPrefab.name);
            if (effect)
            {
                effect.Initialize();
                effect.transform.position = spawnpos;
                effect.gameObject.SetActive(true);
            }
            if (!m_PhotonView.IsMine)
            {
                continue;
            }
            GameObject g = PhotonNetwork.InstantiateSceneObject(m_SummonMonsterPath + "/" + m_SummonMonsterPrefab.name, spawnpos, Quaternion.identity);
            if (g)
            {
                Character c = g.GetComponent <Character>();
                if (c)
                {
                    c.SetFreeze(1.0f, true);
                }
            }
        }
    }
Esempio n. 26
0
    protected override void DamageEvent(float[] _Damage, float[] _CalculateDamage, int[] _DamageType, float _CalculateFullDamage, bool _Critical, Character _Attacker)
    {
        base.DamageEvent(_Damage, _CalculateDamage, _DamageType, _CalculateFullDamage, _Critical, _Attacker);

        LifeTimerWithObjectPool effect = ObjectPool.GetObject <LifeTimerWithObjectPool>(((E_DAMAGETYPE)_DamageType[0]).ToString()); // 데미지 이팩트

        if (effect)
        {
            effect.Initialize();
            effect.transform.localScale = Vector3.one * (m_BodyCollider.radius * 2.0f);
            effect.transform.position   = transform.position + new Vector3(0.0f, m_BodyCollider.center.y, 0.0f);
            effect.gameObject.SetActive(true);
        }

        float YOffset = 0.0f;

        for (int i = 0; i < _DamageType.Length; ++i)
        {
            Billboard b = ObjectPool.GetObject <Billboard>("DamageText");
            if (b)
            {
                b.gameObject.SetActive(true);
                b.Initialize(_Critical ? ((int)_CalculateDamage[i]).ToString() + "!!" : ((int)_CalculateDamage[i]).ToString(),
                             transform.position + new Vector3(0.0f, 1.0f + (m_BodyCollider.height * 0.5f + m_BodyCollider.center.y + YOffset), 0.0f),
                             2.0f);
                b.SetColor(Common.m_DamageColor[_DamageType[i]]);

                YOffset += 0.33f;
            }
        }

        if (m_Health <= 0.0f && m_PhotonView.IsMine)
        {
            SetStateAndAnimationNetwork(E_ANIMATION.DEAD, 0.15f, 1.0f, 0.0f);
            return;
        }

        if (m_PlayHitAnimation)
        {
            m_Animator.CrossFade("Hit", 0.1f);
            SetFreeze(0.5f);
        }

        if (m_IsAutoPlay)
        {
            float damage = 0.0f;
            for (int i = 0; i < _Damage.Length; ++i)
            {
                damage += _Damage[i];
            }
            Character  target = null;
            HateTarget t      = null;
            target = _Attacker as Character;

            if (target != null)
            {
                if (m_DicHateTarget.TryGetValue(target.gameObject.GetInstanceID(), out t))
                {
                    t.m_Hate += damage;
                }
                else
                {
                    m_DicHateTarget.Add(target.gameObject.GetInstanceID(), new HateTarget(target, damage));
                }
            }
        }
    }
    IEnumerator C_DragonLanding()
    {
        m_MainCanvas.gameObject.SetActive(false);

        m_Dragon.m_Rigidbody.velocity = Vector3.up * 1.5f;
        bool land = false;

        while (!land)
        {
            if (Physics.Raycast(m_Dragon.transform.position, Vector3.down, 0.5f, 1 << LayerMask.NameToLayer("Ground")))
            {
                m_Dragon.m_Rigidbody.velocity = Vector3.up * 0.5f;
                m_Dragon.m_Animator.CrossFade("FlyLand", 0.2f);
                land = true;
            }
            yield return(null);
        }

        yield return(new WaitForSeconds(0.25f));

        LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_LandingSmokePrefab.name);

        life.Initialize();
        life.transform.position = m_Dragon.transform.position;
        life.gameObject.SetActive(true);
        yield return(new WaitForSeconds(1.0f));

        m_Dragon.m_Animator.CrossFade("Roer1", 0.15f);
        yield return(new WaitForSeconds(1.5f));

        SetPointBlur(m_Dragon.m_HeadPoint.position, 0, 0);
        CustomColorGradingPass.m_UsePass = true;
        float roartime = 0.0f;

        while (roartime < 1.5f)
        {
            roartime += Time.deltaTime;
            SetPointBlur(m_Dragon.m_HeadPoint.position, roartime * 0.01f, roartime * 10);
            yield return(null);
        }

        yield return(new WaitForSeconds(0.5f));

        roartime = 1.0f;
        while (roartime > 0.0f)
        {
            roartime -= Time.deltaTime;
            SetPointBlur(m_Dragon.m_HeadPoint.position, roartime * 0.015f, roartime * 10);
            yield return(null);
        }
        CustomColorGradingPass.m_UsePass = false;
        m_StartCimemaCam.ResetPriority();

        yield return(new WaitForSeconds(1.5f));

        GameManager.Instacne.m_Main.IsPlayStop = false;

        m_MainCanvas.gameObject.SetActive(true);
        m_GameTimer.Visible(true);
        m_GameTimer.m_IsStop = false;
    }
    void MotionProgress(float _DeltaTime)
    {
        if (!m_UseMeteor)
        {
            return;
        }

        if (m_FlyTimer > 0.0f)
        {
            m_FlyTimer -= _DeltaTime;
            m_CharacterBase.m_Rigidbody.velocity = Vector3.up * 5.5f;

            if (m_FlyTimer <= 0.5f)
            {
                m_CharacterBase.m_Animator.SetLayerWeight(1, (1.0f - m_FlyTimer * 2.0f));
            }

            if (m_FlyTimer <= 0.0f)
            {
                m_DurationTimer = m_Duration;
                SoundManager.Instance.PlayDefaultSound(m_FireDragonCharacter.m_RoarClip, 0.8f);

                Vector3 effpos = m_AICharacter.transform.position;
                effpos.y = 20.0f;
                LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_SkySmokePrefb);
                life.Initialize();
                life.transform.position = effpos;
                life.gameObject.SetActive(true);
            }
            return;
        }

        if (m_DurationTimer > 0.0f)
        {
            m_DurationTimer -= _DeltaTime;
            m_CharacterBase.m_Rigidbody.velocity = Vector3.up * 1.0f;

            if (m_DurationTimer <= 0.5f)
            {
                m_CharacterBase.m_Animator.SetLayerWeight(1, m_DurationTimer * 2.0f);
            }
            else
            {
                if (m_MeteorSpawnTimer > 0.0f)
                {
                    m_MeteorSpawnTimer -= _DeltaTime;
                    if (m_MeteorSpawnTimer <= 0.0f)
                    {
                        m_MeteorSpawnTimer = m_MeteorSpawnDelay;

                        Vector3 mpos = m_AICharacter.transform.position;
                        mpos.y = 25.0f;
                        Vector3 direction = Vector3.zero;
                        if (Random.Range(0, 100) > 40 || m_AICharacter.m_TargetCharacter == null)
                        {
                            mpos.x   += Random.Range(-25, 25);
                            mpos.z   += Random.Range(-25, 25);
                            direction = new Vector3(Random.Range(-0.5f, 0.5f), -1.0f, Random.Range(-0.5f, 0.5f));
                        }
                        else
                        {
                            Vector3 targetpos = m_AICharacter.m_TargetCharacter.transform.position;
                            targetpos.y  = 0.0f;
                            targetpos.x += Random.Range(-5, 5);
                            targetpos.z += Random.Range(-5, 5);
                            mpos.x       = targetpos.x;
                            mpos.z       = targetpos.z;
                            direction    = new Vector3(Random.Range(-0.25f, 0.25f), -1.0f, Random.Range(-0.25f, 0.25f));
                        }
                        LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_MeteorPrefab);
                        life.Initialize();
                        life.transform.position = mpos;

                        MiniMeteorComponent meteor = life.GetComponent <MiniMeteorComponent>();
                        meteor.Initialize(m_FireDragonCharacter, direction, 10.0f, m_MeteorDamage, 3.5f);

                        life.gameObject.SetActive(true);
                    }
                }
            }

            if (m_DurationTimer <= 0.0f)
            {
                m_LandingTimer = m_LandingTime;
            }
            return;
        }

        if (m_LandingTimer > 0.0f)
        {
            m_LandingTimer -= _DeltaTime;
            if (m_LandingTimer <= 0.0f)
            {
                m_CharacterBase.m_Animator.CrossFade(m_AnimKeyFlyLand, 0.15f);

                LifeTimerWithObjectPool life = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_FlySmokePrefab);
                life.Initialize();
                life.transform.position = m_FireDragonCharacter.transform.position + Vector3.down;
                life.gameObject.SetActive(true);
            }
        }
    }
Esempio n. 29
0
    IEnumerator C_Progress()
    {
        m_Caster.SetStateAndAnimationLocal(E_ANIMATION.SPECIAL1, 0.25f, 1.0f, 0.0f, true);

        float timer = m_ChargeTime;

        Vector3 effectpos = m_Caster.transform.position + (m_Caster.transform.rotation * m_ChargeEffectLocalLocation);
        LifeTimerWithObjectPool ribbon = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_ChargeRibbonEffect.name);

        if (ribbon)
        {
            ribbon.Initialize();
            ribbon.transform.position = effectpos;
            ribbon.gameObject.SetActive(true);
        }
        LifeTimerWithObjectPool ball = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_ChargeBallEffect.name);

        if (ball)
        {
            ball.Initialize();
            ball.transform.localScale = Vector3.one;
            ball.transform.position   = effectpos;
            ball.gameObject.SetActive(true);
        }

        while (timer > 0.0f)
        {
            if (!m_Caster.IsCharging())
            {
                ObjectPool.PushObject(ribbon.gameObject);
                ObjectPool.PushObject(ball.gameObject);
                yield break;
            }
            float deltatime = Time.deltaTime;
            timer -= deltatime;

            ball.transform.localScale += Vector3.one * deltatime;
            yield return(null);
        }

        ObjectPool.PushObject(ribbon.gameObject);
        ObjectPool.PushObject(ball.gameObject);
        m_Caster.SetCharging(false);

        LifeTimerWithObjectPool blast = ObjectPool.GetObject <LifeTimerWithObjectPool>(m_BlastEffect.name);

        if (blast)
        {
            blast.Initialize();
            blast.transform.position = m_Caster.transform.position + new Vector3(0.0f, 0.5f, 0.0f);
            blast.gameObject.SetActive(true);
        }

        List <Character> list = Character.FindEnemyAllArea(m_Caster, m_Caster.transform.position, m_Radius);

        if (list != null)
        {
            float[] damage = new float[] { CalculateSkillDamage(m_Caster, m_DamageType, m_DamageMultiply) };
            int[]   type   = new int[] { (int)m_DamageType };

            for (int i = 0; i < list.Count; ++i)
            {
                list[i].GiveToDamage(damage, type, m_Caster);
            }
        }
    }