Beispiel #1
0
    void InitBattleValue()
    {
        //레벨에따른 능력치 여기서 셋팅
        BattleValue bv = GetComponent <BattleValue>();
        long        lv = UserDataMgr.Instance.MonsterLv;

        bv.Lv          = lv;
        bv.MaxHp       = 500 + (lv - 1) * 10;
        bv.CurHp       = bv.MaxHp;
        bv.Atk         = 50 + (lv - 1) * 10;
        bv.Def         = (lv - 1) * 5;
        bv.CriRatio    = (lv - 1) * 1;
        bv.CriDmgRatio = 1 + (lv - 1) * 0.1f;
        bv.CriRatio    = (lv - 1) * 0.1f;
        bv.Hit         = 70 + (lv - 1) * 1;
        bv.Dot         = (lv - 1) * 0.5f;
        Exp            = lv * lv * lv * 10;
        for (int i = 1; ; i++)
        {
            if (lv < i * 10)
            {
                Exp /= i * 10;
                break;
            }
        }
    }
Beispiel #2
0
    public override bool OnStay()
    {
        BattleValue bv = GetComponent <BattleValue>();

        Vector2 dirVec = Vector2.zero;
        Vector3 pos    = transform.position;
        float   factor = GetComponent <CircleCollider2D>().radius *transform.localScale.x;

        if (gameObject.GetComponent <Entity>().Dir == Entity.DIR.DIR_LEFT)
        {
            dirVec = Vector2.left;
            pos.x -= factor;
        }
        else
        {
            dirVec = Vector2.right;
            pos.x += factor;
        }

        RaycastHit2D hit = Physics2D.Raycast(pos, dirVec);

        if (hit.collider != null)
        {
            string hitTag = hit.collider.gameObject.tag;
            if (hitTag == "Player" && hit.distance < Sight)
            {
                AiCompnent.Target = hit.collider.gameObject;
                return(true);
            }
        }

        if (bv.CurHp < bv.MaxHp)
        {
            pos = transform.position;
            if (gameObject.GetComponent <Entity>().Dir == Entity.DIR.DIR_LEFT)
            {
                dirVec = Vector2.right;
                pos.x += factor;
            }
            else
            {
                dirVec = Vector2.left;
                pos.x -= factor;
            }
            hit = Physics2D.Raycast(pos, dirVec);
            if (hit.collider != null)
            {
                string hitTag = hit.collider.gameObject.tag;
                if (hitTag == "Player" && hit.distance < Sight)
                {
                    AiCompnent.Target = hit.collider.gameObject;
                    return(true);
                }
            }
        }


        //Debug.Log("AiStateFind Stay");
        return(base.OnStay());
    }
Beispiel #3
0
    protected bool IsDie()
    {
        BattleValue bv = GetComponent <BattleValue>();

        if (bv != null && bv.CurHp <= 0)
        {
            return(true);
        }
        return(false);
    }
Beispiel #4
0
    void LateUpdate()
    {
        BattleValue Bv = GetComponent <BattleValue>();

        if (Bv == null)
        {
            return;
        }
        UserDataMgr.Instance.CurHp = Bv.CurHp;
    }
Beispiel #5
0
    private void CalcBv(Collision col)
    {
        GameObject  sender     = col._sender;
        GameObject  receiver   = col._receiver;
        BattleValue bvSender   = sender.GetComponent <Entity>().bv;
        BattleValue bvReceiver = receiver.GetComponent <Entity>().bv;



        if (receiver.CompareTag("Item_heart"))
        {
            bvSender._hp += bvReceiver._atk;
            ObjectManager.instance.AddRemoveObj(receiver);
        }
        else
        {
            bvReceiver._hp -= bvSender._atk;
        }


        if (bvReceiver._hp <= 0)
        {
            if (receiver.CompareTag("Player") && UI_GameOver != null)
            {
                UI_PS.SetActive(false);
                Time.timeScale = 0;
                sound_background.offsound();
                UI_GameOver.SetActive(true);
                // 게임오버 ui를 보여준다.
            }
            else if (receiver.CompareTag("Enemy_Boss") && UI_Ending != null)
            {
                Time.timeScale = 0;
                ObjectManager.instance.AddRemoveObj(receiver);
                sound_background.offsound();
                sound_dead.SetActive(true);
                UI_PS.SetActive(false);
                UI_Ending.SetActive(true);
            }
            else
            {
                ObjectManager.instance.AddRemoveObj(receiver);
            }
        }

        if (sender.CompareTag("Player_Missile") || sender.CompareTag("Enemy_Missile"))
        {
            ObjectManager.instance.AddRemoveObj(sender);
        }
    }
