Я планую пригодницьку гру, і не можу зрозуміти, який правильний спосіб реалізувати поведінку рівня в залежності від стану прогресії історії.
У моїй одиночній грі є величезний світ, де гравцеві доводиться спілкуватися з людьми в місті в різних точках гри. Однак, залежно від прогресії історії, гравцеві будуть представлені різні речі, наприклад, наприклад, керівник гільдії змінить місця розташування з міської площі на різні місця по місту; Двері розблокуються лише в певний час доби після закінчення певної рутини; Різні події екрана / тригера трапляються лише після досягнення певного етапу.
Я наївно думав використати оператор switch {} спочатку, щоб вирішити, що NPC повинен сказати або на що він може бути знайдений, і зробити цілі квесту взаємодіючими лише після перевірки стану глобальної змінної game_state. Але я зрозумів, що швидко натрапляю на безліч різних ігрових станів і випадків переключення, щоб змінити поведінку об'єкта. Цю операцію перемикання також важко буде налагодити, і я думаю, це також може бути важко використовувати в редакторі рівнів.
Тому я подумав, що замість того, щоб мати один об'єкт з декількома станами, можливо, у мене повинно бути кілька екземплярів одного і того ж об'єкта, з одним станом. Таким чином, якщо я використовую щось на зразок редактора рівня, я можу поставити екземпляр NPC у всіх місцях, де він коли-небудь може з’являтися, а також екземпляр для кожного стану розмови, який він має. Але це означає, що буде багато неактивних, невидимих ігрових об’єктів, що плавають навколо рівня, що може спричинити проблеми з пам'яттю або просто важко побачити в редакторі рівнів, я не знаю.
Або просто зробити однаковий, але окремий рівень для кожного ігрового стану. Це відчуває найчистіший і без помилок спосіб робити речі, але відчувається як масивна ручна робота, переконавшись, що кожна версія рівня справді однакова між собою.
Усі мої методи відчувають себе настільки неефективно, тому, щоб скласти своє запитання, чи є кращий або стандартизований спосіб реалізувати поведінку рівня залежно від стану розвитку історії?
PS: У мене ще немає редактора рівнів - я думаю про те, щоб використовувати щось на зразок JME SDK або зробити свій власний.