private void LaunchRandomArmAttack() { int randomArmIndex = (int)(GD.Randi() % _bossArmControllers.Count); randomArmIndex = Mathf.Abs(randomArmIndex); while (true) { BossArmController bossArmController = _bossArmControllers[randomArmIndex]; BossArmController.ArmStatus armStatus = bossArmController.GetArmStatus(); if (armStatus.firstArmAlive && armStatus.secondArmAlive) { bossArmController.LaunchDualArmAttack(_timeBetweenEachAttack); break; } else { randomArmIndex = (int)(GD.Randi() % _bossArmControllers.Count); randomArmIndex = Mathf.Abs(randomArmIndex); } } if (_previousArmIndex != -1) { _bossArmControllers[_previousArmIndex].ClearDualArmAttack(); } _previousArmIndex = randomArmIndex; }
private void SetBossMaxHealth() { BossArmController.ArmStatus leftArmStatus = _leftArmController.GetArmStatus(); BossArmController.ArmStatus rightArmStatus = _rightArmController.GetArmStatus(); BossArmController.ArmStatus topArmStatus = _topArmController.GetArmStatus(); BossArmController.ArmStatus bottomArmStatus = _bottomArmController.GetArmStatus(); BossBodyController.BodyStatus bodyStatus = _bodyController.GetBodyStatus(); float totalMaxHealth = leftArmStatus.firstArmMaxHealth + leftArmStatus.secondArmMaxHealth; totalMaxHealth += (rightArmStatus.firstArmMaxHealth + rightArmStatus.secondArmMaxHealth); totalMaxHealth += (topArmStatus.firstArmMaxHealth + topArmStatus.secondArmMaxHealth); totalMaxHealth += (bottomArmStatus.firstArmMaxHealth + bottomArmStatus.secondArmMaxHealth); totalMaxHealth += bodyStatus.bodyMaxHealth; GD.Print($"Max Boss Health: {totalMaxHealth}"); _bossTotalHealthSetter.SetMaxHealth(totalMaxHealth); }
private void ComputeTotalBossHealth() { BossArmController.ArmStatus leftArmStatus = _leftArmController.GetArmStatus(); BossArmController.ArmStatus rightArmStatus = _rightArmController.GetArmStatus(); BossArmController.ArmStatus topArmStatus = _topArmController.GetArmStatus(); BossArmController.ArmStatus bottomArmStatus = _bottomArmController.GetArmStatus(); BossBodyController.BodyStatus bodyStatus = _bodyController.GetBodyStatus(); float totalHealth = leftArmStatus.firstArmHealth + leftArmStatus.secondArmHealth; totalHealth += (rightArmStatus.firstArmHealth + rightArmStatus.secondArmHealth); totalHealth += (topArmStatus.firstArmHealth + topArmStatus.secondArmHealth); totalHealth += (bottomArmStatus.firstArmHealth + bottomArmStatus.secondArmHealth); totalHealth += bodyStatus.bodyHealth; GD.Print($"Total Boss Health: {totalHealth}"); _bossTotalHealthSetter.ForceSetCurrentHealth(totalHealth); }
private void ComputeArmExistenceStatus() { BossArmController.ArmStatus leftArmStatus = _leftArmController.GetArmStatus(); BossArmController.ArmStatus rightArmStatus = _rightArmController.GetArmStatus(); BossArmController.ArmStatus topArmStatus = _topArmController.GetArmStatus(); BossArmController.ArmStatus bottomArmStatus = _bottomArmController.GetArmStatus(); bool hasDoubleArm = (leftArmStatus.firstArmAlive && leftArmStatus.secondArmAlive) || (rightArmStatus.firstArmAlive && rightArmStatus.secondArmAlive) || (topArmStatus.firstArmAlive && topArmStatus.secondArmAlive) || (bottomArmStatus.firstArmAlive && bottomArmStatus.secondArmAlive); bool hasSingleArm = hasDoubleArm || (leftArmStatus.firstArmAlive || leftArmStatus.secondArmAlive) || (rightArmStatus.firstArmAlive || rightArmStatus.secondArmAlive) || (topArmStatus.firstArmAlive || topArmStatus.secondArmAlive) || (bottomArmStatus.firstArmAlive || bottomArmStatus.secondArmAlive); SetBossHealthBodyStatus(hasDoubleArm, hasSingleArm); }
private void HandleArmStatusChanged(BossArmController.ArmStatus armStatus) { ComputeTotalBossHealth(); ComputeArmExistenceStatus(); }