blob: b8e534b08a5e53413382b183f5df4760691d5fc8 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
/**
* @file regionTriggerManager.c
* @ingroup Managers
*
* @brief Set a flag if the player moves into a region.
*/
#include "manager/regionTriggerManager.h"
#include "asm.h"
#include "flags.h"
enum RegionTriggerManager_State { Init, ObserveRegion };
void RegionTriggerManager_Init(RegionTriggerManager*);
void RegionTriggerManager_ObserveRegion(RegionTriggerManager*);
void RegionTriggerManager_Main(RegionTriggerManager* this) {
static void (*const RegionTriggerManager_Actions[2])(RegionTriggerManager*) = {
RegionTriggerManager_Init,
RegionTriggerManager_ObserveRegion,
};
RegionTriggerManager_Actions[super->action](this);
}
void RegionTriggerManager_Init(RegionTriggerManager* this) {
super->action = ObserveRegion;
this->radiusX >>= 1;
this->posX += this->radiusX;
this->radiusY >>= 1;
this->posY += this->radiusY;
if (!super->type) {
if (CheckFlags(this->playerInRegionFlag)) {
DeleteManager(super);
return;
}
}
RegionTriggerManager_ObserveRegion(this);
}
void RegionTriggerManager_ObserveRegion(RegionTriggerManager* this) {
if (CheckPlayerInRegion(this->posX, this->posY, this->radiusX, this->radiusY)) {
SetFlag(this->playerInRegionFlag);
if (!super->type) {
DeleteManager(super);
return;
}
} else {
ClearFlag(this->playerInRegionFlag);
}
}
|