summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLagoLunatic <LagoLunatic@users.noreply.github.com>2024-09-11 14:57:27 -0400
committerLagoLunatic <LagoLunatic@users.noreply.github.com>2024-09-11 14:57:27 -0400
commit9d2ea6dd39951f1295831331a9dd3737a49d4e4d (patch)
tree3bf9e19dd1c1e9dcdea75bd104856c6078d98eed /src
parent580a5eefe526028e2d209f0cfacda6bb01147ffd (diff)
object-camera 99%
Diffstat (limited to 'src')
-rw-r--r--src/JSystem/JAudio/JASSeqParser.cpp14
-rw-r--r--src/JSystem/JMessage/resource.cpp8
-rw-r--r--src/JSystem/JStudio/JStudio_JStage/object-actor.cpp1
-rw-r--r--src/JSystem/JStudio/JStudio_JStage/object-camera.cpp131
4 files changed, 125 insertions, 29 deletions
diff --git a/src/JSystem/JAudio/JASSeqParser.cpp b/src/JSystem/JAudio/JASSeqParser.cpp
index 4ce0e25e..54b49cde 100644
--- a/src/JSystem/JAudio/JASSeqParser.cpp
+++ b/src/JSystem/JAudio/JASSeqParser.cpp
@@ -637,13 +637,13 @@ int JASystem::TSeqParser::cmdPrintf(TTrack* track, u32* args) {
break;
}
- switch (buf[i]) {
- case 'n':
- buf[i] = '\r';
- continue;
- default:
- continue;
- }
+ switch (buf[i]) {
+ case 'n':
+ buf[i] = '\r';
+ continue;
+ default:
+ continue;
+ }
}
if (buf[i] != '%') {
diff --git a/src/JSystem/JMessage/resource.cpp b/src/JSystem/JMessage/resource.cpp
index bc4176aa..8008e9ad 100644
--- a/src/JSystem/JMessage/resource.cpp
+++ b/src/JSystem/JMessage/resource.cpp
@@ -16,11 +16,11 @@ JMessage::TResourceContainer::TResourceContainer() {
/* 8029FD04-8029FD90 .text Get_groupID__Q28JMessage18TResourceContainerFUs */
JMessage::TResource* JMessage::TResourceContainer::Get_groupID(u16 groupID) {
- /* Nonmatching */
- for (iterator iter = begin(); iter != end(); iter++) {
- TResource* res = &(*iter);
+ JGadget::TContainerEnumerator<TResource, 0> enumerator(this);
+ while (enumerator) {
+ const TResource* res = &(*enumerator);
if (res->mInfo.get_groupID() == groupID)
- return res;
+ return (TResource*)res;
}
return NULL;
}
diff --git a/src/JSystem/JStudio/JStudio_JStage/object-actor.cpp b/src/JSystem/JStudio/JStudio_JStage/object-actor.cpp
index c238ed03..e254ae1f 100644
--- a/src/JSystem/JStudio/JStudio_JStage/object-actor.cpp
+++ b/src/JSystem/JStudio/JStudio_JStage/object-actor.cpp
@@ -49,6 +49,7 @@ void TAdaptor_actor::adaptor_do_begin(const JStudio::TObject* object) {
mObject->JSGGetRotation(&sp2C[1]);
mObject->JSGGetScaling(&sp08);
Vec* r29;
+ // TODO: inline
if (!pControl->transformOnGet_isEnabled()) {
r29 = sp2C;
} else {
diff --git a/src/JSystem/JStudio/JStudio_JStage/object-camera.cpp b/src/JSystem/JStudio/JStudio_JStage/object-camera.cpp
index d230d60a..9b967f52 100644
--- a/src/JSystem/JStudio/JStudio_JStage/object-camera.cpp
+++ b/src/JSystem/JStudio/JStudio_JStage/object-camera.cpp
@@ -6,52 +6,147 @@
#include "JSystem/JStudio/JStudio_JStage/object-camera.h"
#include "dolphin/types.h"
+namespace JStudio_JStage {
+
+const TAdaptor_camera::TVVOutput TAdaptor_camera::saoVVOutput_[5] = {
+ TVVOutput(7, &JStage::TCamera::JSGSetViewRoll, &JStage::TCamera::JSGGetViewRoll),
+ TVVOutput(6, &JStage::TCamera::JSGSetProjectionFovy, &JStage::TCamera::JSGGetProjectionFovy),
+ TVVOutput(8, &JStage::TCamera::JSGSetProjectionNear, &JStage::TCamera::JSGGetProjectionNear),
+ TVVOutput(9, &JStage::TCamera::JSGSetProjectionFar, &JStage::TCamera::JSGGetProjectionFar),
+ TVVOutput(-1, NULL, NULL),
+};
+
/* 80277354-802773E8 .text __ct__Q214JStudio_JStage15TAdaptor_cameraFPCQ26JStage7TSystemPQ26JStage7TCamera */
-JStudio_JStage::TAdaptor_camera::TAdaptor_camera(const JStage::TSystem*, JStage::TCamera*) {
- /* Nonmatching */
+TAdaptor_camera::TAdaptor_camera(const JStage::TSystem* system, JStage::TCamera* camera)
+ : mSystem(system)
+ , mObject(camera)
+{
}
/* 802773E8-80277460 .text __dt__Q214JStudio_JStage15TAdaptor_cameraFv */
-JStudio_JStage::TAdaptor_camera::~TAdaptor_camera() {
- /* Nonmatching */
+TAdaptor_camera::~TAdaptor_camera() {
+ adaptor_do_end(NULL);
}
/* 80277460-802774A8 .text adaptor_do_prepare__Q214JStudio_JStage15TAdaptor_cameraFPCQ27JStudio7TObject */
-void JStudio_JStage::TAdaptor_camera::adaptor_do_prepare(const JStudio::TObject*) {
- /* Nonmatching */
+void TAdaptor_camera::adaptor_do_prepare(const JStudio::TObject* object) {
+ for (const TVVOutput* output = saoVVOutput_; output->mValueIndex != -1; output++) {
+ mVariableValues[output->mValueIndex].setOutput(output);
+ }
}
+namespace {
+ struct TTransformed_ {
+ JStudio::TControl::TTransform_position mCurrent;
+ JStudio::TControl::TTransform_position mTarget;
+ };
+
+ inline const TTransformed_* transformOnGet_transform_ifEnabled_(const JStudio::TControl* pControl, const TTransformed_& rSrc, TTransformed_* pDst) {
+ if (!pControl->transformOnGet_isEnabled()) {
+ return &rSrc;
+ } else {
+ pControl->transformOnGet_transform(rSrc.mCurrent, &pDst->mCurrent);
+ pControl->transformOnGet_transform(rSrc.mTarget, &pDst->mTarget);
+ // Fixes codegen, but breaks regalloc:
+ // CMtxP temp = pControl->mTransformOnGet_Matrix;
+ // MTXMultVec(temp, &rSrc.mCurrent.mPosition, &pDst->mCurrent.mPosition);
+ // MTXMultVec(temp, &rSrc.mTarget.mPosition, &pDst->mTarget.mPosition);
+ return pDst;
+ }
+ }
+ inline const TTransformed_* transformOnSet_transform_ifEnabled_(const JStudio::TControl* pControl, const TTransformed_& rSrc, TTransformed_* pDst) {
+ if (!pControl->transformOnSet_isEnabled()) {
+ return &rSrc;
+ } else {
+ pControl->transformOnSet_transform(rSrc.mCurrent, &pDst->mCurrent);
+ pControl->transformOnSet_transform(rSrc.mTarget, &pDst->mTarget);
+ // Fixes codegen, but breaks regalloc:
+ // CMtxP temp = pControl->mTransformOnSet_Matrix;
+ // MTXMultVec(temp, &rSrc.mCurrent.mPosition, &pDst->mCurrent.mPosition);
+ // MTXMultVec(temp, &rSrc.mTarget.mPosition, &pDst->mTarget.mPosition);
+ return pDst;
+ }
+ }
+};
+
/* 802774A8-80277600 .text adaptor_do_begin__Q214JStudio_JStage15TAdaptor_cameraFPCQ27JStudio7TObject */
-void JStudio_JStage::TAdaptor_camera::adaptor_do_begin(const JStudio::TObject*) {
+void TAdaptor_camera::adaptor_do_begin(const JStudio::TObject* object) {
/* Nonmatching */
+ mObject->JSGFEnableFlag(1);
+
+ const JStudio::TControl* pControl = (JStudio::TControl*)object->getControl();
+ TTransformed_ sp20;
+ TTransformed_ sp08;
+ const TTransformed_* r29;
+ mObject->JSGGetViewPosition(&sp20.mCurrent.mPosition);
+ mObject->JSGGetViewTargetPosition(&sp20.mTarget.mPosition);
+ r29 = (TTransformed_*)transformOnGet_transform_ifEnabled_(pControl, sp20, &sp08);
+ adaptor_setVariableValue_Vec(sauVariableValue_3_POSITION_XYZ, r29->mCurrent.mPosition);
+ adaptor_setVariableValue_Vec(sauVariableValue_3_TARGET_POSITION_XYZ, r29->mTarget.mPosition);
+ for (const TVVOutput* output = saoVVOutput_; output->mValueIndex != -1; output++) {
+ mVariableValues[output->mValueIndex].setValue_immediate((mObject->*(output->mGetter))());
+ }
}
/* 80277600-80277654 .text adaptor_do_end__Q214JStudio_JStage15TAdaptor_cameraFPCQ27JStudio7TObject */
-void JStudio_JStage::TAdaptor_camera::adaptor_do_end(const JStudio::TObject*) {
- /* Nonmatching */
+void TAdaptor_camera::adaptor_do_end(const JStudio::TObject* object) {
+ mObject->JSGFDisableFlag(1);
}
/* 80277654-8027771C .text adaptor_do_update__Q214JStudio_JStage15TAdaptor_cameraFPCQ27JStudio7TObjectUl */
-void JStudio_JStage::TAdaptor_camera::adaptor_do_update(const JStudio::TObject*, u32) {
+void TAdaptor_camera::adaptor_do_update(const JStudio::TObject* object, u32 p2) {
/* Nonmatching */
+ const JStudio::TControl* pControl = (JStudio::TControl*)object->getControl();
+ TTransformed_ sp20;
+ TTransformed_ sp08;
+ adaptor_getVariableValue_Vec(&sp20.mCurrent.mPosition, sauVariableValue_3_POSITION_XYZ);
+ adaptor_getVariableValue_Vec(&sp20.mTarget.mPosition, sauVariableValue_3_TARGET_POSITION_XYZ);
+ const TTransformed_* r31 = transformOnSet_transform_ifEnabled_(pControl, sp20, &sp08);
+ mObject->JSGSetViewPosition(r31->mCurrent.mPosition);
+ mObject->JSGSetViewTargetPosition(r31->mTarget.mPosition);
}
/* 8027771C-80277750 .text adaptor_do_data__Q214JStudio_JStage15TAdaptor_cameraFPCQ27JStudio7TObjectPCvUlPCvUl */
-void JStudio_JStage::TAdaptor_camera::adaptor_do_data(const JStudio::TObject*, const void*, u32, const void*, u32) {
- /* Nonmatching */
+void TAdaptor_camera::adaptor_do_data(const JStudio::TObject* object, const void* p2, u32 p3, const void* p4, u32 p5) {
+ TAdaptor_object_::adaptor_data_(mObject, p2, p3, p4, p5);
}
/* 80277750-802777A4 .text adaptor_do_PARENT__Q214JStudio_JStage15TAdaptor_cameraFQ37JStudio4data15TEOperationDataPCvUl */
-void JStudio_JStage::TAdaptor_camera::adaptor_do_PARENT(JStudio::data::TEOperationData, const void*, u32) {
- /* Nonmatching */
+void TAdaptor_camera::adaptor_do_PARENT(JStudio::data::TEOperationData operation, const void* p2, u32 p3) {
+ switch (operation) {
+ case JStudio::data::TEOD_Unknown_18:
+ mF0 = (JStage::TObject*)mSystem->JSGFindObject((const char*)p2, JStage::TOBJ_ACTOR_UNK);
+ break;
+ }
}
/* 802777A4-80277814 .text adaptor_do_PARENT_NODE__Q214JStudio_JStage15TAdaptor_cameraFQ37JStudio4data15TEOperationDataPCvUl */
-void JStudio_JStage::TAdaptor_camera::adaptor_do_PARENT_NODE(JStudio::data::TEOperationData, const void*, u32) {
- /* Nonmatching */
+void TAdaptor_camera::adaptor_do_PARENT_NODE(JStudio::data::TEOperationData operation, const void* p2, u32 p3) {
+ switch (operation) {
+ case JStudio::data::TEOD_Unknown_18:
+ if (mF0) {
+ mF4 = mF0->JSGFindNodeID((const char*)p2);
+ }
+ break;
+ case JStudio::data::TEOD_Unknown_19:
+ mF4 = *(u32*)p2;
+ break;
+ }
}
/* 80277814-80277870 .text adaptor_do_PARENT_ENABLE__Q214JStudio_JStage15TAdaptor_cameraFQ37JStudio4data15TEOperationDataPCvUl */
-void JStudio_JStage::TAdaptor_camera::adaptor_do_PARENT_ENABLE(JStudio::data::TEOperationData, const void*, u32) {
- /* Nonmatching */
+void TAdaptor_camera::adaptor_do_PARENT_ENABLE(JStudio::data::TEOperationData operation, const void* p2, u32 p3) {
+ switch (operation) {
+ case JStudio::data::TEOD_Unknown_02:
+ JStage::TObject* parent = NULL;
+ u32 idx = -1;
+ if (*(u32*)p2 != 0) {
+ parent = mF0;
+ idx = mF4;
+ }
+ mObject->JSGSetParent(parent, idx);
+ break;
+ }
}
+
+} // namespace JStudio_JStage