Skip to content
This repository has been archived by the owner on Jan 12, 2024. It is now read-only.

Feature/triggers #36

Merged
merged 8 commits into from
Aug 2, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 89 additions & 3 deletions include/phoenix/cffi/World.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ typedef phoenix::vobs::trigger_list PxVobTriggerList;
typedef phoenix::vobs::trigger_script PxVobTriggerScript;
typedef phoenix::vobs::trigger_change_level PxVobTriggerChangeLevel;
typedef phoenix::vobs::trigger_world_start PxVobTriggerWorldStart;
typedef phoenix::vobs::trigger_untouch PxVobTriggerOuntouched;
typedef phoenix::vobs::trigger_untouch PxVobTriggerUntouch;

#include <phoenix/vobs/zone.hh>
typedef phoenix::vobs::zone_music PxVobZoneMusic;
Expand Down Expand Up @@ -93,7 +93,7 @@ typedef struct PxInternal_WorldVobTriggerList PxVobTriggerList;
typedef struct PxInternal_WorldVobTriggerScript PxVobTriggerScript;
typedef struct PxInternal_WorldVobTriggerChangeLevel PxVobTriggerChangeLevel;
typedef struct PxInternal_WorldVobTriggerWorldStart PxVobTriggerWorldStart;
typedef struct PxInternal_WorldVobTriggerOuntouched PxVobTriggerOuntouched;
typedef struct PxInternal_WorldVobTriggerUntouch PxVobTriggerUntouch;

typedef struct PxInternal_WorldVobZoneMusic PxVobZoneMusic;
typedef struct PxInternal_WorldVobZoneFarPlane PxVobZoneFarPlane;
Expand Down Expand Up @@ -199,6 +199,36 @@ typedef enum {
///< the VOb indicated by its radius setting.
} PxVobSoundTriggerVolume;

typedef enum {
PxVobTriggerMoverBehaviourToggle = 0,
PxVobTriggerMoverBehaviourTriggerControl = 1,
PxVobTriggerMoverBehaviourOpenTimed = 2,
PxVobTriggerMoverBehaviourLoop = 3,
PxVobTriggerMoverBehaviourSingleKeys = 4,
} PxVobTriggerMoverBehaviour;

typedef enum {
PxVobTriggerMoverLerpModeCurve = 0,
PxVobTriggerMoverLerpModeLinear = 1,
} PxVobTriggerMoverLerpMode;

typedef enum {
PxVobTriggerMoverSpeedModeSegConstant = 0,
PxVobTriggerMoverSpeedModeSlowStartEnd = 1,
PxVobTriggerMoverSpeedModeSlowStart = 2,
PxVobTriggerMoverSpeedModeSlowEnd = 3,
PxVobTriggerMoverSpeedModeSegSlowStarEnd = 4,
PxVobTriggerMoverSpeedModeSegSlowStart = 5,
PxVobTriggerMoverSpeedModeSegSlowEnd = 6,

} PxVobTriggerMoverSpeedMode;

typedef enum {
PxVobTriggerBatchModeAll = 0,
PxVobTriggerBatchModeNext = 1,
PxVobTriggerBatchModeRandom = 2,
} PxVobTriggerBatchMode;

PXC_API PxWorld* pxWorldLoad(PxBuffer* buffer);
PXC_API PxWorld* pxWorldLoadFromVfs(PxVfs const* vfs, char const* name);
PXC_API void pxWorldDestroy(PxWorld* world);
Expand Down Expand Up @@ -325,12 +355,68 @@ PXC_API int32_t pxVobTriggerGetMaxActivationCount(PxVobTrigger const* trigger);
PXC_API float pxVobTriggerGetRetriggerDelaySec(PxVobTrigger const* trigger);
PXC_API float pxVobTriggerGetDamageThreshold(PxVobTrigger const* trigger);
PXC_API float pxVobTriggerGetFireDelaySec(PxVobTrigger const* trigger);
// TODO Trigger save-game only variables
// Trigger save-game only variables
PXC_API float pxVobTriggerGetSNextTimeTriggerable(PxVobTrigger const* trigger);
PXC_API int pxVobTriggerGetSCountCanBeActivated(PxVobTrigger const* trigger);
PXC_API bool pxVobTriggerGetSIsEnabled(PxVobTrigger const* trigger);

