public void GetReady(int playerIndex, Note.Button but, InputManager.InputType type) { Player targetPlayer = Player[playerIndex]; if (playerIndex == AttackerIndex) { AttackSkill skill = targetPlayer.GetAttackSkill(but); uint combo = this.GetNextCombo(but, type, skill); // skill is not long button -> ignore long button input targetPlayer.Anim.ResetTrigger("action"); skill.PlayAnim(targetPlayer.Anim, combo, type == InputManager.InputType.UP); } else { DefendSkill skill = targetPlayer.GetDefendSkill(but); targetPlayer.Anim.ResetTrigger("action"); skill.PlayAnim(targetPlayer.Anim, 1, false); if (skill.Name == "Guard") { EffectAnim[playerIndex].Play("guardmake", -1, 0); } } }
// core battle logic private void BattleCore(Player attacker, Note.Core attackData, Player defender, Note.Core defendData, int time) { AttackSkill attackerSkill = attacker.GetAttackSkill(attackData.Button); DefendSkill defenderSkill = defender.GetDefendSkill(defendData.Button); Animator attackerEffect = EffectAnim[AttackerIndex]; Animator defenderEffect = EffectAnim[(AttackerIndex == 0) ? 1 : 0]; DefendSkill.DefendState defendResult; // if both player didn't press button, set result to NONE if (defendData.Button == Note.Button.NONE && attackData.Button == Note.Button.NONE) { defendResult = DefendSkill.DefendState.NONE; } else if (defendData.Button == Note.Button.NONE && attackData.Type == InputManager.InputType.DOWN && attackerSkill.IsLongButton) { defendResult = DefendSkill.DefendState.GUARD; } // if defender didn't press button, set result to HIT else if (defendData.Button == Note.Button.NONE) { defendResult = DefendSkill.DefendState.HIT; } // if attacker didn't press button, set result to GUARD else if (attackData.Button == Note.Button.NONE) { defendResult = DefendSkill.DefendState.GUARD; } // both players pressed button else { defendResult = defenderSkill.DoDefend(attackerSkill.Name, attackData.Judge <= defendData.Judge, attackData.Type == InputManager.InputType.UP); } switch (defendResult) { case DefendSkill.DefendState.GUARD: { // defender Guards attack, and attacker keeps attack try { if (defenderSkill.Name == "Guard") { defenderEffect.Play("guardsuccess", -1, 0); } defender.Anim.SetTrigger("action"); defender.DecreaseHp(attackerSkill.Damage[this.CurrentCombo - 1] * (1 - defenderSkill.DefendRate)); defender.IncreaseSp((int)defenderSkill.SkillPoint); } catch {} try { if (attackerSkill.IsLongButton && attackData.Type == InputManager.InputType.DOWN) { this.LongButtonTime = time; } attacker.Anim.SetTrigger("action"); attacker.DecreaseHp(defenderSkill.Damage); } catch {} break; } case DefendSkill.DefendState.CANCEL: { // defender Guards attack, and attacker's combo is reset try { defender.Anim.SetTrigger("action"); defender.DecreaseHp(attackerSkill.Damage[this.CurrentCombo - 1] * (1 - defenderSkill.DefendRate)); defender.IncreaseSp((int)defenderSkill.SkillPoint); } catch {} try { attackerEffect.Play("cancel", -1, 0); attacker.Anim.Play("hit", -1, 0); attacker.DecreaseHp(defenderSkill.Damage); } catch {} this.CurrentCombo = 0; break; } case DefendSkill.DefendState.HIT: { // attacker succeeded to hit defender try { if (attackerSkill.IsLongButton && attackData.Type == InputManager.InputType.UP) { defender.Anim.Play("hit", -1, 0); float damage = (time - this.LongButtonTime) / 25000.0f; if (damage > 100) { defenderEffect.Play("str_full", -1, 0); } else { defenderEffect.Play("str_nor", -1, 0); } damage = System.Math.Min(damage, 100); defender.DecreaseHp(damage); } else if (attackerSkill.IsLongButton && attackData.Type == InputManager.InputType.KEEP) { // do nothing } else { if (attackerSkill.Name == "Consecutive" && CurrentCombo == 1) { defenderEffect.Play("con1", -1, 0); } else if (attackerSkill.Name == "Consecutive" && CurrentCombo == 2) { defenderEffect.Play("con2", -1, 0); } else if (attackerSkill.Name == "Consecutive" && CurrentCombo == 3) { defenderEffect.Play("con3", -1, 0); } else if (attackerSkill.Name == "Normal") { defenderEffect.Play("kyunje", -1, 0); } defender.Anim.Play("hit", -1, 0); defender.DecreaseHp(attackerSkill.Damage[CurrentCombo - 1]); } } catch {} attacker.Anim.SetTrigger("action"); attacker.IncreaseSp((int)attackerSkill.SkillPoint[CurrentCombo - 1]); break; } case DefendSkill.DefendState.NONE: { // defender.Anim.Play("hit"); // attacker.Anim.Play("hit"); break; } default: break; } if (CurrentCombo == 3 && attackData.Button == Note.Button.BLUE && defendResult == DefendSkill.DefendState.HIT) { CancelFlip = true; } if (attackData.Button == Note.Button.RED && attackData.Type == InputManager.InputType.UP && defendResult == DefendSkill.DefendState.HIT && (time - this.LongButtonTime) / 25000.0f > 100) { CancelFlip = true; } }