Skip to content

Commit

Permalink
Handle events in stats manager. Add more events.
Browse files Browse the repository at this point in the history
  • Loading branch information
Neloreck committed Jul 20, 2023
1 parent e32a8fa commit bca35d1
Show file tree
Hide file tree
Showing 22 changed files with 262 additions and 176 deletions.
4 changes: 2 additions & 2 deletions src/engine/core/managers/base/SaveManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ export class SaveManager extends AbstractCoreManager {
public onBeforeGameSave(saveName: TName): void {
logger.info("Before game save:", saveName);

EventsManager.getInstance().emitEvent(EGameEvent.GAME_SAVE, this.dynamicData.generic);
EventsManager.emitEvent(EGameEvent.GAME_SAVE, this.dynamicData.generic);

saveDynamicGameSave(saveName, this.dynamicData);
}
Expand All @@ -119,7 +119,7 @@ export class SaveManager extends AbstractCoreManager {

this.dynamicData = data ? data : this.dynamicData;

EventsManager.getInstance().emitEvent(EGameEvent.GAME_LOAD, this.dynamicData.generic);
EventsManager.emitEvent(EGameEvent.GAME_LOAD, this.dynamicData.generic);
}

/**
Expand Down
2 changes: 1 addition & 1 deletion src/engine/core/managers/events/EventsManager.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ describe("EventsManager class", () => {
it("should correctly initialize", () => {
const manager: EventsManager = getManagerInstance(EventsManager);

expect(MockLuaTable.getMockSize(manager.callbacks)).toBe(31);
expect(MockLuaTable.getMockSize(manager.callbacks)).toBe(33);

Object.keys(manager.callbacks).forEach((it) => {
expect(MockLuaTable.getMockSize(manager.callbacks[it as unknown as EGameEvent])).toBe(0);
Expand Down
50 changes: 31 additions & 19 deletions src/engine/core/managers/events/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,10 +64,22 @@ export enum EGameEvent {
* Surge skipped (happened during sleep or more important events).
*/
SURGE_SKIPPED,
/**
* Surge survived with usage of anabiotic.
*/
SURGE_SURVIVED_WITH_ANABIOTIC,
/**
* Task state updated.
*/
TASK_STATE_UPDATE,
/**
* Task completed.
*/
TASK_COMPLETED,
/**
* Actor found treasure.
*/
TREASURE_FOUND,
/**
* Generic notification event.
*/
Expand All @@ -79,27 +91,35 @@ export enum EGameEvent {
/**
* On interaction with NPC, when player 'uses' game object.
*/
NPC_INTERACTION,
STALKER_INTERACTION,
/**
* todo;
* On stalker hit.
*/
MONSTER_HIT,
STALKER_HIT,
/**
* todo;
* On stalker killed.
* Client side death event.
*/
NPC_HIT,
STALKER_KILLED,
/**
* todo;
* Stalker death.
* Server side death event.
*/
ENEMY_SEE_ACTOR,
STALKER_DEATH,
/**
* todo;
* On monster hit.
*/
ACTOR_SEE_ENEMY,
MONSTER_HIT,
/**
* todo;
* On monster killed.
* Client side death event.
*/
NPC_SHOT_ACTOR,
MONSTER_KILLED,
/**
* Monster death.
* Server side death event.
*/
MONSTER_DEATH,
/**
* Main menu turned on.
*/
Expand All @@ -108,14 +128,6 @@ export enum EGameEvent {
* Main menu turned off.
*/
MAIN_MENU_OFF,
/**
* Monster death.
*/
MONSTER_DEATH,
/**
* Stalker death.
*/
STALKER_DEATH,
/**
* Game started.
*/
Expand Down
4 changes: 2 additions & 2 deletions src/engine/core/managers/interaction/SleepManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ export class SleepManager extends AbstractCoreManager {

registry.actor.power = 1;

EventsManager.getInstance().emitEvent(EGameEvent.ACTOR_START_SLEEP);
EventsManager.emitEvent(EGameEvent.ACTOR_START_SLEEP);
}

/**
Expand All @@ -112,6 +112,6 @@ export class SleepManager extends AbstractCoreManager {
disableInfo(infoPortions.actor_is_sleeping);
disableInfo(infoPortions.sleep_active);

EventsManager.getInstance().emitEvent(EGameEvent.ACTOR_FINISH_SLEEP);
EventsManager.emitEvent(EGameEvent.ACTOR_FINISH_SLEEP);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -552,11 +552,11 @@ describe("AchievementManager class", () => {
disableInfo(infoPortions.actor_marked_by_zone_3_times);
expect(achievementsManager.checkAchievedMarkedByZone()).toBeFalsy();

statisticsManager.onAnabioticUsed();
statisticsManager.onAnabioticUsed();
statisticsManager.onSurvivedSurgeWithAnabiotic();
statisticsManager.onSurvivedSurgeWithAnabiotic();
expect(achievementsManager.checkAchievedMarkedByZone()).toBeFalsy();

statisticsManager.onAnabioticUsed();
statisticsManager.onSurvivedSurgeWithAnabiotic();
expect(achievementsManager.checkAchievedMarkedByZone()).toBeTruthy();
expect(onNotification).toHaveBeenCalledTimes(1);
expect(hasAlifeInfo(infoPortions.actor_marked_by_zone_3_times)).toBeTruthy();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,7 @@ export class AchievementsManager extends AbstractCoreManager {
) {
giveInfo(infoPortions.pioneer_achievement_gained);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_pioneer,
senderId: achievementIcons[EAchievement.PIONEER],
Expand All @@ -143,7 +143,7 @@ export class AchievementsManager extends AbstractCoreManager {
) {
giveInfo(infoPortions.mutant_hunter_achievement_gained);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_mutant_hunter,
senderId: achievementIcons[EAchievement.MUTANT_HUNTER],
Expand All @@ -162,7 +162,7 @@ export class AchievementsManager extends AbstractCoreManager {
if (hasAlifeInfo(infoPortions.zat_b22_barmen_gave_reward)) {
giveInfo(infoPortions.detective_achievement_gained);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_detective,
senderId: achievementIcons[EAchievement.DETECTIVE],
Expand All @@ -181,7 +181,7 @@ export class AchievementsManager extends AbstractCoreManager {
if (hasAlifeInfos([infoPortions.zat_b30_sultan_loose, infoPortions.zat_b7_actor_help_stalkers])) {
giveInfo(infoPortions.one_of_the_lads_gained);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_one_of_the_lads,
senderId: achievementIcons[EAchievement.ONE_OF_THE_LADS],
Expand All @@ -200,7 +200,7 @@ export class AchievementsManager extends AbstractCoreManager {
if (hasAlifeInfos([infoPortions.zat_b30_barmen_under_sultan, infoPortions.zat_b7_actor_help_bandits])) {
giveInfo(infoPortions.kingpin_gained);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_kingpin,
senderId: achievementIcons[EAchievement.KINGPIN],
Expand All @@ -225,7 +225,7 @@ export class AchievementsManager extends AbstractCoreManager {
) {
giveInfo(infoPortions.herald_of_justice_achievement_gained);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_herald_of_justice,
senderId: achievementIcons[EAchievement.HERALD_OF_JUSTICE],
Expand Down Expand Up @@ -257,7 +257,7 @@ export class AchievementsManager extends AbstractCoreManager {
giveInfo(infoPortions.sim_bandit_attack_harder);
increaseCommunityGoodwillToId(communities.stalker, registry.actor.id(), 200);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_seeker,
senderId: achievementIcons[EAchievement.SEEKER],
Expand All @@ -274,7 +274,7 @@ export class AchievementsManager extends AbstractCoreManager {
if (hasAlifeInfo(infoPortions.zat_b3_all_instruments_brought)) {
giveInfo(infoPortions.battle_systems_master_achievement_gained);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_battle_systems_master,
senderId: achievementIcons[EAchievement.BATTLE_SYSTEMS_MASTER],
Expand All @@ -299,7 +299,7 @@ export class AchievementsManager extends AbstractCoreManager {
) {
giveInfo(infoPortions.high_tech_master_achievement_gained);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_high_tech_master,
senderId: achievementIcons[EAchievement.HIGH_TECH_MASTER],
Expand All @@ -318,7 +318,7 @@ export class AchievementsManager extends AbstractCoreManager {
if (hasAlifeInfo(infoPortions.actor_was_in_many_bad_places)) {
giveInfo(infoPortions.skilled_stalker_achievement_gained);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_skilled_stalker,
senderId: achievementIcons[EAchievement.SKILLED_STALKER],
Expand All @@ -343,7 +343,7 @@ export class AchievementsManager extends AbstractCoreManager {
) {
giveInfo(infoPortions.leader_achievement_gained);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_leader,
senderId: achievementIcons[EAchievement.LEADER],
Expand Down Expand Up @@ -378,7 +378,7 @@ export class AchievementsManager extends AbstractCoreManager {
increaseCommunityGoodwillToId(communities.dolg, actorId, 200);
increaseCommunityGoodwillToId(communities.bandit, actorId, 200);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_diplomat,
senderId: achievementIcons[EAchievement.DIPLOMAT],
Expand Down Expand Up @@ -411,7 +411,7 @@ export class AchievementsManager extends AbstractCoreManager {
) {
giveInfo(infoPortions.research_man_gained);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_research_man,
senderId: achievementIcons[EAchievement.RESEARCH_MAN],
Expand All @@ -437,7 +437,7 @@ export class AchievementsManager extends AbstractCoreManager {
) {
giveInfo(infoPortions.sim_duty_help_harder);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_friend_of_duty,
senderId: achievementIcons[EAchievement.FRIEND_OF_DUTY],
Expand All @@ -463,7 +463,7 @@ export class AchievementsManager extends AbstractCoreManager {
) {
giveInfo(infoPortions.sim_freedom_help_harder);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_friend_of_freedom,
senderId: achievementIcons[EAchievement.FRIEND_OF_FREEDOM],
Expand All @@ -488,7 +488,7 @@ export class AchievementsManager extends AbstractCoreManager {
) {
giveInfo(infoPortions.balance_advocate_gained);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_balance_advocate,
senderId: achievementIcons[EAchievement.BALANCE_ADVOCATE],
Expand All @@ -506,7 +506,7 @@ export class AchievementsManager extends AbstractCoreManager {
if (!hasAlifeInfo(infoPortions.actor_wealthy) && registry.actor.money() >= 100_000) {
giveInfo(infoPortions.actor_wealthy);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_wealthy,
senderId: achievementIcons[EAchievement.WEALTHY],
Expand All @@ -524,7 +524,7 @@ export class AchievementsManager extends AbstractCoreManager {
if (hasAlifeInfo(infoPortions.pri_b305_all_strelok_notes_given)) {
giveInfo(infoPortions.keeper_of_secrets_achievement_gained);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_keeper_of_secrets,
senderId: achievementIcons[EAchievement.KEEPER_OF_SECRETS],
Expand All @@ -546,7 +546,7 @@ export class AchievementsManager extends AbstractCoreManager {
if (StatisticsManager.getInstance().getUsedAnabioticsCount() >= 3) {
giveInfo(infoPortions.actor_marked_by_zone_3_times);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_marked_by_zone,
senderId: achievementIcons[EAchievement.MARKED_BY_ZONE],
Expand Down Expand Up @@ -588,7 +588,7 @@ export class AchievementsManager extends AbstractCoreManager {
) {
giveInfo(infoPortions.actor_information_dealer);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_information_dealer,
senderId: achievementIcons[EAchievement.INFORMATION_DEALER],
Expand Down Expand Up @@ -616,7 +616,7 @@ export class AchievementsManager extends AbstractCoreManager {
giveInfo(infoPortions.sim_stalker_help_harder);
increaseCommunityGoodwillToId(communities.stalker, registry.actor.id(), 100);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_ach_friend_of_stalkers,
senderId: achievementIcons[EAchievement.FRIEND_OF_STALKERS],
Expand Down Expand Up @@ -655,7 +655,7 @@ export class AchievementsManager extends AbstractCoreManager {
4
);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_detective_news,
senderId: notificationManagerIcons.got_medicine,
Expand Down Expand Up @@ -685,7 +685,7 @@ export class AchievementsManager extends AbstractCoreManager {
5
);

EventsManager.getInstance().emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
EventsManager.emitEvent<ITipNotification>(EGameEvent.NOTIFICATION, {
type: ENotificationType.TIP,
caption: captions.st_mutant_hunter_news,
senderId: notificationManagerIcons.got_ammo,
Expand Down
4 changes: 2 additions & 2 deletions src/engine/core/managers/interaction/dialog/DialogManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ export class DialogManager extends AbstractCoreManager {

const eventsManager: EventsManager = EventsManager.getInstance();

eventsManager.registerCallback(EGameEvent.NPC_INTERACTION, this.onInteractWithObject, this);
eventsManager.registerCallback(EGameEvent.STALKER_INTERACTION, this.onInteractWithObject, this);

for (const it of $range(0, DIALOG_MANAGER_LTX.line_count("list") - 1)) {
const [, id] = DIALOG_MANAGER_LTX.r_line("list", it, "", "");
Expand Down Expand Up @@ -139,7 +139,7 @@ export class DialogManager extends AbstractCoreManager {

const eventsManager: EventsManager = EventsManager.getInstance();

eventsManager.unregisterCallback(EGameEvent.NPC_INTERACTION, this.onInteractWithObject);
eventsManager.unregisterCallback(EGameEvent.STALKER_INTERACTION, this.onInteractWithObject);

const actorTable: LuaArray<EGenericDialogCategory> = $fromArray<EGenericDialogCategory>([
EGenericDialogCategory.JOB,
Expand Down
3 changes: 1 addition & 2 deletions src/engine/core/managers/interaction/tasks/TaskManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import { EGameEvent, EventsManager } from "@/engine/core/managers/events";
import { TaskObject } from "@/engine/core/managers/interaction/tasks/TaskObject";
import { ETaskState } from "@/engine/core/managers/interaction/tasks/types";
import { NotificationManager } from "@/engine/core/managers/interface/notifications";
import { StatisticsManager } from "@/engine/core/managers/interface/statistics/StatisticsManager";
import { assert } from "@/engine/core/utils/assertion";
import { LuaLogger } from "@/engine/core/utils/logging";
import { getTableSize } from "@/engine/core/utils/table";
Expand Down Expand Up @@ -63,7 +62,7 @@ export class TaskManager extends AbstractCoreManager {
} else {
if (task.checkTaskState() === ETaskState.COMPLETED) {
task.giveTaskReward();
StatisticsManager.getInstance().onTaskCompleted(task);
EventsManager.emitEvent(EGameEvent.TASK_COMPLETED, task);

return true;
} else {
Expand Down
2 changes: 1 addition & 1 deletion src/engine/core/managers/interface/PdaManager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ export class PdaManager extends AbstractCoreManager {
case EStatSection.SURGES:
return tostring(statisticsManager.actorStatistics.surgesCount);
case EStatSection.COMPLETED_QUESTS:
return tostring(statisticsManager.actorStatistics.completedQuestsCount);
return tostring(statisticsManager.actorStatistics.completedTasksCount);
case EStatSection.KILLED_MONSTERS:
return tostring(statisticsManager.actorStatistics.killedMonstersCount);
case EStatSection.KILLED_STALKERS:
Expand Down
Loading

0 comments on commit bca35d1

Please sign in to comment.