// Trigger - Mover
PXC_API PxVobTriggerMoverBehaviour pxVobTriggerMoverGetBehaviour(PxVobTriggerMover const* trigger);
PXC_API float pxVobTriggerMoverGetTouchBlockerDamage(PxVobTriggerMover const* trigger);
PXC_API float pxVobTriggerMoverGetStayOpenTimeSec(PxVobTriggerMover const* trigger);
PXC_API bool pxVobTriggerMoverGetLocked(PxVobTriggerMover const* trigger);
PXC_API bool pxVobTriggerMoverGetAutoLink(PxVobTriggerMover const* trigger);
PXC_API bool pxVobTriggerMoverGetAutoRotate(PxVobTriggerMover const* trigger);
PXC_API float pxVobTriggerMoverGetSpeed(PxVobTriggerMover const* trigger);
PXC_API PxVobTriggerMoverLerpMode pxVobTriggerMoverGetLerpMode(PxVobTriggerMover const* trigger);
PXC_API PxVobTriggerMoverSpeedMode pxVobTriggerMoverGetSpeedMode(PxVobTriggerMover const* trigger);
PXC_API uint32_t pxVobTriggerMoverGetKeyframeCount(PxVobTriggerMover const* trigger);
PXC_API void
pxVobTriggerMoverGetKeyframe(PxVobTriggerMover const* trigger, uint32_t i, PxVec3* position, PxQuat* rotation);
PXC_API char const* pxVobTriggerMoverGetSfxOpenStart(PxVobTriggerMover const* trigger);
PXC_API char const* pxVobTriggerMoverGetSfxOpenEnd(PxVobTriggerMover const* trigger);
PXC_API char const* pxVobTriggerMoverGetSfxTransitioning(PxVobTriggerMover const* trigger);
PXC_API char const* pxVobTriggerMoverGetSfxCloseStart(PxVobTriggerMover const* trigger);
PXC_API char const* pxVobTriggerMoverGetSfxCloseEnd(PxVobTriggerMover const* trigger);
PXC_API char const* pxVobTriggerMoverGetSfxLock(PxVobTriggerMover const* trigger);
PXC_API char const* pxVobTriggerMoverGetSfxUnlock(PxVobTriggerMover const* trigger);
PXC_API char const* pxVobTriggerMoverGetSfxUseLocked(PxVobTriggerMover const* trigger);
// Trigger - Mover save-game only variables
PXC_API PxVec3 pxVobTriggerMoverGetSActKeyPosDelta(PxVobTriggerMover const* trigger);
PXC_API float pxVobTriggerMoverGetSActKeyframeF(PxVobTriggerMover const* trigger);
PXC_API int pxVobTriggerMoverGetSActKeyframe(PxVobTriggerMover const* trigger);
PXC_API int pxVobTriggerMoverGetSNextKeyFrame(PxVobTriggerMover const* trigger);
PXC_API float pxVobTriggerMoverGetMoveSpeedUnit(PxVobTriggerMover const* trigger);
PXC_API float pxVobTriggerMoverGetSAdvanceDir(PxVobTriggerMover const* trigger);
PXC_API uint32_t pxVobTriggerMoverGetSMoverState(PxVobTriggerMover const* trigger);
PXC_API int pxVobTriggerMoverGetSTriggerEventCount(PxVobTriggerMover const* trigger);
PXC_API float pxVobTriggerMoverGetSStayOpenTimeDest(PxVobTriggerMover const* trigger);

// Trigger - List
PXC_API PxVobTriggerBatchMode pxVobTriggerListGetTriggerBatchMode(PxVobTriggerList const* trigger);
PXC_API uint32_t pxVobTriggerListGetTargetsCount(PxVobTriggerList const* trigger);
PXC_API char const* pxVobTriggerListGetTargetName(PxVobTriggerList const* trigger, uint32_t i);
PXC_API float pxVobTriggerListGetTargetDelay(PxVobTriggerList const* trigger, uint32_t i);
// Trigger - List save-game only variables
PXC_API uint8_t pxVobTriggerListGetSActTarget(PxVobTriggerList const* trigger);
PXC_API bool pxVobTriggerListGetSSendOnTrigger(PxVobTriggerList const* trigger);

// Trigger - Script
PXC_API char const* pxVobTriggerScriptGetFunction(PxVobTriggerScript const* trigger);

// Trigger - Change Level
PXC_API char const* pxVobTriggerChangeLevelGetLevelName(PxVobTriggerChangeLevel const* trigger);
PXC_API char const* pxVobTriggerChangeLevelGetStartVob(PxVobTriggerChangeLevel const* trigger);

