예제 #1
0
        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;
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }
예제 #5
0
 private void HandleArmStatusChanged(BossArmController.ArmStatus armStatus)
 {
     ComputeTotalBossHealth();
     ComputeArmExistenceStatus();
 }