コード例 #1
0
ファイル: Champ.cs プロジェクト: yakolla/MarineVsAlien
    public override bool ApplyBuff(Creature offender, DamageDesc.BuffType type, float time, DamageDesc damageDesc)
    {
        if (false == base.ApplyBuff(offender, type, time, damageDesc))
            return false;

        switch(type)
        {
        case DamageDesc.BuffType.LevelUp:
            DamageText(type.ToString(), Vector3.one, Color.cyan, DamageNumberSprite.MovementType.RisingUp);
            break;
        case DamageDesc.BuffType.Macho:
            DamageText(RefData.Instance.RefTexts(MultiLang.ID.MachoSkill), Vector3.one, Color.cyan, DamageNumberSprite.MovementType.RisingUp);
            break;
        }
        return true;
    }
コード例 #2
0
ファイル: Creature.cs プロジェクト: yakolla/MarineVsAlien
    IEnumerator EffectDash(DamageDesc damageDesc, float time)
    {
        Vector3 pos = transform.position;
        pos.y = damageDesc.PrefEffect.transform.position.y;
        GameObject dmgEffect = (GameObject)Instantiate(damageDesc.PrefEffect, pos, damageDesc.PrefEffect.transform.rotation);

        float finished = Time.time + time;
        rigidbody.AddForce(damageDesc.Dir*10f, ForceMode.Impulse);
        while(Time.time < finished)
        {
            yield return null;
        }

        rigidbody.velocity = Vector3.zero;
        m_buffEffects[(int)DamageDesc.BuffType.Dash].m_run = false;
        DestroyObject(dmgEffect);
    }
コード例 #3
0
ファイル: Creature.cs プロジェクト: yakolla/MarineVsAlien
 IEnumerator EffectBurning(float time, Creature offender, DamageDesc damageDesc)
 {
     while(time > 0)
     {
         yield return new WaitForSeconds(0.3f);
         time -= 0.3f;
         damageDesc.PushbackOnDamage = false;
         TakeDamage(offender, damageDesc);
     }
     m_buffEffects[(int)DamageDesc.BuffType.Poison].m_run = false;
 }
コード例 #4
0
ファイル: Creature.cs プロジェクト: yakolla/MarineVsAlien
    void ApplyDamageEffect(DamageDesc.Type type, GameObject prefEffect)
    {
        if (prefEffect == null)
            return;

        if (Warehouse.Instance.NewGameStats.DamageEffectPerSec > 10)
            return;

        Warehouse.Instance.NewGameStats.DamageEffect+=1;

        GameObject dmgEffect = (GameObject)Instantiate(prefEffect, Vector3.zero, Quaternion.Euler(0f, 0f, 0f));
        dmgEffect.transform.parent = m_aimpoint.transform;
        dmgEffect.transform.localPosition = Vector3.zero;
        dmgEffect.transform.localScale = m_aimpoint.transform.localScale;
        Bullet.ParticleScale(dmgEffect, m_aimpoint.transform.localScale.x);
        StartCoroutine(UpdateDamageEffect(dmgEffect));
    }
