Skip to content

Commit

Permalink
EventTrigger work (#231)
Browse files Browse the repository at this point in the history
* event trigger work

* fix object::refs

* event trigger work

* eventtrigger anim work

* eventtrigger copy

* eventtrigger handler

* eventtrigger custom propsyncs

* propsync vector

* propsync objvector

* propsync objptrlist attempt

---------

Co-authored-by: rjkiv <[email protected]>
  • Loading branch information
rjkiv and rjkiv authored May 30, 2024
1 parent f0268d9 commit f704e40
Show file tree
Hide file tree
Showing 11 changed files with 511 additions and 54 deletions.
26 changes: 13 additions & 13 deletions config/SZBE69_B8/symbols.txt
Original file line number Diff line number Diff line change
Expand Up @@ -60234,21 +60234,21 @@ __vt__32ObjPtrList<8Sequence,9ObjectDir> = .data:0x80C17780; // type:object size
__RTTI__32ObjPtrList<8Sequence,9ObjectDir> = .data:0x80C177C8; // type:object size:0x8 scope:global align:8
__FUNCTION__$22233 = .data:0x80C177D0; // type:object size:0x12 scope:local align:4 data:string
__FUNCTION__$22238 = .data:0x80C177E4; // type:object size:0x11 scope:local align:4 data:string
@STRING@Replace__39ObjOwnerPtr<13RndAnimatable,9ObjectDir>FPQ23Hmx6ObjectPQ23Hmx6Object = .data:0x80C177F8; // type:object size:0x13 scope:local align:4 data:string
@STRING@Replace__34ObjOwnerPtr<9ObjectDir,9ObjectDir>FPQ23Hmx6ObjectPQ23Hmx6Object = .data:0x80C1780C; // type:object size:0x13 scope:local align:4 data:string
@STRING@Replace__38ObjOwnerPtr<12EventTrigger,9ObjectDir>FPQ23Hmx6ObjectPQ23Hmx6Object = .data:0x80C17820; // type:object size:0x13 scope:local align:4 data:string
@STRING@Replace__37ObjOwnerPtr<11RndDrawable,9ObjectDir>FPQ23Hmx6ObjectPQ23Hmx6Object = .data:0x80C17834; // type:object size:0x13 scope:local align:4 data:string
@STRING@Replace__39ObjOwnerPtr<13RndAnimatable,9ObjectDir>FPQ23Hmx6ObjectPQ23Hmx6Object = .data:0x80C177F8; // type:object size:0x13 scope:global align:4 data:string
@STRING@Replace__34ObjOwnerPtr<9ObjectDir,9ObjectDir>FPQ23Hmx6ObjectPQ23Hmx6Object = .data:0x80C1780C; // type:object size:0x13 scope:global align:4 data:string
@STRING@Replace__38ObjOwnerPtr<12EventTrigger,9ObjectDir>FPQ23Hmx6ObjectPQ23Hmx6Object = .data:0x80C17820; // type:object size:0x13 scope:global align:4 data:string
@STRING@Replace__37ObjOwnerPtr<11RndDrawable,9ObjectDir>FPQ23Hmx6ObjectPQ23Hmx6Object = .data:0x80C17834; // type:object size:0x13 scope:global align:4 data:string
@STRING@__rf__39ObjOwnerPtr<13RndAnimatable,9ObjectDir>CFv@0 = .data:0x80C17848; // type:object size:0x5 scope:global align:4 data:string
@STRING@__rf__39ObjOwnerPtr<13RndAnimatable,9ObjectDir>CFv = .data:0x80C17850; // type:object size:0xB scope:global align:4 data:string
@STRING@New<11UIComponent>__Q23Hmx6ObjectFv_P11UIComponent = .data:0x80C1785C; // type:object size:0x1E scope:local align:4 data:string
@STRING@unlink__40ObjPtrList<15RndPartLauncher,9ObjectDir>FPQ240ObjPtrList<15RndPartLauncher,9ObjectDir>4Node@0 = .data:0x80C1787C; // type:object size:0xC scope:local align:4 data:string
@STRING@unlink__40ObjPtrList<15RndPartLauncher,9ObjectDir>FPQ240ObjPtrList<15RndPartLauncher,9ObjectDir>4Node = .data:0x80C17888; // type:object size:0xB scope:local align:4 data:string
@STRING@pop_back__40ObjPtrList<15RndPartLauncher,9ObjectDir>Fv@0 = .data:0x80C17894; // type:object size:0x7 scope:local align:4 data:string
@STRING@pop_back__40ObjPtrList<15RndPartLauncher,9ObjectDir>Fv = .data:0x80C1789C; // type:object size:0xB scope:local align:4 data:string
@STRING@Type__20UITriggerCompleteMsgFv = .data:0x80C178A8; // type:object size:0x14 scope:local align:4 data:string
@STRING@SetType__9UITriggerF6Symbol@1 = .data:0x80C178BC; // type:object size:0x1C scope:local align:4 data:string
@STRING@SetType__9UITriggerF6Symbol@0 = .data:0x80C178D8; // type:object size:0x6 scope:local align:4 data:string
@STRING@SetType__9UITriggerF6Symbol = .data:0x80C178E0; // type:object size:0x8 scope:local align:8 data:string
@STRING@New<11UIComponent>__Q23Hmx6ObjectFv_P11UIComponent = .data:0x80C1785C; // type:object size:0x1E scope:global align:4 data:string
@STRING@unlink__40ObjPtrList<15RndPartLauncher,9ObjectDir>FPQ240ObjPtrList<15RndPartLauncher,9ObjectDir>4Node@0 = .data:0x80C1787C; // type:object size:0xC scope:global align:4 data:string
@STRING@unlink__40ObjPtrList<15RndPartLauncher,9ObjectDir>FPQ240ObjPtrList<15RndPartLauncher,9ObjectDir>4Node = .data:0x80C17888; // type:object size:0xB scope:global align:4 data:string
@STRING@pop_back__40ObjPtrList<15RndPartLauncher,9ObjectDir>Fv@0 = .data:0x80C17894; // type:object size:0x7 scope:global align:4 data:string
@STRING@pop_back__40ObjPtrList<15RndPartLauncher,9ObjectDir>Fv = .data:0x80C1789C; // type:object size:0xB scope:global align:4 data:string
@STRING@Type__20UITriggerCompleteMsgFv = .data:0x80C178A8; // type:object size:0x14 scope:global align:4 data:string
@STRING@SetType__9UITriggerF6Symbol@1 = .data:0x80C178BC; // type:object size:0x1C scope:global align:4 data:string
@STRING@SetType__9UITriggerF6Symbol@0 = .data:0x80C178D8; // type:object size:0x6 scope:global align:4 data:string
@STRING@SetType__9UITriggerF6Symbol = .data:0x80C178E0; // type:object size:0x8 scope:global align:8 data:string
@STRING@unlink__32ObjPtrList<8Sequence,9ObjectDir>FPQ232ObjPtrList<8Sequence,9ObjectDir>4Node@0 = .data:0x80C178E8; // type:object size:0xC scope:global align:4 data:string
@STRING@unlink__32ObjPtrList<8Sequence,9ObjectDir>FPQ232ObjPtrList<8Sequence,9ObjectDir>4Node = .data:0x80C178F4; // type:object size:0xB scope:global align:4 data:string
@STRING@pop_back__32ObjPtrList<8Sequence,9ObjectDir>Fv@0 = .data:0x80C17900; // type:object size:0x7 scope:global align:4 data:string
Expand Down
3 changes: 3 additions & 0 deletions src/system/obj/DirItr.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ template <class T> class ObjDirItr {
return *this;
}

operator T*(){ return mObj; }
T* operator->() { return mObj; }

void Advance();

ObjectDir* mDir;
Expand Down
18 changes: 17 additions & 1 deletion src/system/obj/ObjMacros.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,12 @@ bool objType::SyncProperty(DataNode& _val, DataArray* _prop, int _i, PropOp _op)
else { \
Symbol sym = _prop->Sym(_i);

#define BEGIN_CUSTOM_PROPSYNC(objType) \
bool PropSync(objType& o, DataNode& _val, DataArray* _prop, int _i, PropOp _op){ \
if(_i == _prop->Size()) return true; \
else { \
Symbol sym = _prop->Sym(_i);

#define SYNC_PROP(symbol, member) \
if(sym == symbol) return PropSync(member, _val, _prop, _i + 1, _op);

Expand Down Expand Up @@ -146,7 +152,12 @@ bool objType::SyncProperty(DataNode& _val, DataArray* _prop, int _i, PropOp _op)

#define SYNC_PROP_STATIC(symbol, member) { \
NEW_STATIC_SYMBOL(symbol) \
SYNC_PROP(symbol, member) \
SYNC_PROP(_s, member) \
}

#define SYNC_PROP_ACTION_STATIC(symbol, member, opmask, action) { \
NEW_STATIC_SYMBOL(symbol) \
SYNC_PROP_ACTION(_s, member, opmask, action) \
}

#define SYNC_SUPERCLASS(parent) \
Expand All @@ -157,6 +168,11 @@ bool objType::SyncProperty(DataNode& _val, DataArray* _prop, int _i, PropOp _op)
} \
}

