override protected void CounterEndAction(AttackCounterEffecter val) { if (val.TargetEnemy != null) { val.TargetEnemy.Damage(1); } }
public void CounterAttackEntry(AttackCounterEffecter val) { //アニメーションカーブを代入 val.zAxisPos = zAxisPos; val.xyAxisPos = xyAxisPos; val.upPos = upPos; ////着弾地点を設定 SetEndPos(val); //リストに追加 CounterAttacks.Add(val); }
public void CounterAttackEntry(AttackCounterEffecter val) { //アニメーションカーブを代入 val .zAxisPos = zAxisPos; val .xyAxisPos = xyAxisPos; val .upPos = upPos; ////着弾地点を設定 SetEndPos( val ); //リストに追加 CounterAttacks .Add( val ); }
override protected void SetEndPos(AttackCounterEffecter val) { //攻撃できる前の敵を探す Enemy enemy = topEnemyManager.SpawnEnemy; if (enemy == null || enemy.IsVirtualDeath) { //敵がいない場合は奥に飛ばす val.EndTrans = NoTargetCAPoint; } else { //弱点を終点に設定 val.EndTrans = enemy.WeakPoint; //敵をターゲットに設定 val.TargetEnemy = enemy; enemy.VirtualDamage(1); } }
override protected void SetEndPos(AttackCounterEffecter val) { //攻撃できる前の敵を探す Enemy enemy = enemyLineManager.GetCanAttackFrontEnemy(); if (enemy == null) { //敵がいない場合は奥に飛ばす val.EndTrans = NoTargetCAPoint; } else { //弱点を終点に設定 val.EndTrans = enemy.WeakPoint; //敵をターゲットに設定 val.TargetEnemy = enemy; enemy.VirtualDamage(1); } }
override protected void SetEndPos( AttackCounterEffecter val ) { //攻撃できる前の敵を探す Enemy enemy = topEnemyManager .SpawnEnemy; if (enemy == null || enemy.IsVirtualDeath) { //敵がいない場合は奥に飛ばす val .EndTrans = NoTargetCAPoint; } else { //弱点を終点に設定 val .EndTrans = enemy .WeakPoint; //敵をターゲットに設定 val .TargetEnemy = enemy; enemy .VirtualDamage( 1 ); } }
override protected void SetEndPos( AttackCounterEffecter val ) { //攻撃できる前の敵を探す Enemy enemy = enemyLineManager .GetCanAttackFrontEnemy(); if(enemy == null) { //敵がいない場合は奥に飛ばす val .EndTrans = NoTargetCAPoint; } else { //弱点を終点に設定 val .EndTrans = enemy .WeakPoint; //敵をターゲットに設定 val .TargetEnemy = enemy; enemy .VirtualDamage( 1 ); } }
protected void Update() { //foreach (int index in CounterAttacks) for (int i = 0; i < CounterAttacks.Count; i++) { AttackCounterEffecter counterAttack = CounterAttacks[i] as AttackCounterEffecter; if (counterAttack == null) { CounterAttacks.RemoveAt(i); i--; continue; } if (counterAttack.IsEnd) { //終了したカウンター攻撃を精算する CounterEndAction(counterAttack); counterAttack.EnableAutoDestruct(); CounterAttacks.RemoveAt(i); i--; } } }
override protected void CounterEndAction( AttackCounterEffecter val ) { //地面が揺れる enemyStanManager .Stan(); }
void New_Update() { if (bulletResultManager.PulseResultDataCount == 0) { return; } //切った方向から呼び出すマネージャーを設定 Vector2 swordDir = sword.SwordDirection; int UseManager = -1; float MaxDot = -float.MaxValue; //基準となる軸から何度ずれているかで決定する Vector2 StandardAxis = new Vector2(-1.0f, 1.0f); StandardAxis.Normalize(); float MinDot = float.MaxValue; Vector3 StartAxis = new Vector3(swordDir.x, swordDir.y, .0f); for (int i = 0; i < bulletResultManager.PulseResultDataCount; i++) { if (bulletResultManager.GetPulseResultData(i).Miss) { return; } if (!bulletResultManager.GetPulseResultData(i).IsCanCounterEmit) { return; } //マーカーのビューポート位置を取得 Vector2 EnemyViewport = new Vector2(); Vector2 MarkerViewport = Camera.main.WorldToViewportPoint(bulletResultManager.GetPulseResultData(i).MarkerWorldPos); //一番右隣で近い軸を探す for (int j = 0; j < JudgeAxis.Length; j++) { //敵のビューポート位置を取得 if (!Managers[j].GetEnemyViewPort(ref EnemyViewport)) { continue; } Vector2 Length = EnemyViewport - MarkerViewport; Length.Normalize(); float dot = Vector2.Dot(Length, swordDir); if (dot < JudgeDot) { continue; } if (MaxDot < dot) { MaxDot = dot; UseManager = j; } } //位置と方向からカウンターアタックを作成 //初期位置がStartPosになる Vector3 StartPos = bulletResultManager.GetPulseResultData(i).WorldPos; float NearLimit = Camera.main.transform.position.z + Camera.main.nearClipPlane + 0.1f; if (NearLimit > StartPos.z) { StartPos.z = NearLimit; } //軌跡が見えなくなるのを防止 //試しに弾き返しを凍結 if (UseManager == -1) { return; } GameObject emitobj = Instantiate(CounterAttackData, StartPos, Quaternion.identity) as GameObject; AttackCounterEffecter CounterAttack = emitobj.GetComponent <AttackCounterEffecter>(); CounterAttack.StartAxis = StartAxis; CounterAttack.MaxTime = staticScript.rhythmManager.OnTempoTime; bulletResultManager.GetPulseResultData(i).IsCounterEmited = true; Managers[UseManager].CounterAttackEntry(CounterAttack); } }
void Old_Update() { if (bulletResultManager.PulseResultDataCount == 0) { return; } //切った方向から呼び出すマネージャーを設定 Vector2 swordDir = sword.SwordDirection; int UseManager = -1; float MaxDot = -float.MaxValue; //基準となる軸から何度ずれているかで決定する Vector2 StandardAxis = new Vector2(-1.0f, 1.0f); StandardAxis.Normalize(); //一番右隣で近い軸を探す for (int i = 0; i < JudgeAxis.Length; i++) { Vector2 Axis = JudgeAxis[i].normalized; if (Axis.x * swordDir.y - Axis.y * swordDir.x > 0.0f) { continue; } float dot = Vector2.Dot(Axis, swordDir); if (MaxDot < dot) { MaxDot = dot; UseManager = i; } } Vector3 StartAxis = new Vector3(swordDir.x, swordDir.y, .0f); for (int i = 0; i < bulletResultManager.PulseResultDataCount; i++) { if (bulletResultManager.GetPulseResultData(i).Miss) { return; } //位置と方向からカウンターアタックを作成 //初期位置がStartPosになる Vector3 StartPos = bulletResultManager.GetPulseResultData(i).WorldPos; float NearLimit = Camera.main.transform.position.z + Camera.main.nearClipPlane + 0.1f; if (NearLimit > StartPos.z) { StartPos.z = NearLimit; } //軌跡が見えなくなるのを防止 GameObject emitobj = Instantiate(CounterAttackData, StartPos, Quaternion.identity) as GameObject; AttackCounterEffecter CounterAttack = emitobj.GetComponent <AttackCounterEffecter>(); CounterAttack.StartAxis = StartAxis; Managers[UseManager].CounterAttackEntry(CounterAttack); } }
override protected void CounterEndAction(AttackCounterEffecter val) { //地面が揺れる enemyStanManager.Stan(); }
abstract protected void CounterEndAction(AttackCounterEffecter val);
override protected void SetEndPos( AttackCounterEffecter val ) { val .EndTrans = CAPoint; }
abstract protected void SetEndPos( AttackCounterEffecter val );
abstract protected void CounterEndAction( AttackCounterEffecter val );
abstract protected void SetEndPos(AttackCounterEffecter val);
override protected void CounterEndAction( AttackCounterEffecter val ) { if(val.TargetEnemy != null) val .TargetEnemy .Damage( 1 ); }
override protected void SetEndPos(AttackCounterEffecter val) { val.EndTrans = CAPoint; }