コード例 #5
0
ファイル: Creature.cs プロジェクト: yakolla/MarineVsAlien
    public virtual long TakeDamage(Creature offender, DamageDesc damageDesc)
    {
        if (m_behaviourType == BehaviourType.Death)
            return 0;

        if (m_buffEffects[(int)DamageDesc.BuffType.Macho].m_run == true)
        {
            DamageText(RefData.Instance.RefTexts(MultiLang.ID.Blocked), Vector3.one, Color.white, DamageNumberSprite.MovementType.ParabolaAlpha);
            return 0;
        }

        if (m_buffEffects[(int)DamageDesc.BuffType.Dash].m_run == true)
        {
            DamageText(RefData.Instance.RefTexts(MultiLang.ID.Blocked), Vector3.one, Color.white, DamageNumberSprite.MovementType.ParabolaAlpha);
            return 0;
        }

        bool critical = false;
        float criticalDamage = 1f;
        if (offender != null)
        {
            if (Random.Range(0, 1f) < offender.m_creatureProperty.CriticalChance)
            {
                critical = true;
                criticalDamage = 1f+offender.m_creatureProperty.CriticalDamage;
            }
        }

        long dmg = (long)(damageDesc.Damage*criticalDamage);
        dmg -= (long)(dmg*m_creatureProperty.DamageReduction);

        if (dmg <= 0)
        {
            dmg = Random.Range(0, 2);
        }

        if (dmg > 0)
        {
            if (Random.Range(0f, 1f) < m_creatureProperty.Dodge)
            {
                DamageText(RefData.Instance.RefTexts(MultiLang.ID.Dodged), Vector3.one, Color.white, DamageNumberSprite.MovementType.ParabolaAlpha);
                return 0;
            }

            if (m_creatureProperty.Shield > 0)
            {
                --m_creatureProperty.Shield;
                DamageText(RefData.Instance.RefTexts(MultiLang.ID.Shielded), Vector3.one, Color.white, DamageNumberSprite.MovementType.ParabolaAlpha);
                return 0;
            }
        }

        string strDamage = dmg.ToString();
        if (dmg == 0)
        {
            strDamage = RefData.Instance.RefTexts(MultiLang.ID.Blocked);
            DamageText(strDamage, Vector3.one, Color.white, DamageNumberSprite.MovementType.ParabolaAlpha);
            return 0;
        }

        if (m_ingTakenDamageEffect < Const.MaxShowDamageNumber)
        {
            Vector3 damageTextScale = Vector3.one;
            ++m_ingTakenDamageEffect;
            Color color = Color.white;
            if (critical == true)
            {
                strDamage = dmg.ToString();
                color = Color.red;
                damageTextScale *= 1.1f;
            }
            else if (damageDesc.DamageBuffType == DamageDesc.BuffType.Poison)
            {
                color = Color.magenta;
            }
            else
            {
                if (offender != null && offender.RefMob.mobAI == MobAIType.Follow)
                {
                    damageTextScale *= 0.8f;
                    switch(offender.RefMob.id)
                    {
                    case 30001:
                        color = Color.clear;
                        break;
                    case 30002:
                        color = Color.red;
                        break;
                    case 30003:
                        color = Color.blue;
                        break;
                    case 30004:
                        color = Color.cyan;
                        break;
                    case 30005:
                        color = Color.yellow;
                        break;
                    case 30006:
                        color = Color.magenta;
                        break;
                    case 30007:
                        color = Color.grey;
                        break;
                    }
                }
            }

            DamageText(strDamage, damageTextScale, color, DamageNumberSprite.MovementType.ParabolaAlpha);

            StartCoroutine(BodyRedColoredOnTakenDamage());

            ApplyDamageEffect(damageDesc.DamageType, damageDesc.PrefEffect);
        }

        if (true == m_creatureProperty.BackwardOnDamage && damageDesc.PushbackOnDamage && m_pushbackSpeedOnDamage <= 0f)
        {
            if (Random.Range(0, 10) == 0)
            {
                m_pushbackSpeedOnDamage = 10f / rigidbody.mass;
                rigidbody.AddForce(transform.right*-2f, ForceMode.Impulse);
                rigidbody.AddTorque(transform.forward*2f, ForceMode.Impulse);
                rigidbody.maxAngularVelocity = 2f;

                EnableNavmeshUpdatePos(false);
            }
        }

        ApplyBuff(offender, damageDesc.DamageBuffType, 2f, damageDesc);

        if (offender != null && damageDesc.LifeSteal == true)
        {
            long lifeSteal = (long)(offender.m_creatureProperty.LifeSteal);
            if (lifeSteal > 0)
            {
                offender.DamageText(lifeSteal.ToString() + "L", Vector3.one, Color.green, DamageNumberSprite.MovementType.ParabolaAlpha);
                offender.Heal(lifeSteal);
            }
        }

        m_creatureProperty.HP-=dmg;
        if (m_creatureProperty.HP == 0)
        {
            Const.GetSpawn().SharePotinsChamps(offender, ItemData.Type.XPPotion, m_creatureProperty.RewardExp, false);
            Death();
        }

        if (offender != null && (offender.CreatureType & Type.Champ) > 0)
        {
            Warehouse.Instance.NewGameStats.DealDamages += dmg;
        }
        else if (CreatureType == Type.Champ)
        {
            Warehouse.Instance.NewGameStats.TakenDamages += dmg;
        }

        return dmg;
    }