Beispiel #6
0
    public void InitBattleValue(bool widoutCurHp = false)
    {
        BattleValue Bv = GetComponent <BattleValue>();

        if (Bv == null)
        {
            return;
        }

        Bv.Lv          = UserDataMgr.Instance.Lv;
        Bv.Exp         = UserDataMgr.Instance.Exp;
        Bv.Atk         = UserDataMgr.Instance.Atk;
        Bv.Def         = UserDataMgr.Instance.Def;
        Bv.CriRatio    = UserDataMgr.Instance.CriRatio;
        Bv.CriDmgRatio = UserDataMgr.Instance.CriDmgRatio;
        Bv.RegCriRatio = UserDataMgr.Instance.RegCriRatio;
        Bv.Hit         = UserDataMgr.Instance.Hit;
        Bv.Dot         = UserDataMgr.Instance.Dot;
        Bv.MaxHp       = UserDataMgr.Instance.MaxHp;
        if (!widoutCurHp)
        {
            Bv.CurHp = UserDataMgr.Instance.CurHp;
        }
    }
Beispiel #7
0
    void OnCollisionEnter2D(Collision2D coll)
    {
        GameObject DefObj = coll.gameObject;

        if (AtkObj == null || DefObj == null || AtkObj == DefObj)
        {
            return;
        }

        // 여기서 공격한 오브젝트와 공격당한 오브젝트의 계산등을 수행한다.

        BattleValue atkBv = AtkObj.GetComponent <BattleValue>();
        BattleValue defBv = DefObj.GetComponent <BattleValue>();

        if (atkBv == null || defBv == null)
        {
            return;
        }


        //check hit
        bool isHit = true;

        float hitVal = atkBv.Hit - defBv.Dot;
        float r      = Random.Range(0, 101f);

        if (r > hitVal)
        {
            isHit = false;
        }

        if (!isHit)
        {
            // 여기서 미스 이팩트
            //Debug.Log("miss");
            EffectMgr.Instance.GenerateEffect(EffectMgr.EFFECT_TYPE.EFFECT_TYPE_FONT_MISS, DefObj.transform.position);
            return;
        }

        //check critical
        bool isCri = true;

        float criVal = atkBv.CriRatio - defBv.RegCriRatio;

        r = Random.Range(0, 101f);
        if (r > criVal)
        {
            isCri = false;
        }

        //check damage
        double damage = atkBv.Atk * Random.Range(0.8f, 1.2f) - defBv.Def;

        if (isCri)
        {
            //Debug.Log("Cri!");
            damage *= atkBv.CriDmgRatio;
        }

        if (AtkObj.tag == "Player")
        {
            damage += UserDataMgr.Instance.Enchant * atkBv.Atk;
        }

        //update hp
        defBv.CurHp -= damage;
        EffectMgr.EffectData data = new EffectMgr.EffectData();
        data.number = damage;
        //여기서 데미지 이팩트 및 데미지 폰트 처리
        if (isCri)
        {
            EffectMgr.Instance.GenerateEffect(EffectMgr.EFFECT_TYPE.EFFECT_TYPE_FONT_CRITICAL, DefObj.transform.position, data);
            EffectMgr.Instance.GenerateEffect(EffectMgr.EFFECT_TYPE.EFFECT_CRITICAL_ATTACK, coll.contacts[0].point);
        }
        else
        {
            EffectMgr.Instance.GenerateEffect(EffectMgr.EFFECT_TYPE.EFFECT_TYPE_FONT_NORMAL, DefObj.transform.position, data);
            EffectMgr.Instance.GenerateEffect(EffectMgr.EFFECT_TYPE.EFFECT_NORMAL_ATTACK, coll.contacts[0].point);
        }

        //Debug.Log("attack!");
    }
Beispiel #8
0
 public void InitBattleValue(float hp, float atk)
 {
     _bv = new BattleValue(hp, atk);
 }
Beispiel #9
0
 public void ApplyBattleValue(BattleValue bv)
 {
     tag = "Enemy_Missile";
     InitBattleValue(bv._hp, 1);
 }
Beispiel #10
0
 // Use this for initialization
 void Start()
 {
     bv         = GetComponent <BattleValue>();
     AiCompnent = GetComponent <Ai>();
 }