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; } } }
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()); }
protected bool IsDie() { BattleValue bv = GetComponent <BattleValue>(); if (bv != null && bv.CurHp <= 0) { return(true); } return(false); }
void LateUpdate() { BattleValue Bv = GetComponent <BattleValue>(); if (Bv == null) { return; } UserDataMgr.Instance.CurHp = Bv.CurHp; }
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); } }
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; } }
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!"); }
public void InitBattleValue(float hp, float atk) { _bv = new BattleValue(hp, atk); }
public void ApplyBattleValue(BattleValue bv) { tag = "Enemy_Missile"; InitBattleValue(bv._hp, 1); }
// Use this for initialization void Start() { bv = GetComponent <BattleValue>(); AiCompnent = GetComponent <Ai>(); }