コード例 #6
0
ファイル: Creature.cs プロジェクト: yakolla/MarineVsAlien
    public bool ApplyHealingSkill()
    {
        if (m_buffEffects[(int)DamageDesc.BuffType.Healing].m_run == true)
            return false;

        DamageDesc desc = new DamageDesc(0, DamageDesc.Type.Normal, DamageDesc.BuffType.Nothing, null);
        desc.DamageRatio = 0.1f;
        ApplyBuff(null, DamageDesc.BuffType.Healing, 10f, desc);
        return true;
    }
コード例 #7
0
ファイル: Creature.cs プロジェクト: yakolla/MarineVsAlien
 public bool ApplyDamageMultiplySkill()
 {
     DamageDesc desc = new DamageDesc(0, DamageDesc.Type.Normal, DamageDesc.BuffType.Nothing, null);
     desc.DamageRatio = 10f;
     ApplyBuff(null, DamageDesc.BuffType.DamageMultiply, 20f, desc);
     return true;
 }
コード例 #8
0
ファイル: Creature.cs プロジェクト: yakolla/MarineVsAlien
    public virtual bool ApplyBuff(Creature offender, DamageDesc.BuffType type, float time, DamageDesc damageDesc)
    {
        //if (m_buffEffects[(int)type].m_run == true)
        //	return false;
        switch(type)
        {
        case DamageDesc.BuffType.Airborne:
        case DamageDesc.BuffType.Stun:
        case DamageDesc.BuffType.Slow:
        case DamageDesc.BuffType.Poison:
            if (m_buffEffects[(int)type].m_run == true)
                return false;
            break;
        }

        m_buffEffects[(int)type].m_run = true;

        switch(type)
        {
        case DamageDesc.BuffType.Airborne:
            StartCoroutine(EffectAirborne());
            break;
        case DamageDesc.BuffType.Stun:
            StartCoroutine(EffectStun());
            break;
        case DamageDesc.BuffType.Slow:
            StartCoroutine(EffectSlow(time));
            break;
        case DamageDesc.BuffType.LevelUp:
            StartCoroutine(EffectSteamPack(time));
            break;
        case DamageDesc.BuffType.Poison:
            StartCoroutine(EffectBurning(time, null, damageDesc));
            break;
        case DamageDesc.BuffType.Macho:
            StartCoroutine(EffectMacho(time));
            break;
        case DamageDesc.BuffType.Dash:
            StartCoroutine(EffectDash(damageDesc, time));
            break;
        case DamageDesc.BuffType.DamageMultiply:
            StartCoroutine(EffectDamageMultiply(time, damageDesc.DamageRatio));
            break;
        case DamageDesc.BuffType.Healing:
            StartCoroutine(EffectHealing(time, damageDesc.DamageRatio));
            break;
        case DamageDesc.BuffType.Zzz:
            StartCoroutine(EffectZzz(time));
            break;
        }

        return true;
    }
