/// <summary> /// 被攻撃処理 enemyは弱点に応じてダメージが増え、状態異常を受ける可能性がある /// </summary> /// <param name="value">受けるダメージ</param> /// <param name="ele">ダメージの属性</param> public override void TakeAttack(float value, Vector3 HitPosition, AbnState ele = null) { if (value <= 0) { return; } bool isWeak = false; //属性による影響 if (ele) { isWeak = (ele.type == weakType); //弱点の反映 value *= isWeak ? ConstData.WEAK_DAMAGE_BONUS : 1; //状態異常による影響 value = abnManager.TakeDamage(this, value, ele.type); //状態異常の反映 if (Random.Range(0f, 1f) <= (isWeak ? ele.weakPercent : ele.percent)) { TakeAbnormalState(ele); //Debug.Log("ok"); } } GetDamage(value, HitPosition, isWeak); }
/// <summary> /// 被攻撃処理 /// </summary> /// <param name="value">受けるダメージ</param> /// <param name="ele">ダメージの属性</param> /// <param name="abnormalStatePersentage">状態異常発生確率(状態異常の仕様によって変更の可能性高)</param> public virtual void TakeAttack(float value, Vector3 HitPosition, AbnState ele = null) { if (value <= 0) { return; } GetDamage(value, HitPosition); }
/// <summary> /// 属性の格納位置を調べる /// </summary> /// <returns>The abn state number.</returns> /// <param name="state">State.</param> private int GetAbnStateNum(AbnState state) { foreach (var item in (GetStateList(state.type).Select((v, i) => new { v, i }))) { if (item.v == state) { return(item.i); } } return(0); }
/// <summary> /// 新しい状態異常の追加 /// </summary> /// <param name="state">状態異常の情報</param> public void AddAbnormalState(AbnState value) { Vector3 set = objtransform.position; //set.x += 0 + (int)value.type; //既に同じタイプの状態異常があれば、それを上書きする if (!AbnormalStateSymbol[(int)value.type]) { AbnormalStateSymbol[(int)value.type] = GameObject.Instantiate(StateSymbolMaterial[(int)value.type], set, Quaternion.identity); AbnormalStateSymbol[(int)value.type].transform.SetParent(objtransform); } states[(int)value.type] = new State(value); }
/// <summary> /// 属性の変更 /// </summary> /// <param name="type">変更先の属性</param> public void ChangeElement(element type) { BulletObject bulObj = bulletObj.GetComponent <BulletObject> (); AbnState state = null; if (bulObj) { if (bulObj.elementType == type) { return; } state = MagicSystemManager.instance._abnstateManager.GetElement(bulObj.elementType, bulObj.element); } if (state == null) { state = MagicSystemManager.instance._abnstateManager.GetElement(MagickMakeManager.Instance.selectElement); } ChangeElement(state); }
/// <summary> /// 新しい状態異常の追加 /// </summary> /// <param name="state">状態異常の情報</param> public void AddAbnormalState(AbnState value) { Vector3 set = objtransform.position; //set.x += 0 + (int)value.type; //既に同じタイプの状態異常があれば、それを上書きする if (!AbnormalStateSymbol[(int)value.type, 0]) { for (int i = 0; i < SYMBOL_COUNT; i++) { AbnormalStateSymbol[(int)value.type, i] = GameObject.Instantiate(StateSymbolMaterial[(int)value.type], set, Quaternion.identity); AbnormalStateSymbol[(int)value.type, i].transform.SetParent(objtransform); Vector3 size = AbnormalStateSymbol[(int)value.type, i].transform.localScale; AbnormalStateSymbol[(int)value.type, i].transform.localScale = new Vector3(symbolSize.x * size.x, symbolSize.y * size.y, symbolSize.z * size.z); AbnormalStateSymbol[(int)value.type, i].transform.localPosition = symbolPos; } } states[(int)value.type] = new State(value); }
public void ChangeElement(AbnState state) { Destroy(bulletObj); GameObject prefab = MagicSystemManager.instance._abnstateManager.GetElementPrefab(state.type, bulletType); bulletObj = Instantiate(prefab, transform); //bulletObj.transform.localPosition = defautPosition; bulletObj.transform.localPosition = GetDefaultPos(); bulletObj.transform.localEulerAngles = Vector3.zero; InitBulletObj(); BulletObject bulObj = bulletObj.GetComponent <BulletObject> (); bulObj.element = state; abnState = bulObj.element; bulObj.parent = this; if (pairBullet) { pairBullet.ChangeElement(state); } }
public override void TakeAttack(float value, Vector3 HitPosition, AbnState ele = null) { base.TakeAttack(value, HitPosition, ele); SEManager.SetSE(MagicSystemManager.instance.SEManager.Damage); }
/// <summary> /// 属性の変更 /// </summary> /// <param name="value"></param> public void ChangeElementType(AbnState value) { element = value; }
/// <summary> /// 指定した条件の属性を取得する /// </summary> /// <returns>The element.</returns> /// <param name="ele">指定する属性</param> /// <param name="state">同じパラメータの属性</param> public AbnState GetElement(element ele, AbnState state) { return(GetStateList(ele) [GetAbnStateNum(state)]); }
public State(AbnState state) { this.state = state; elapsedTime = 0; dilayTime = 0; }
/// <summary> /// 状態異常を受ける処理 /// </summary> /// <param name="value"></param> public virtual void TakeAbnormalState(AbnState value) { abnManager.AddAbnormalState(value); }
public override void TakeAbnormalState(AbnState value) { //ボスは状態異常を無効化するので空 }
public void Save() { position = bullet.transform.localPosition; rotation = bullet.transform.localEulerAngles; state = bullet.GetAbnState(); }