mirror of
https://github.com/zeldaret/ss
synced 2026-10-07 21:30:59 -04:00
80 lines
2.1 KiB
C++
80 lines
2.1 KiB
C++
#ifndef D_CC_H
|
|
#define D_CC_H
|
|
|
|
#include "c/c_list.h"
|
|
#include "d/col/c/c_cc_d.h"
|
|
#include "d/col/cc/d_cc_d.h"
|
|
|
|
class LinkedColliderNode : public cListNd_c {
|
|
public:
|
|
LinkedColliderNode(cCcD_Obj *obj) : mpList(nullptr), mpCcDObj(obj) {}
|
|
void remove() {
|
|
if (mpList != nullptr) {
|
|
mpList->remove(this);
|
|
mpList = nullptr;
|
|
}
|
|
}
|
|
/* 0x08 */ cCcD_Obj *mpCcDObj;
|
|
/* 0x0C */ cListMg_c *mpList;
|
|
};
|
|
|
|
template <typename T>
|
|
class dCcD_Linked : public T {
|
|
public:
|
|
dCcD_Linked() : mNode(this) {}
|
|
virtual ~dCcD_Linked() {
|
|
mNode.remove();
|
|
}
|
|
/* 0x150 */ LinkedColliderNode mNode;
|
|
};
|
|
|
|
class dColliderLinkedList {
|
|
private:
|
|
cListMg_c mList;
|
|
static void Set(cCcD_Obj *obj, void *cbArg);
|
|
static void SetStts(cCcD_Obj *obj, void *cbArg);
|
|
static void AtSet(cCcD_Obj *obj, void *cbArg);
|
|
static void ClrAt(cCcD_Obj *obj, void *cbArg);
|
|
static void TgSet(cCcD_Obj *obj, void *cbArg);
|
|
static void ClrTg(cCcD_Obj *obj, void *cbArg);
|
|
static void CoSet(cCcD_Obj *obj, void *cbArg);
|
|
static void ClrCo(cCcD_Obj *obj, void *cbArg);
|
|
|
|
public:
|
|
virtual ~dColliderLinkedList();
|
|
|
|
void postInit(cCcD_Obj &ccD);
|
|
void addCc(dCcD_Linked<dCcD_Cyl> &ccD, const dCcD_SrcCyl &src);
|
|
void addCc(dCcD_Linked<dCcD_Sph> &ccD, const dCcD_SrcSph &src);
|
|
void addCc(dCcD_Linked<dCcD_Cps> &ccD, const dCcD_SrcCps &src);
|
|
void addCc(dCcD_Linked<dCcD_Unk> &ccD, const dCcD_SrcUnk &src);
|
|
void SetStts(cCcD_Stts &stts);
|
|
void registerColliders();
|
|
|
|
typedef void (*ccCbFunc)(cCcD_Obj *obj, void *cbArg);
|
|
void foreachCc(ccCbFunc f, void *cbArg) const;
|
|
void foreachCc2(ccCbFunc f, void *cbArg) const;
|
|
|
|
typedef bool (cCcD_Obj::*ccPtmf)();
|
|
cCcD_Obj *find(ccPtmf f) const;
|
|
|
|
cCcD_Obj *findAtHit() const {
|
|
return find(&cCcD_Obj::ChkAtHit);
|
|
}
|
|
cCcD_Obj *findTgHit() const {
|
|
return find(&cCcD_Obj::ChkTgHit);
|
|
}
|
|
cCcD_Obj *findCoHit() const {
|
|
return find(&cCcD_Obj::ChkCoHit);
|
|
}
|
|
|
|
void AtSet();
|
|
void ClrAt();
|
|
void TgSet();
|
|
void ClrTg();
|
|
void CoSet();
|
|
void ClrCo();
|
|
};
|
|
|
|
#endif
|