コード例 #9
0
ファイル: Champ.cs プロジェクト: yakolla/MarineVsAlien
    // Update is called once per frame
    new void Update()
    {
        base.Update();

        if (m_enableAutoTarget)
        {
            if (AutoAttack() == false)
            {
                m_weaponHolder.StopFiring();
                m_navAgent.Resume();
            }
            else
            {
                if (WeaponHolder.MainWeapon != null)
                    m_navAgent.Stop();
            }
        }

        int touchedCount = 0;
        Vector3[] touchPos = new Vector3[5];
        #if UNITY_EDITOR
        touchedCount = Input.GetMouseButtonUp(0) == true ? 1 : 0;
        if (touchedCount > 0)
            touchPos[0] = Input.mousePosition;

        #else
        touchedCount = Input.touchCount;
        if (touchedCount > 0)
        {
            int aa = 0;
            for(int i = 0; i < touchedCount; ++i)
            {
                if (Input.GetTouch (i).phase == TouchPhase.Began)
                {
                    touchPos[aa] = Input.GetTouch(i).position;
                    ++aa;
                }
            }

            touchedCount = aa;
        }
        #endif

        bool hitted = false;
        for (int i = 0; i < touchedCount; ++i)
        {

            StartCoroutine(EffectTouch(touchPos[i]));

            Ray ray = Camera.main.ScreenPointToRay( touchPos[i] );
            RaycastHit[] hits;
            hits = Physics.RaycastAll(ray, Mathf.Infinity, 1<<9 | 1<<10 | 1<<11);
            foreach(RaycastHit hit in hits )
            {
                Creature target = hit.transform.GetComponent<Creature>();
                if (null == WeaponHolder.MainWeapon && target != null)
                    RotateToTarget(target.transform.position);

                if (target != null && IsEnemy(target, this))
                {
                    DamageDesc tapDamageDesc = new DamageDesc(m_tapWeapon.GetDamage(m_creatureProperty), DamageDesc.Type.Normal, DamageDesc.BuffType.Nothing, null);
                    tapDamageDesc.LifeSteal = true;

                    target.TakeDamage(this, tapDamageDesc);
                    hitted = true;
                    continue;
                }

                if (hit.transform.tag.CompareTo("ItemBox") == 0)
                {
                    ItemBox itemBox = hit.transform.gameObject.GetComponent<ItemBox>();
                    itemBox.StartPickupEffect(this);
                    hitted = true;
                }
            }
        }

        if (hitted == false)
        {
            Creature[] targets = Bullet.SearchTarget(transform.position, GetMyEnemyType(), 4f+m_creatureProperty.AttackRange);
            int length = 0;
            if (targets != null)
                length = Mathf.Min(touchedCount, targets.Length);
            for(int i = 0; i < length; ++i)
            {
                if (targets[i] == null)
                    continue;

                DamageDesc tapDamageDesc = new DamageDesc(m_tapWeapon.GetDamage(m_creatureProperty), DamageDesc.Type.Normal, DamageDesc.BuffType.Nothing, null);
                tapDamageDesc.LifeSteal = true;

                targets[i].TakeDamage(this, tapDamageDesc);
            }
        }

        Warehouse.Instance.GameDataContext.m_level.Value = m_creatureProperty.Level;
        Warehouse.Instance.GameDataContext.m_hp.Value = m_creatureProperty.HP;
        Warehouse.Instance.GameDataContext.m_xp.Value = m_creatureProperty.Exp;
        Warehouse.Instance.GameDataContext.m_sp.Value = m_creatureProperty.SP;

        if (touchedCount > 0)
        {
            m_idleTime = 0f;
            m_admob.ShowBanner(false);

            if (Warehouse.Instance.GameTutorial.m_unlockedTap == false)
            {
                if (Const.GetTutorialMgr().TutorialName.CompareTo("Tap") == 0)
                {
                    Const.GetTutorialMgr().SetTutorial("Nothing");
                    Warehouse.Instance.GameTutorial.m_unlockedTap = true;
                }

            }
        }
        else
        {
            m_idleTime += Time.deltaTime;
            if (m_idleTime > 180f)
            {
                m_admob.ShowBanner(true);
                m_idleTime = 0f;
            }
        }

        TimeEffector.Instance.Update();
    }