#define END_CUSTOM_PROPSYNC \
return false; \
} \
}

// END SYNCPROPERTY MACROS -----------------------------------------------------------------------------

// BEGIN SAVE MACRO ------------------------------------------------------------------------------------
Expand Down
2 changes: 1 addition & 1 deletion src/system/obj/Object.h
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ namespace Hmx {
return obj;
}

std::vector<ObjRef*>& Refs(){ return mRefs; }
const std::vector<ObjRef*>& Refs() const { return mRefs; }

const DataArray* TypeDef() const { return mTypeDef; }
Symbol Type() const {
Expand Down
93 changes: 72 additions & 21 deletions src/system/obj/PropSync_p.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ enum PropOp {
template<class T1, class T2> class ObjPtr;
template<class T1, class T2> class ObjOwnerPtr;
template<class T1, class T2> class ObjPtrList;
template<class T1, class T2 = u16> class ObjVector;

bool PropSync(class String&, DataNode&, DataArray*, int, PropOp);
bool PropSync(FilePath&, DataNode&, DataArray*, int, PropOp);
Expand Down Expand Up @@ -67,7 +68,7 @@ template <class T> inline bool PropSync(T*& obj, DataNode& node, DataArray* prop
if((int)op == 0x40) return false;
else {
MILO_ASSERT(i == prop->Size() && op <= kPropInsert, 0x58);
if(op == kPropGet) node = DataNode(obj);
if(op == kPropGet) node = DataNode((Hmx::Object*)obj);
else obj = node.Obj<T>(0);
return true;
}
Expand All @@ -93,15 +94,33 @@ template <class T> bool PropSync(ObjOwnerPtr<T, class ObjectDir>& ptr, DataNode&
}
}

// fn_805E3988 - PropSync(ObjPtrList<Sequence>&) - used in EventTrigger.cpp
// fn_80642860 - PropSync(ObjPtrList&, ...)
template <class T> bool PropSync(ObjPtrList<T, class ObjectDir>& ptr, DataNode& node, DataArray* prop, int i, PropOp op){
if((int)op == 0x40) return false;
// else {
// MILO_ASSERT(op <= kPropInsert, 0x132);
// if(op == kPropGet) node = DataNode(ptr.Ptr());
// else ptr = node.Obj<T>(0);
// return true;
// }
if((int)op == 0x40) return ptr.mMode == kObjListNoNull;
else if(i == prop->Size()){
MILO_ASSERT(op == kPropSize, 0x146);
node = DataNode(ptr.size());
return true;
}
else {
ObjPtrList<T, class ObjectDir>::iterator it = ptr.begin();
for(int cnt = prop->Int(i++); cnt >= 0; cnt--) ++it;
MILO_ASSERT(i == prop->Size(), 0x150);
if(op == kPropGet){
// return PropSync(*it, node, prop, i, kPropGet); // supposed to call the Object PropSync template on line 67 but it doesn't for whatever reason
}
else if(op == kPropSet){

}
else if(op == kPropRemove){

}
else if(op == kPropInsert){

}
else return false;
}
}

template <class T> bool PropSync(std::list<T>& list, DataNode& node, DataArray* prop, int i, PropOp op) {
Expand All @@ -114,24 +133,56 @@ template <class T> bool PropSync(std::list<T>& list, DataNode& node, DataArray*
}
}

// template <class T> bool PropSync(std::vector<T>& vec, DataNode& node, DataArray* prop, int i, PropOp op) {
// if((int)op == 0x40) return false;
// else {
// MILO_ASSERT(op == kPropSize, 146);
// //if(op == kPropGet) node = DataNode(ptr.Ptr());
// //else ptr = node.Obj<T>(0);
// return true;
// }
// }

template <class T, typename T2> bool PropSync(std::vector<T, T2>& vec, DataNode& node, DataArray* prop, int i, PropOp op) {
if((int)op == 0x40) return false;
else {
else if(i == prop->Size()){
MILO_ASSERT(op == kPropSize, 146);
//if(op == kPropGet) node = DataNode(ptr.Ptr());
//else ptr = node.Obj<T>(0);
node = DataNode((int)vec.size());
return true;
}
else {
std::vector<T, T2>::iterator it = vec.begin() + prop->Int(i++);
if(i < prop->Size() || op & 0x13){
return PropSync(*it, node, prop, i, op);
}
else if(op == kPropRemove){
vec.erase(it);
return true;
}
else if(op == kPropInsert){
T item;
if(PropSync(item, node, prop, i, op)) vec.insert(it, item);
return true;
}
else return false;
}
}

template <class T, typename T2> bool PropSync(ObjVector<T, T2>& objVec, DataNode& node, DataArray* prop, int i, PropOp op) {
if((int)op == 0x40) return false;
else if(i == prop->Size()){
MILO_ASSERT(op == kPropSize, 0x17F);
node = DataNode((int)objVec.size());
return true;
}
else {
std::vector<T, T2>::iterator it = objVec.begin() + prop->Int(i++);
if(i < prop->Size() || op & 0x13){
return PropSync(*it, node, prop, i, op);
}
else if(op == kPropRemove){
objVec.erase(it);
return true;
}
else if(op == kPropInsert){
T item(objVec.Owner());
if(PropSync(item, node, prop, i, kPropInsert)){
objVec.insert(it, item);
return true;
}
}
return false;
}
}

#endif
2 changes: 1 addition & 1 deletion src/system/os/File.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ const char* FileRoot();
const char* FileExecRoot();
const char* FileSystemRoot();

extern "C" void FileNormalizePath();
extern "C" void FileNormalizePath(const char*);
extern "C" const char* FileMakePath(const char* root, const char* file, char*);
extern "C" const char* FileRelativePath(const char* root, const char* filepath);
bool FileReadOnly(const char* filepath);
Expand Down
1 change: 1 addition & 0 deletions src/system/rndobj/Anim.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ class RndAnimatable : public virtual Hmx::Object {
DataNode OnAnimate(DataArray*);
void StopAnimation();
bool IsAnimating();
Rate GetRate(){ return mRate; }
DataNode OnConvertFrames(DataArray*);

void Animate(float, bool, float);
Expand Down
5 changes: 5 additions & 0 deletions src/system/rndobj/AnimFilter.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@ class RndAnimFilter : public RndAnimatable {
float Scale();
void SetAnim(RndAnimatable*);
DataNode OnSafeAnims(DataArray*);
Type GetType(){ return mType; }
RndAnimatable* Anim(){ return mAnim; }
float Start(){ return mStart; }
float End(){ return mEnd; }
float Period(){ return mPeriod; }

DECLARE_REVS;

Expand Down
Loading

0 comments on commit f704e40

Please sign in to comment.