Автоматическая настройка против ручного уменьшения (как это сделать?) - PullRequest
2 голосов
/ 12 июля 2019

Поначалу это может быть немного сложно понять, но, пожалуйста, потерпите меня. Я делаю городскую игру-симулятор, и я хочу добиться этого:

1. Посмотрите на состояние здоровья города
2. Если он находится в пределах диапазона, установите оставшиеся дни (то есть продолжительность жизни города)
3. Каждый прошедший день количество оставшихся дней будет уменьшаться.

Рекомендации:
HealthStat | дни по умолчанию
-10 10
-25 8
-35 5
-40 2


Мне удалось несколько решить эту проблему, но возникла проблема. Я могу сделать либо только автоматическую настройку daysRemaining, либо ручное уменьшение - я не могу сделать и то и другое.

Вот мой код:

if (statsHealth <= -10f && statsHealth > -25f)
            {
                //Enable Health Hazard
                isHealthHazard = true;

                //Set Days Remaining
                daysRemaining = 10;
            }
            else if (statsHealth <= -25f && statsHealth > -35f)
            {
                //Enable Health Hazard
                isHealthHazard = true;

                //Set Days Remaining
                if (daysRemaining > 8 || daysRemaining <= 5)
                {
                    daysRemaining = 8;
                }
            }
            else if (statsHealth <= -35f && statsHealth > -40f)
            {
                //Enable Health Hazard
                isHealthHazard = true;

                //Set Days Remaining
                if (daysRemaining > 5 || daysRemaining <= 2)
                {
                    daysRemaining = 5;
                }
            }
            else if (statsHealth <= -40f && statsHealth > -50f)
            {
                //Enable Health Hazard
                isHealthHazard = true;

                //Set Days Remaining
                if (daysRemaining > 2 || daysRemaining < 0)
                {
                    daysRemaining = 2;
                }
            }
            else if(statsHealth >= -50f && hasIssues)
            {
                //GAME OVER
                Debug.Log("GAME OVER!");
                daysRemaining = 0;
            }
            else if(statsHealth >= 0)
            {
                //No More Health Issues
                isHealthHazard = false;
 }



Проблема в том, что, когда в моей игре проходит день, если он находится в пределах диапазона healthStat (например, диапазон HealthStat -25 составляет от 8 до 6 дней до конца), он будет уменьшаться. Однако если бы daysRemaining достигло 5, оно вернулось бы к 8, поскольку оно выходит за пределы допустимого диапазона (на основе healthStat).

С другой стороны, если я отключу автонастройку daysRemaining на основе диапазона healthStat, это сработает для уменьшения вручную. Но как я могу установить daysRemaining во-первых, когда игрок достигает определенного показателя здоровья?

Как я могу сделать как автоматическую настройку daysRemaining, так и в то же время можно вручную настроить ее?

PS: я знаю, что это может немного сбить с толку, поэтому, если у вас есть какие-либо дополнительные вопросы, пожалуйста, не стесняйтесь комментировать, и я обязательно отвечу. Спасибо!

1 Ответ

1 голос
/ 12 июля 2019

Вам нужен способ различения, определяющий, когда вы входите или выходите из категории здоровья или уже входили в эту категорию.Добавьте переменную, которая отслеживает количество дней по умолчанию в последней категории, в которой вы были, и изменяйте только оставшиеся дни в соответствии с разницей между оставшимися предыдущими и новыми днями по умолчанию.

Такжелогическое значение для отслеживания того, находились ли вы ранее вне какой-либо категории.Таким образом, если вы ранее не входили ни в одну категорию, вы можете просто установить оставшиеся дни на оставшиеся дни по умолчанию.

Вот как могут выглядеть эти изменения:

private int previousDefaultDaysRemaining;
private bool previousOutsideHealthCategory;

void Start()
{
    previousDefaultDaysRemaining = 1000;
    previousOutsideHealthCategory = true;
} 

И затем....

// initialize to some value reasonable for not being health category.
int newDefaultDaysRemaining = 1000;
bool newOutsideHealthCategory = true;

// Determine what category of health you are in now
if (statsHealth <= -10f && statsHealth > -25f)
{
    //Enable Health Hazard
    isHealthHazard = true;
    newOutsideHealthCategory = false;

    newDefaultDaysRemaining = 10;
}
else if (statsHealth <= -25f && statsHealth > -35f)
{
    //Enable Health Hazard
    isHealthHazard = true;
    newOutsideHealthCategory = false;

    newDefaultDaysRemaining = 8;
}
else if (statsHealth <= -35f && statsHealth > -40f)
{
    //Enable Health Hazard
    isHealthHazard = true;
    newOutsideHealthCategory = false;

    //Set Days Remaining
    newDefaultDaysRemaining = 5;

}
else if (statsHealth <= -40f && statsHealth > -50f)
{
    //Enable Health Hazard
    isHealthHazard = true;
    newOutsideHealthCategory = false;

    newDefaultDaysRemaining = 2;
}

// Decrease timer 
daysRemaining -= 1;

if (previousOutsideHealthCategory) 
{
    // We were not in a category previously, just set the days remaining
    daysRemaining = newDefaultDaysRemaining;
} 
else 
{
    // reduce or increase daysRemaining by any category change
    daysRemaining += newDefaultDaysRemaining - previousDefaultDaysRemaining;
}

// remember the new category's days remaining and 
// our outsideHealthCategory status if either changed
previousDefaultDaysRemaining = newDefaultDaysRemaining;
previousOutsideHealthCategory = newOutsideHealthCategory;

// check for critical health status boundaries
if(statsHealth > -10 && hasIssues)
{
    //GAME OVER
    Debug.Log("GAME OVER!");
    daysRemaining = 0;
}
else if(statsHealth >= 0)
{
    //No More Health Issues
    isHealthHazard = false;
}            
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...