fallout2-ce/src/queue.h

103 lines
2.7 KiB
C
Raw Normal View History

2022-05-19 01:51:26 -07:00
#ifndef QUEUE_H
#define QUEUE_H
#include "db.h"
#include "obj_types.h"
#include <stdbool.h>
typedef enum EventType {
EVENT_TYPE_DRUG = 0,
EVENT_TYPE_KNOCKOUT = 1,
EVENT_TYPE_WITHDRAWAL = 2,
EVENT_TYPE_SCRIPT = 3,
EVENT_TYPE_GAME_TIME = 4,
EVENT_TYPE_POISON = 5,
EVENT_TYPE_RADIATION = 6,
EVENT_TYPE_FLARE = 7,
EVENT_TYPE_EXPLOSION = 8,
EVENT_TYPE_ITEM_TRICKLE = 9,
EVENT_TYPE_SNEAK = 10,
EVENT_TYPE_EXPLOSION_FAILURE = 11,
EVENT_TYPE_MAP_UPDATE_EVENT = 12,
EVENT_TYPE_GSOUND_SFX_EVENT = 13,
EVENT_TYPE_COUNT,
} EventType;
typedef struct DrugEffectEvent {
int drugPid;
int stats[3];
int modifiers[3];
} DrugEffectEvent;
typedef struct WithdrawalEvent {
int field_0;
int pid;
int perk;
} WithdrawalEvent;
typedef struct ScriptEvent {
int sid;
int field_4;
} ScriptEvent;
typedef struct RadiationEvent {
int radiationLevel;
int isHealing;
} RadiationEvent;
typedef struct AmbientSoundEffectEvent {
int ambientSoundEffectIndex;
} AmbientSoundEffectEvent;
typedef struct QueueListNode {
// TODO: Make unsigned.
int time;
int type;
Object* owner;
void* data;
struct QueueListNode* next;
} QueueListNode;
typedef int QueueEventHandler(Object* owner, void* data);
typedef void QueueEventDataFreeProc(void* data);
typedef int QueueEventDataReadProc(File* stream, void** dataPtr);
typedef int QueueEventDataWriteProc(File* stream, void* data);
typedef struct EventTypeDescription {
QueueEventHandler* handlerProc;
QueueEventDataFreeProc* freeProc;
QueueEventDataReadProc* readProc;
QueueEventDataWriteProc* writeProc;
bool field_10;
QueueEventHandler* field_14;
} EventTypeDescription;
extern QueueListNode* gLastFoundQueueListNode;
extern QueueListNode* gQueueListHead;
extern EventTypeDescription gEventTypeDescriptions[EVENT_TYPE_COUNT];
void queueInit();
int queueExit();
int queueLoad(File* stream);
int queueSave(File* stream);
int queueAddEvent(int delay, Object* owner, void* data, int eventType);
int queueRemoveEvents(Object* owner);
int queueRemoveEventsByType(Object* owner, int eventType);
bool queueHasEvent(Object* owner, int eventType);
int queueProcessEvents();
void queueClear();
void _queue_clear_type(int eventType, QueueEventHandler* fn);
int queueGetNextEventTime();
int flareEventProcess(Object* obj, void* data);
int explosionEventProcess(Object* obj, void* data);
int _queue_explode_exit(Object* obj, void* data);
int _queue_do_explosion_(Object* obj, bool a2);
int explosionFailureEventProcess(Object* obj, void* data);
void _queue_leaving_map();
bool queueIsEmpty();
void* queueFindFirstEvent(Object* owner, int eventType);
void* queueFindNextEvent(Object* owner, int eventType);
#endif /* QUEUE_H */