// Trigger - World Start
PXC_API char const* pxVobTriggerWorldStartGetTarget(PxVobTriggerWorldStart const* trigger);
PXC_API bool pxVobTriggerWorldStartGetFireOnce(PxVobTriggerWorldStart const* trigger);
// Trigger - World Start save-game only variables
PXC_API bool pxVobTriggerWorldStartGetSHasFired(PxVobTriggerWorldStart const* trigger);

// Trigger - Untouch
PXC_API char const* pxVobTriggerUntouchGetTarget(PxVobTriggerUntouch const* trigger);

// Vob - ZoneMusic
PXC_API void pxWorldVobGetZoneMusic(PxVobZoneMusic const* zoneMusic,
bool* enabled,
Expand Down
188 changes: 188 additions & 0 deletions src/World.cc
Original file line number Diff line number Diff line change
Expand Up @@ -428,6 +428,175 @@ float pxVobTriggerGetFireDelaySec(PxVobTrigger const* trigger) {
return trigger->fire_delay_sec;
}

// Trigger save-game only variables
float pxVobTriggerGetSNextTimeTriggerable(PxVobTrigger const* trigger) {
return trigger->s_next_time_triggerable;
}

int pxVobTriggerGetSCountCanBeActivated(PxVobTrigger const* trigger) {
return trigger->s_count_can_be_activated;
}

bool pxVobTriggerGetSIsEnabled(PxVobTrigger const* trigger) {
return trigger->s_is_enabled;
}

// Trigger - Mover
PxVobTriggerMoverBehaviour pxVobTriggerMoverGetBehaviour(PxVobTriggerMover const* trigger) {
return static_cast<PxVobTriggerMoverBehaviour>(trigger->behavior);
}

float pxVobTriggerMoverGetTouchBlockerDamage(PxVobTriggerMover const* trigger) {
return trigger->touch_blocker_damage;
}

float pxVobTriggerMoverGetStayOpenTimeSec(PxVobTriggerMover const* trigger) {
return trigger->stay_open_time_sec;
}

bool pxVobTriggerMoverGetLocked(PxVobTriggerMover const* trigger) {
return trigger->locked;
}

bool pxVobTriggerMoverGetAutoLink(PxVobTriggerMover const* trigger) {
return trigger->auto_link;
}

bool pxVobTriggerMoverGetAutoRotate(PxVobTriggerMover const* trigger) {
return trigger->auto_rotate;
}

float pxVobTriggerMoverGetSpeed(PxVobTriggerMover const* trigger) {
return trigger->speed;
}

PxVobTriggerMoverLerpMode pxVobTriggerMoverGetLerpMode(PxVobTriggerMover const* trigger) {
return static_cast<PxVobTriggerMoverLerpMode>(trigger->lerp_mode);
}

PxVobTriggerMoverSpeedMode pxVobTriggerMoverGetSpeedMode(PxVobTriggerMover const* trigger) {
return static_cast<PxVobTriggerMoverSpeedMode>(trigger->speed_mode);
}

uint32_t pxVobTriggerMoverGetKeyframeCount(PxVobTriggerMover const* trigger) {
return (uint32_t) trigger->keyframes.size();
}

void pxVobTriggerMoverGetKeyframe(PxVobTriggerMover const* trigger, uint32_t i, PxVec3* position, PxQuat* rotation) {
auto const& src = trigger->keyframes[i];
position->x = src.position.x;
position->y = src.position.y;
position->z = src.position.z;
rotation->x = src.rotation.x;
rotation->y = src.rotation.y;
rotation->z = src.rotation.z;
rotation->w = src.rotation.w;
}

char const* pxVobTriggerMoverGetSfxOpenStart(PxVobTriggerMover const* trigger) {
return trigger->sfx_open_start.c_str();
}

char const* pxVobTriggerMoverGetSfxOpenEnd(PxVobTriggerMover const* trigger) {
return trigger->sfx_open_end.c_str();
}

char const* pxVobTriggerMoverGetSfxTransitioning(PxVobTriggerMover const* trigger) {
return trigger->sfx_transitioning.c_str();
}

char const* pxVobTriggerMoverGetSfxCloseStart(PxVobTriggerMover const* trigger) {
return trigger->sfx_close_start.c_str();
}

char const* pxVobTriggerMoverGetSfxCloseEnd(PxVobTriggerMover const* trigger) {
return trigger->sfx_close_end.c_str();
}

char const* pxVobTriggerMoverGetSfxLock(PxVobTriggerMover const* trigger) {
return trigger->sfx_lock.c_str();
}

char const* pxVobTriggerMoverGetSfxUnlock(PxVobTriggerMover const* trigger) {
return trigger->sfx_unlock.c_str();
}

char const* pxVobTriggerMoverGetSfxUseLocked(PxVobTriggerMover const* trigger) {
return trigger->sfx_use_locked.c_str();
}

// Trigger - Mover save-game only variables
PxVec3 pxVobTriggerMoverGetSActKeyPosDelta(PxVobTriggerMover const* trigger) {
PxVec3 vector;
vector.x = trigger->s_act_key_pos_delta.x;
vector.y = trigger->s_act_key_pos_delta.y;
vector.z = trigger->s_act_key_pos_delta.z;
return vector;
}

float pxVobTriggerMoverGetSActKeyframeF(PxVobTriggerMover const* trigger) {
return trigger->s_act_keyframe_f;
}

int pxVobTriggerMoverGetSActKeyframe(PxVobTriggerMover const* trigger) {
return trigger->s_act_keyframe;
}

int pxVobTriggerMoverGetSNextKeyFrame(PxVobTriggerMover const* trigger) {
return trigger->s_next_keyframe;
}

float pxVobTriggerMoverGetMoveSpeedUnit(PxVobTriggerMover const* trigger) {
return trigger->s_move_speed_unit;
}

float pxVobTriggerMoverGetSAdvanceDir(PxVobTriggerMover const* trigger) {
return trigger->s_advance_dir;
}

uint32_t pxVobTriggerMoverGetSMoverState(PxVobTriggerMover const* trigger) {
return trigger->s_mover_state;
}

int pxVobTriggerMoverGetSTriggerEventCount(PxVobTriggerMover const* trigger) {
return trigger->s_trigger_event_count;
}

float pxVobTriggerMoverGetSStayOpenTimeDest(PxVobTriggerMover const* trigger) {
return trigger->s_stay_open_time_dest;
}

// Trigger - List
PxVobTriggerBatchMode pxVobTriggerListGetTriggerBatchMode(PxVobTriggerList const* trigger) {
return static_cast<PxVobTriggerBatchMode>(trigger->mode);
}

uint32_t pxVobTriggerListGetTargetsCount(PxVobTriggerList const* trigger) {
return (uint32_t) trigger->targets.size();
}
char const* pxVobTriggerListGetTargetName(PxVobTriggerList const* trigger, uint32_t i) {
auto const& src = trigger->targets[i];
return src.name.c_str();
}
float pxVobTriggerListGetTargetDelay(PxVobTriggerList const* trigger, uint32_t i) {
auto const& src = trigger->targets[i];
return src.delay;
}

// Trigger - List save-game only variables
uint8_t pxVobTriggerListGetSActTarget(PxVobTriggerList const* trigger) {
return trigger->s_act_target;
}

bool pxVobTriggerListGetSSendOnTrigger(PxVobTriggerList const* trigger) {
return trigger->s_send_on_trigger;
}

// Trigger - Script
char const* pxVobTriggerScriptGetFunction(PxVobTriggerScript const* trigger) {
return trigger->function.c_str();
}

// Trigger - Change Level
char const* pxVobTriggerChangeLevelGetLevelName(PxVobTriggerChangeLevel const* trigger) {
return trigger->level_name.c_str();
Expand All @@ -437,6 +606,25 @@ char const* pxVobTriggerChangeLevelGetStartVob(PxVobTriggerChangeLevel const* tr
return trigger->start_vob.c_str();
}

// Trigger - World Start
char const* pxVobTriggerWorldStartGetTarget(PxVobTriggerWorldStart const* trigger) {
return trigger->target.c_str();
}

bool pxVobTriggerWorldStartGetFireOnce(PxVobTriggerWorldStart const* trigger) {
return trigger->fire_once;
}

// Trigger - World Start save-game only variables
bool pxVobTriggerWorldStartGetSHasFired(PxVobTriggerWorldStart const* trigger) {
return trigger->s_has_fired;
}

// Trigger - Untouch
char const* pxVobTriggerUntouchGetTarget(PxVobTriggerUntouch const* trigger) {
return trigger->target.c_str();
}

// Vob - ZoneMusic
void pxWorldVobGetZoneMusic(PxVobZoneMusic const* zoneMusic,
bool* enabled,
Expand Down