mirror of
https://github.com/zeldaret/tww.git
synced 2026-07-09 14:05:28 -04:00
JStudio_JStage control OK
This commit is contained in:
+1
-1
@@ -616,7 +616,7 @@ config.libs = [
|
||||
JSystemLib(
|
||||
"JStudio_JStage",
|
||||
[
|
||||
Object(NonMatching, "JSystem/JStudio/JStudio_JStage/control.cpp"),
|
||||
Object(Matching, "JSystem/JStudio/JStudio_JStage/control.cpp"),
|
||||
Object(NonMatching, "JSystem/JStudio/JStudio_JStage/object.cpp"),
|
||||
Object(NonMatching, "JSystem/JStudio/JStudio_JStage/object-actor.cpp"),
|
||||
Object(NonMatching, "JSystem/JStudio/JStudio_JStage/object-ambientlight.cpp"),
|
||||
|
||||
@@ -4,6 +4,16 @@
|
||||
#include "dolphin/mtx/mtxvec.h"
|
||||
|
||||
namespace JStage {
|
||||
enum TEObject {
|
||||
/* 0x0 */ TOBJ_ACTOR_UNK,
|
||||
/* 0x1 */ TOBJ_UNK1,
|
||||
/* 0x2 */ TOBJ_ACTOR,
|
||||
/* 0x3 */ TOBJ_CAMERA,
|
||||
/* 0x4 */ TOBJ_AMBIENT,
|
||||
/* 0x5 */ TOBJ_LIGHT,
|
||||
/* 0x6 */ TOBJ_FOG,
|
||||
};
|
||||
|
||||
struct TObject {
|
||||
virtual ~TObject() = 0;
|
||||
virtual s32 JSGFGetType() const = 0;
|
||||
|
||||
@@ -4,16 +4,6 @@
|
||||
#include "JSystem/JStage/JSGObject.h"
|
||||
|
||||
namespace JStage {
|
||||
enum TEObject {
|
||||
/* 0x0 */ TOBJ_ACTOR_UNK,
|
||||
/* 0x1 */ TOBJ_UNK1,
|
||||
/* 0x2 */ TOBJ_ACTOR,
|
||||
/* 0x3 */ TOBJ_CAMERA,
|
||||
/* 0x4 */ TOBJ_AMBIENT,
|
||||
/* 0x5 */ TOBJ_LIGHT,
|
||||
/* 0x6 */ TOBJ_FOG,
|
||||
};
|
||||
|
||||
struct TSystem : public TObject {
|
||||
virtual ~TSystem() = 0;
|
||||
virtual s32 JSGFGetType() const;
|
||||
|
||||
@@ -256,7 +256,7 @@ struct TAdaptor_camera : public TAdaptor {
|
||||
}
|
||||
virtual ~TAdaptor_camera() = 0;
|
||||
|
||||
/* 0x10 */ TVariableValue mValue[12];
|
||||
/* 0x10 */ TVariableValue mValue[11];
|
||||
|
||||
static u8 const sauVariableValue_3_POSITION_XYZ[12];
|
||||
static u8 const sauVariableValue_3_TARGET_POSITION_XYZ[12];
|
||||
|
||||
@@ -12,14 +12,14 @@
|
||||
namespace JStudio_JStage {
|
||||
struct TCreateObject : public JStudio::TCreateObject {
|
||||
TCreateObject(const JStage::TSystem* pSystem) {
|
||||
pJSGSystem_ = pSystem;
|
||||
mSystem = pSystem;
|
||||
}
|
||||
|
||||
virtual ~TCreateObject();
|
||||
virtual bool create(JStudio::TObject**, JStudio::stb::data::TParse_TBlock_object const&);
|
||||
virtual void find(const JStudio::stb::data::TParse_TBlock_object&, JStage::TEObject);
|
||||
virtual JStage::TObject* find(const JStudio::stb::data::TParse_TBlock_object&, JStage::TEObject);
|
||||
|
||||
/* 0x0C */ const JStage::TSystem* pJSGSystem_;
|
||||
/* 0x0C */ const JStage::TSystem* mSystem;
|
||||
};
|
||||
|
||||
struct TAdaptor_object_ {
|
||||
@@ -27,8 +27,8 @@ struct TAdaptor_object_ {
|
||||
void adaptor_ENABLE_(JStage::TObject*, JStudio::data::TEOperationData, void const*, u32);
|
||||
|
||||
/* 0x0 */ JStudio::TAdaptor* field_0x0;
|
||||
/* 0x4 */ JStage::TSystem* pJSGSystem_;
|
||||
/* 0x8 */ JStage::TObject* pJSGObject_;
|
||||
/* 0x4 */ JStage::TSystem* mSystem;
|
||||
/* 0x8 */ JStage::TObject* mObject;
|
||||
};
|
||||
|
||||
struct TAdaptor_actor : public JStudio::TAdaptor_actor, public JStudio_JStage::TAdaptor_object_ {
|
||||
@@ -74,15 +74,8 @@ struct TAdaptor_actor : public JStudio::TAdaptor_actor, public JStudio_JStage::T
|
||||
static u8 saoVVOutput_[64];
|
||||
static u8 saoVVOutput_ANIMATION_FRAME_[144 + 4 /* padding */];
|
||||
|
||||
/* 0x134 */ u32 field_0x134;
|
||||
/* 0x138 */ u32 field_0x138;
|
||||
/* 0x13C */ u32 field_0x13c;
|
||||
/* 0x140 */ u32 field_0x140;
|
||||
/* 0x144 */ u32 field_0x144;
|
||||
/* 0x148 */ u8 field_0x148;
|
||||
/* 0x14C */ u32 field_0x14c;
|
||||
/* 0x150 */ u32 field_0x150;
|
||||
};
|
||||
/* 0x130 */ u8 field_0x130[0x144 - 0x130];
|
||||
}; // Size: 0x144
|
||||
|
||||
struct TAdaptor_ambientLight : public JStudio::TAdaptor_ambientLight {
|
||||
TAdaptor_ambientLight(JStage::TSystem const*, JStage::TAmbientLight*);
|
||||
@@ -93,7 +86,9 @@ struct TAdaptor_ambientLight : public JStudio::TAdaptor_ambientLight {
|
||||
virtual void adaptor_do_end(const JStudio::TObject*);
|
||||
virtual void adaptor_do_update(const JStudio::TObject*, u32);
|
||||
virtual void adaptor_do_data(const JStudio::TObject*, void const*, u32, void const*, u32);
|
||||
};
|
||||
|
||||
/* 0x5C */ u8 field_0x5C[0x64- 0x5C];
|
||||
}; // Size: 0x64
|
||||
|
||||
struct TAdaptor_camera : public JStudio::TAdaptor_camera {
|
||||
TAdaptor_camera(JStage::TSystem const*, JStage::TCamera*);
|
||||
@@ -120,7 +115,9 @@ struct TAdaptor_camera : public JStudio::TAdaptor_camera {
|
||||
void getJSG_targetPosition_(JStudio::TControl const*);
|
||||
|
||||
static u8 saoVVOutput_[160 + 4 /* padding */];
|
||||
};
|
||||
|
||||
/* 0xE8 */ u8 field_0xE8[0xF8 - 0xE8];
|
||||
}; // Size: 0xF8
|
||||
|
||||
struct TAdaptor_fog : public JStudio::TAdaptor_fog {
|
||||
TAdaptor_fog(JStage::TSystem const*, JStage::TFog*);
|
||||
@@ -132,7 +129,9 @@ struct TAdaptor_fog : public JStudio::TAdaptor_fog {
|
||||
virtual void adaptor_do_data(const JStudio::TObject*, void const*, u32, void const*, u32);
|
||||
|
||||
static u8 saoVVOutput_[96 + 4 /* padding */];
|
||||
};
|
||||
|
||||
/* 0x84 */ u8 field_0x110[0x8C - 0x84];
|
||||
}; // Size: 0x8C
|
||||
|
||||
struct TAdaptor_light : public JStudio::TAdaptor_light {
|
||||
struct TVVOutput_direction_ {
|
||||
@@ -151,7 +150,9 @@ struct TAdaptor_light : public JStudio::TAdaptor_light {
|
||||
virtual void adaptor_do_FACULTY(JStudio::data::TEOperationData, void const*, u32);
|
||||
|
||||
static u8 saoVVOutput_direction_[72];
|
||||
};
|
||||
|
||||
/* 0x110 */ u8 field_0x110[0x11C - 0x110];
|
||||
}; // Size: 0x11C
|
||||
|
||||
void
|
||||
transform_toGlobalFromLocal(f32 (*)[4],
|
||||
|
||||
@@ -6,17 +6,168 @@
|
||||
#include "JSystem/JStudio/JStudio_JStage/control.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
namespace JStudio_JStage {
|
||||
|
||||
namespace {
|
||||
// Fake inline.
|
||||
// TODO: supposed to use JStudio::TObject::createFromAdaptor instead of this somehow
|
||||
static inline JStudio::TObject* doCreateObject(const JStudio::stb::data::TParse_TBlock_object& data, TAdaptor_actor* adaptor)
|
||||
{
|
||||
JStudio::TObject* object = new JStudio::TObject_actor(data, adaptor);
|
||||
if (object == NULL) {
|
||||
// TODO: This should probably delete the adaptor in NONMATCHING builds, if the object couldn't get created.
|
||||
return NULL;
|
||||
} else {
|
||||
if (object->mpAdaptor != NULL) {
|
||||
object->mpAdaptor->adaptor_do_prepare(object);
|
||||
}
|
||||
}
|
||||
return object;
|
||||
}
|
||||
|
||||
static inline JStudio::TObject* doCreateObject(const JStudio::stb::data::TParse_TBlock_object& data, TAdaptor_camera* adaptor)
|
||||
{
|
||||
JStudio::TObject* object = new JStudio::TObject_camera(data, adaptor);
|
||||
if (object == NULL) {
|
||||
// TODO: This should probably delete the adaptor in NONMATCHING builds, if the object couldn't get created.
|
||||
return NULL;
|
||||
} else {
|
||||
if (object->mpAdaptor != NULL) {
|
||||
object->mpAdaptor->adaptor_do_prepare(object);
|
||||
}
|
||||
}
|
||||
return object;
|
||||
}
|
||||
|
||||
static inline JStudio::TObject* doCreateObject(const JStudio::stb::data::TParse_TBlock_object& data, TAdaptor_ambientLight* adaptor)
|
||||
{
|
||||
JStudio::TObject* object = new JStudio::TObject_ambientLight(data, adaptor);
|
||||
if (object == NULL) {
|
||||
// TODO: This should probably delete the adaptor in NONMATCHING builds, if the object couldn't get created.
|
||||
return NULL;
|
||||
} else {
|
||||
if (object->mpAdaptor != NULL) {
|
||||
object->mpAdaptor->adaptor_do_prepare(object);
|
||||
}
|
||||
}
|
||||
return object;
|
||||
}
|
||||
|
||||
static inline JStudio::TObject* doCreateObject(const JStudio::stb::data::TParse_TBlock_object& data, TAdaptor_light* adaptor)
|
||||
{
|
||||
JStudio::TObject* object = new JStudio::TObject_light(data, adaptor);
|
||||
if (object == NULL) {
|
||||
// TODO: This should probably delete the adaptor in NONMATCHING builds, if the object couldn't get created.
|
||||
return NULL;
|
||||
} else {
|
||||
if (object->mpAdaptor != NULL) {
|
||||
object->mpAdaptor->adaptor_do_prepare(object);
|
||||
}
|
||||
}
|
||||
return object;
|
||||
}
|
||||
|
||||
static inline JStudio::TObject* doCreateObject(const JStudio::stb::data::TParse_TBlock_object& data, TAdaptor_fog* adaptor)
|
||||
{
|
||||
JStudio::TObject* object = new JStudio::TObject_fog(data, adaptor);
|
||||
if (object == NULL) {
|
||||
// TODO: This should probably delete the adaptor in NONMATCHING builds, if the object couldn't get created.
|
||||
return NULL;
|
||||
} else {
|
||||
if (object->mpAdaptor != NULL) {
|
||||
object->mpAdaptor->adaptor_do_prepare(object);
|
||||
}
|
||||
}
|
||||
return object;
|
||||
}
|
||||
|
||||
typedef JStudio::TObject* (*CreateObjectFunction)(const JStudio::stb::data::TParse_TBlock_object&, JStage::TObject*,
|
||||
const JStage::TSystem*);
|
||||
|
||||
template <typename Adaptor, typename Object>
|
||||
JStudio::TObject* createObject_JSG_(const JStudio::stb::data::TParse_TBlock_object& data, JStage::TObject* stageObject,
|
||||
const JStage::TSystem* system);
|
||||
|
||||
} // namespace
|
||||
|
||||
/* 80275BAC-80275C0C .text __dt__Q214JStudio_JStage13TCreateObjectFv */
|
||||
JStudio_JStage::TCreateObject::~TCreateObject() {
|
||||
/* Nonmatching */
|
||||
TCreateObject::~TCreateObject() {}
|
||||
|
||||
static void dummy() {
|
||||
// fakematch to reverse the weak function ordering
|
||||
CreateObjectFunction function;
|
||||
function = &createObject_JSG_<TAdaptor_fog, JStage::TFog>;
|
||||
function = &createObject_JSG_<TAdaptor_light, JStage::TLight>;
|
||||
function = &createObject_JSG_<TAdaptor_ambientLight, JStage::TAmbientLight>;
|
||||
function = &createObject_JSG_<TAdaptor_camera, JStage::TCamera>;
|
||||
function = &createObject_JSG_<TAdaptor_actor, JStage::TActor>;
|
||||
}
|
||||
|
||||
/* 80275C0C-80275D5C .text create__Q214JStudio_JStage13TCreateObjectFPPQ27JStudio7TObjectRCQ47JStudio3stb4data20TParse_TBlock_object */
|
||||
bool JStudio_JStage::TCreateObject::create(JStudio::TObject**, const JStudio::stb::data::TParse_TBlock_object&) {
|
||||
/* Nonmatching */
|
||||
bool TCreateObject::create(JStudio::TObject** newObject, const JStudio::stb::data::TParse_TBlock_object& data) {
|
||||
JStage::TEObject type;
|
||||
CreateObjectFunction function;
|
||||
switch (data.get()->type) {
|
||||
case 'JACT':
|
||||
function = &createObject_JSG_<TAdaptor_actor, JStage::TActor>;
|
||||
type = JStage::TOBJ_ACTOR;
|
||||
break;
|
||||
case 'JCMR':
|
||||
function = &createObject_JSG_<TAdaptor_camera, JStage::TCamera>;
|
||||
type = JStage::TOBJ_CAMERA;
|
||||
break;
|
||||
case 'JABL':
|
||||
function = &createObject_JSG_<TAdaptor_ambientLight, JStage::TAmbientLight>;
|
||||
type = JStage::TOBJ_AMBIENT;
|
||||
break;
|
||||
case 'JLIT':
|
||||
function = &createObject_JSG_<TAdaptor_light, JStage::TLight>;
|
||||
type = JStage::TOBJ_LIGHT;
|
||||
break;
|
||||
case 'JFOG':
|
||||
function = &createObject_JSG_<TAdaptor_fog, JStage::TFog>;
|
||||
type = JStage::TOBJ_FOG;
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
JStage::TObject* stageObject = find(data, type);
|
||||
if (stageObject == NULL) {
|
||||
return false;
|
||||
}
|
||||
*newObject = function(data, stageObject, mSystem);
|
||||
return true;
|
||||
}
|
||||
|
||||
/* 80275D5C-80275DDC .text find__Q214JStudio_JStage13TCreateObjectFRCQ47JStudio3stb4data20TParse_TBlock_objectQ26JStage8TEObject */
|
||||
void JStudio_JStage::TCreateObject::find(const JStudio::stb::data::TParse_TBlock_object&, JStage::TEObject) {
|
||||
/* Nonmatching */
|
||||
JStage::TObject* TCreateObject::find(const JStudio::stb::data::TParse_TBlock_object& data, JStage::TEObject type) {
|
||||
JStage::TObject* stageObject = (JStage::TObject*)mSystem->JSGFindObject((const char*)data.get_ID(), type);
|
||||
if (stageObject == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
JStage::TEObject foundType = (JStage::TEObject)stageObject->JSGFGetType();
|
||||
if (foundType != type) {
|
||||
return NULL;
|
||||
}
|
||||
return stageObject;
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
template <typename Adaptor, typename Object>
|
||||
JStudio::TObject* createObject_JSG_(const JStudio::stb::data::TParse_TBlock_object& data, JStage::TObject* stageObject,
|
||||
const JStage::TSystem* system)
|
||||
{
|
||||
Object* obj = (Object*)stageObject;
|
||||
Adaptor* adaptor = new Adaptor(system, obj);
|
||||
if (!adaptor) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return doCreateObject(data, adaptor);
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
} // namespace JStudio_JStage
|
||||
|
||||
Reference in New Issue
Block a user