Exemplo n.º 1
0
        //Method responsible for determining if a new status should be added to the bodypart
        //TODO: currently, it only gets worse. Should implement logic to heal damages and remove a status from a bodypart
        public void EvaluateStatusChange(BodyPartStatuses status, float totalDamage, float serverAuthoritativeRandomRoll)
        {
            if (bodyPartStatuses.HasFlag(status))
            {
                return;
            }

            float requiredThreshold = DamageThresholds.OrganicMinimumRequiredDamage[status];

            if (requiredThreshold > totalDamage)
            {
                return;
            }

            float applyEffectRoll = serverAuthoritativeRandomRoll + totalDamage - requiredThreshold;

            Debug.Log($"{status} roll {applyEffectRoll}");
            if (applyEffectRoll < requiredThreshold)
            {
                return;
            }

            if (status == BodyPartStatuses.Severed && bodyPartType == BodyPartType.Chest)
            {
                return;
            }

            bodyPartStatuses |= status;
            PerformStatusAssociatedAction(status);
        }
Exemplo n.º 2
0
        private void PerformStatusAssociatedAction(BodyPartStatuses status)
        {
            switch (status)
            {
            case BodyPartStatuses.Numb:
            case BodyPartStatuses.Burned:
            case BodyPartStatuses.Bruised:
            case BodyPartStatuses.Crippled:
            case BodyPartStatuses.Bleeding:
            case BodyPartStatuses.Blistered:
                return;

            case BodyPartStatuses.Severed:
                body.SeverBodyPart(this);
                break;

            default:
                Debug.LogError($"BodyPart does not have damage handling for status {status}!");
                break;
            }
        }