Skip to content

Commit 46db345

Browse files
committed
TILE_EVENT_MANAGE: allow IO events manipulation. SET_VALUE: new dismiss_checks prop
1 parent 73cb88c commit 46db345

File tree

4 files changed

+76
-36
lines changed

4 files changed

+76
-36
lines changed

base/game_events/GameEventManager.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,8 @@ export class GameEventManager {
378378
info.check_layers_visibility,
379379
info.npc_label,
380380
info.npc_index,
381-
info.increment
381+
info.increment,
382+
info.dismiss_checks
382383
);
383384
case event_types.MOVE:
384385
return new MoveEvent(
@@ -575,6 +576,7 @@ export class GameEventManager {
575576
info.key_name,
576577
info.keep_reveal,
577578
info.tile_event_key,
579+
info.io_label,
578580
info.activate_at,
579581
info.pos,
580582
info.collision_layers

base/game_events/SetValueEvent.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export class SetValueEvent extends GameEvent {
1212
private npc_label: string;
1313
private npc_index: number;
1414
private increment: boolean;
15+
private dismiss_checks: boolean;
1516

1617
constructor(
1718
game,
@@ -25,7 +26,8 @@ export class SetValueEvent extends GameEvent {
2526
check_layers_visibility,
2627
npc_label,
2728
npc_index,
28-
increment
29+
increment,
30+
dismiss_checks
2931
) {
3032
super(game, data, event_types.SET_VALUE, active, key_name, keep_reveal);
3133
this.event_value = event_value;
@@ -35,6 +37,7 @@ export class SetValueEvent extends GameEvent {
3537
this.npc_label = npc_label;
3638
this.npc_index = npc_index;
3739
this.increment = increment ?? false;
40+
this.dismiss_checks = dismiss_checks ?? false;
3841
}
3942

4043
_fire() {
@@ -58,7 +61,7 @@ export class SetValueEvent extends GameEvent {
5861
break;
5962
}
6063
const char = this.data.info.main_char_list[detailed_value.key_name];
61-
if (_.hasIn(char, detailed_value.property)) {
64+
if (_.hasIn(char, detailed_value.property) || this.dismiss_checks) {
6265
if (this.increment) {
6366
value_to_be_set += _.get(char, detailed_value.property);
6467
}
@@ -68,7 +71,7 @@ export class SetValueEvent extends GameEvent {
6871
}
6972
break;
7073
case game_info_types.HERO:
71-
if (_.hasIn(this.data.hero, detailed_value.property)) {
74+
if (_.hasIn(this.data.hero, detailed_value.property) || this.dismiss_checks) {
7275
if (this.increment) {
7376
value_to_be_set += _.get(this.data.hero, detailed_value.property);
7477
}
@@ -83,7 +86,7 @@ export class SetValueEvent extends GameEvent {
8386
npc_label: detailed_value.label,
8487
npc_index: detailed_value.index,
8588
});
86-
if (npc && _.hasIn(npc, detailed_value.property)) {
89+
if (npc && (_.hasIn(npc, detailed_value.property) || this.dismiss_checks)) {
8790
if (this.increment) {
8891
value_to_be_set += _.get(npc, detailed_value.property);
8992
}
@@ -108,7 +111,7 @@ export class SetValueEvent extends GameEvent {
108111
}
109112
break;
110113
}
111-
if (_.hasIn(interactable_object, detailed_value.property)) {
114+
if (_.hasIn(interactable_object, detailed_value.property) || this.dismiss_checks) {
112115
if (this.increment) {
113116
value_to_be_set += _.get(interactable_object, detailed_value.property);
114117
}
@@ -135,7 +138,7 @@ export class SetValueEvent extends GameEvent {
135138
}
136139
break;
137140
}
138-
if (_.hasIn(event, detailed_value.property)) {
141+
if (_.hasIn(event, detailed_value.property) || this.dismiss_checks) {
139142
if (this.increment) {
140143
value_to_be_set += _.get(event, detailed_value.property);
141144
}

base/game_events/TileEventManageEvent.ts

Lines changed: 62 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,26 @@ import {GameEvent, event_types} from "./GameEvent";
44

55
export class TileEventManageEvent extends GameEvent {
66
private tile_event_key: string;
7+
private io_label: string;
78
private activate_at: {[direction: string]: boolean};
89
private pos: {x: number; y: number};
910
private collision_layers: number[];
1011

11-
constructor(game, data, active, key_name, keep_reveal, tile_event_key, activate_at, pos, collision_layers) {
12+
constructor(
13+
game,
14+
data,
15+
active,
16+
key_name,
17+
keep_reveal,
18+
tile_event_key,
19+
io_label,
20+
activate_at,
21+
pos,
22+
collision_layers
23+
) {
1224
super(game, data, event_types.TILE_EVENT_MANAGE, active, key_name, keep_reveal);
1325
this.tile_event_key = tile_event_key;
26+
this.io_label = io_label;
1427
this.activate_at = activate_at;
1528
this.pos = pos;
1629
if (collision_layers !== undefined) {
@@ -19,36 +32,61 @@ export class TileEventManageEvent extends GameEvent {
1932
}
2033

2134
_fire() {
22-
if (!this.tile_event_key) return;
23-
const event = TileEvent.get_labeled_event(this.tile_event_key);
24-
if (!event) return;
25-
26-
if (this.activate_at) {
27-
if (this.activate_at.hasOwnProperty("all")) {
28-
if (this.activate_at.all) {
29-
event.activate();
30-
} else {
31-
event.deactivate();
32-
}
35+
let events = [];
36+
if (this.tile_event_key) {
37+
const event = TileEvent.get_labeled_event(this.tile_event_key);
38+
if (event) {
39+
events.push(event);
3340
} else {
34-
for (let direction in this.activate_at) {
35-
const dir = directions[direction];
36-
const active = this.activate_at[direction] as boolean;
37-
if (active) {
38-
event.activate_at(dir);
41+
this.data.logger.log_message(
42+
`Game Event [${this.type}]: Event with ley "${this.tile_event_key}" doesn't exist.`
43+
);
44+
return;
45+
}
46+
} else if (this.io_label) {
47+
const interactable_object = this.data.map.interactable_objects_label_map[this.io_label];
48+
if (!(this.io_label in this.data.map.interactable_objects_label_map)) {
49+
this.data.logger.log_message(
50+
`Game Event [${this.type}]: IO with label "${this.io_label}" doesn't exist.`
51+
);
52+
return;
53+
}
54+
events = interactable_object.get_events();
55+
} else {
56+
return;
57+
}
58+
59+
for (let event of events) {
60+
if (!event) {
61+
continue;
62+
}
63+
if (this.activate_at) {
64+
if (this.activate_at.hasOwnProperty("all")) {
65+
if (this.activate_at.all) {
66+
event.activate();
3967
} else {
40-
event.deactivate_at(dir);
68+
event.deactivate();
69+
}
70+
} else {
71+
for (let direction in this.activate_at) {
72+
const dir = directions[direction];
73+
const active = this.activate_at[direction] as boolean;
74+
if (active) {
75+
event.activate_at(dir);
76+
} else {
77+
event.deactivate_at(dir);
78+
}
4179
}
4280
}
4381
}
44-
}
4582

46-
if (this.collision_layers) {
47-
event.set_activation_collision_layers(...this.collision_layers);
48-
}
83+
if (this.collision_layers) {
84+
event.set_activation_collision_layers(...this.collision_layers);
85+
}
4986

50-
if (this.pos) {
51-
event.set_position(this.pos.x, this.pos.y, true);
87+
if (this.pos) {
88+
event.set_position(this.pos.x, this.pos.y, true);
89+
}
5290
}
5391
}
5492

base/interactable_objects/InteractableObjects.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ export class InteractableObjects {
9393
private _flame_filter: Phaser.Filter.Flame;
9494
private _enable: boolean;
9595
private _entangled_by_bush: boolean;
96-
private _sprite: Phaser.Sprite;
96+
public sprite: Phaser.Sprite;
9797
private _psynergy_casted: {[field_psynergy_key: string]: boolean};
9898
private _blocking_stair_block: Phaser.Physics.P2.Body;
9999
private _active: boolean;
@@ -354,9 +354,6 @@ export class InteractableObjects {
354354
get base_collision_layer() {
355355
return this._base_collision_layer;
356356
}
357-
get sprite() {
358-
return this._sprite;
359-
}
360357
get sprite_info() {
361358
return this._sprite_info;
362359
}
@@ -701,7 +698,7 @@ export class InteractableObjects {
701698
const interactable_object_db = this.data.dbs.interactable_objects_db[this.key_name];
702699
const interactable_object_key = this.sprite_info.getSpriteKey(this.current_action);
703700
const interactable_object_sprite = this.data.middlelayer_group.create(0, 0, interactable_object_key);
704-
this._sprite = interactable_object_sprite;
701+
this.sprite = interactable_object_sprite;
705702
this.sprite.is_interactable_object = true;
706703
this.sprite.roundPx = true;
707704
this.sprite.base_collision_layer = this.base_collision_layer;

0 commit comments

Comments
 (0)