Reorganize library code into libs/ (#3119)

* Reorganize files into libs/{dolphin,JSystem,PowerPC_EABI_Support,revolution,TRK_MINNOW_DOLPHIN}

* Update configure.py and project.py for new libs structure

* Refactor `#include <dolphin/x.h>` -> `<x.h>`

* Remove `__REVOLUTION_SDK__` forwards from dolphin

* Fix dolphin/ references in revolution

* Wrap `#include <dolphin.h>` in `!__REVOLUTION_SDK__`

* Always build TRK against dolphin headers

* Resolve revolution SDK header resolution issues
This commit is contained in:
Luke Street
2026-03-01 15:35:36 -07:00
committed by GitHub
parent c9a46bd65b
commit 4df8ccc871
1740 changed files with 583 additions and 825 deletions
@@ -0,0 +1,5 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio/ctb.h"
const u32 JStudio::ctb::data::ga4cSignature = 'CTB\0';
+140
View File
@@ -0,0 +1,140 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio/ctb.h"
#include <iterator>
#include <cstring>
#include <algorithm>
JStudio::ctb::TObject::~TObject() {}
JStudio::ctb::TObject_TxyzRy::TObject_TxyzRy(JStudio::ctb::data::TParse_TBlock const& param_0)
: TObject(param_0.get_ID(), param_0.get_IDSize(), param_0.getContent()) {}
int JStudio::ctb::TObject_TxyzRy::getScheme() const {
return 1;
}
JStudio::ctb::TControl::TControl() : pFactory_(NULL) {}
JStudio::ctb::TControl::~TControl() {
JGADGET_ASSERTWARN(94, ocObject_.empty());
}
void JStudio::ctb::TControl::appendObject(JStudio::ctb::TObject* p) {
JUT_ASSERT(106, p!=NULL)
ocObject_.Push_back(p);
}
void JStudio::ctb::TControl::removeObject(JStudio::ctb::TObject* p) {
JUT_ASSERT(113, p!=NULL)
ocObject_.Erase(p);
}
void JStudio::ctb::TControl::destroyObject(JStudio::ctb::TObject* param_0) {
removeObject(param_0);
TFactory *pFactory = getFactory();
JUT_ASSERT(129, pFactory!=NULL);
pFactory->destroy(param_0);
}
void JStudio::ctb::TControl::destroyObject_all() {
while (!ocObject_.empty()) {
destroyObject(&ocObject_.back());
}
}
// NONMATCHING - TPRObject_ID_equal issues
JStudio::ctb::TObject* JStudio::ctb::TControl::getObject(void const* param_0, u32 param_1) {
JGadget::TLinkList<TObject, -12>::iterator begin = ocObject_.begin();
JGadget::TLinkList<TObject, -12>::iterator end = ocObject_.end();
JGadget::TLinkList<TObject, -12>::iterator local_50 = std::find_if(begin, end, object::TPRObject_ID_equal(param_0, param_1));
if ((local_50 != end) != false) {
return &*local_50;
}
return NULL;
}
JStudio::ctb::TObject* JStudio::ctb::TControl::getObject_index(u32 param_0) {
if (param_0 >= ocObject_.size()) {
return 0;
}
JGadget::TLinkList<TObject, -12>::iterator aiStack_14 = ocObject_.begin();
std::advance(aiStack_14, param_0);
return &*aiStack_14;
}
JStudio::ctb::TFactory::~TFactory() {}
JStudio::ctb::TObject* JStudio::ctb::TFactory::create(JStudio::ctb::data::TParse_TBlock const& param_0) {
switch(param_0.get_scheme()) {
case 1:
return new TObject_TxyzRy(param_0);
default:
return NULL;
}
}
void JStudio::ctb::TFactory::destroy(JStudio::ctb::TObject* param_0) {
delete param_0;
}
// NONMATCHING TParse_header_block vtable location
JStudio::ctb::TParse::TParse(JStudio::ctb::TControl* param_0) : pControl_(param_0) {}
JStudio::ctb::TParse::~TParse() {}
bool JStudio::ctb::TParse::parseHeader_next(void const** ppData_inout, u32* puBlock_out, u32 param_3) {
JUT_ASSERT(221, ppData_inout!=NULL);
JUT_ASSERT(222, puBlock_out!=NULL);
void const* pData = *ppData_inout;
JUT_ASSERT(224, pData!=NULL);
data::TParse_THeader aTStack_478(pData);
*ppData_inout = aTStack_478.getContent();
*puBlock_out = aTStack_478.get_blockNumber();
if (memcmp(aTStack_478.get_signature(), &JStudio::ctb::data::ga4cSignature, sizeof(JStudio::ctb::data::ga4cSignature)) != 0) {
return false;
}
if (aTStack_478.get_byteOrder() != 0xfeff) {
return false;
}
u16 version = aTStack_478.get_version();
if (version < 1) {
return false;
}
return version <= 1;
}
bool JStudio::ctb::TParse::parseBlock_next(void const** ppData_inout, u32* puData_out, u32 param_3) {
JUT_ASSERT(260, ppData_inout!=NULL);
JUT_ASSERT(261, puData_out!=NULL);
void const* pData = *ppData_inout;
JUT_ASSERT(263, pData!=NULL);
data::TParse_TBlock aTStack_260(pData);
*ppData_inout = aTStack_260.getNext();
*puData_out = aTStack_260.get_size();
JStudio::ctb::TControl* pControl = getControl();
JUT_ASSERT(269, pControl!=NULL);
if ((param_3 & 0x10) != 0) {
if (pControl->getObject(aTStack_260.get_ID(), aTStack_260.get_IDSize()) != NULL) {
return true;
}
}
if ((param_3 & 0x20) != 0) {
return true;
}
JStudio::ctb::TFactory* pFactory = pControl->getFactory();
if (pFactory == NULL) {
return false;
}
JStudio::ctb::TObject* pTVar6 = pFactory->create(aTStack_260);
if (pTVar6 == NULL) {
if ((param_3 & 0x40) == 0) {
return false;
} else {
return true;
}
}
pControl->appendObject(pTVar6);
return true;
}
@@ -0,0 +1,904 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio/functionvalue.h"
#include "JSystem/JGadget/search.h"
#include "JSystem/JUtility/JUTException.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "JSystem/JGadget/linklist.h"
#include <cmath>
#include <cstdlib>
#include <limits>
namespace JStudio {
namespace {
const ExtrapolateParameter gapfnExtrapolateParameter_[4] = {
functionvalue::extrapolateParameter_raw,
functionvalue::extrapolateParameter_repeat,
functionvalue::extrapolateParameter_turn,
functionvalue::extrapolateParameter_clamp,
};
} // namespace
ExtrapolateParameter TFunctionValue::toFunction_outside(int idx) {
ExtrapolateParameter fallback = NULL;
ExtrapolateParameter result;
result = JGadget::toValueFromIndex<ExtrapolateParameter>(idx, gapfnExtrapolateParameter_, 4,
fallback);
if (result == NULL) {
JUTWarn w;
w << "unknown outside : " << idx;
return gapfnExtrapolateParameter_[0];
}
return result;
}
TFunctionValue::TFunctionValue() {}
TFunctionValue::~TFunctionValue() {}
void TFunctionValueAttribute_refer::refer_initialize() {
clear();
}
static f64 dummy_literal1() {
return 0.0;
}
namespace functionvalue {
f64 interpolateValue_hermite(f64 c0, f64 c1, f64 x, f64 c2, f64 x2, f64 c3, f64 x3) {
f64 a;
f64 b;
f64 c;
f64 d;
a = c0 - c1;
b = a * (1.0 / (x2 - c1)); // (a - b) * 1.0 / (c - d)
c = b - 1.0; // 1.0
d = (3.0 + -2.0 * b) * (b * b); // 3.0 - 2.0 * b
f64 cab = (c * a * b);
f64 coeffx3 = cab * x3;
f64 cca = (c * c * a);
f64 coeffc2 = cca * c2;
return ((1.0 - d) * x + (d * c3)) + coeffc2 + coeffx3;
}
f64 interpolateValue_BSpline_uniform(f64 interpolationFactor, f64 point2, f64 point3, f64 point4, f64 point5) {
f64 inverseInterpolationFactor = (1.0 - interpolationFactor);
f64 inverseInterpolationFactorSquared = inverseInterpolationFactor * inverseInterpolationFactor;
f64 inverseInterpolationFactorCubed = inverseInterpolationFactorSquared * inverseInterpolationFactor;
f64 interpolationFactorSquared = interpolationFactor * interpolationFactor;
f64 interpolationFactorCubed = interpolationFactorSquared * interpolationFactor;
f64 coefficient1 = inverseInterpolationFactorCubed;
f64 blendFactorForPoint3 = (1.0 / 2.0) * interpolationFactorCubed - interpolationFactorSquared + (2.0 / 3.0);
f64 blendFactorForPoint4 =
(1.0 / 2.0) * (interpolationFactor + interpolationFactorSquared - interpolationFactorCubed) + (1.0 / 6.0);
f64 coefficient2 = interpolationFactorCubed;
return ((coefficient1 * point2) + (coefficient2 * point5)) * (1.0 / 6.0) + (blendFactorForPoint3 * point3) +
(blendFactorForPoint4 * point4);
}
f64 interpolateValue_BSpline_nonuniform(f64 interpolationFactor, const f64* controlPoints, const f64* knotVector) {
f64 knot0 = knotVector[0];
f64 knot1 = knotVector[1];
f64 knot2 = knotVector[2];
f64 knot3 = knotVector[3];
f64 knot4 = knotVector[4];
f64 knot5 = knotVector[5];
f64 diff0 = interpolationFactor - knot0;
f64 diff1 = interpolationFactor - knot1;
f64 diff2 = interpolationFactor - knot2;
f64 diff3 = knot3 - interpolationFactor;
f64 diff4 = knot4 - interpolationFactor;
f64 diff5 = knot5 - interpolationFactor;
f64 inverseDeltaKnot32 = 1 / (knot3 - knot2);
f64 blendFactor3 = (diff3 * inverseDeltaKnot32) / (knot3 - knot1);
f64 blendFactor2 = (diff2 * inverseDeltaKnot32) / (knot4 - knot2);
f64 blendFactor1 = (diff3 * blendFactor3) / (knot3 - knot0);
f64 blendFactor4 = ((diff1 * blendFactor3) + (diff4 * blendFactor2)) / (knot4 - knot1);
f64 blendFactor5 = (diff2 * blendFactor2) / (knot5 - knot2);
f64 term1 = diff3 * blendFactor1;
f64 term2 = (diff0 * blendFactor1) + (diff4 * blendFactor4);
f64 term3 = (diff1 * blendFactor4) + (diff5 * blendFactor5);
f64 term4 = diff2 * blendFactor5;
return (term1 * controlPoints[0]) + (term2 * controlPoints[1]) + (term3 * controlPoints[2]) + (term4 * controlPoints[3]);
}
inline f64 interpolateValue_linear(f64 a1, f64 a2, f64 a3, f64 a4, f64 a5) {
return a3 + ((a5 - a3) * (a1 - a2)) / (a4 - a2);
}
inline f64 interpolateValue_linear_1(f64 a1, f64 a2, f64 a3, f64 a4) {
return a3 + (a4 - a3) * (a1 - a2);
}
inline f64 interpolateValue_plateau(f64 a1, f64 a2, f64 a3, f64 a4, f64 a5) {
return interpolateValue_hermite(a1, a2, a3, 0.0, a4, a5, 0.0);
}
f64 extrapolateParameter_turn(f64 param_0, f64 param_1) {
f64 dVar2 = 2.0 * param_1;
f64 dVar1 = extrapolateParameter_repeat(param_0, dVar2);
if (dVar1 >= param_1) {
dVar1 = dVar2 - dVar1;
}
return dVar1;
}
} // namespace functionvalue
void TFunctionValueAttribute_range::range_initialize() {
fBegin_ = NAN;
fEnd_ = fBegin_;
fDifference_ = fBegin_;
range_setProgress(TFunctionValue::PROG_INIT);
range_setAdjust(TFunctionValue::ADJ_INIT);
range_setOutside(TFunctionValue::OUT_INIT);
}
void TFunctionValueAttribute_range::range_prepare() {
TFunctionValue::TEProgress progress = range_getProgress();
switch (progress) {
default:
JUTWarn w;
w << "unknown progress : " << progress;
case 0:
_20 = 0.0;
_28 = 1.0;
break;
case 1:
_20 = 0.0;
_28 = -1.0;
break;
case 2:
_20 = fBegin_;
_28 = -1.0;
break;
case 3:
_20 = fEnd_;
_28 = -1.0;
break;
case 4:
_20 = 0.5 * (fBegin_ + fEnd_);
_28 = -1.0;
break;
}
}
void TFunctionValueAttribute_range::range_set(f64 begin, f64 end) {
fBegin_ = begin;
fEnd_ = end;
fDifference_ = end - begin;
JUT_ASSERT(458, fDifference_>=TValue(0));
}
f64 TFunctionValueAttribute_range::range_getParameter(f64 arg1, f64 arg2, f64 arg3) const {
f64 progress = range_getParameter_progress(arg1);
TFunctionValue::TEAdjust adjust = range_getAdjust();
f64 result;
switch (adjust) {
default:
JUTWarn w;
w << "unknown adjust : " << adjust;
case 0:
result = range_getParameter_outside(progress);
break;
case 1:
result = range_getParameter_outside(progress + fBegin_);
break;
case 2:
result = range_getParameter_outside(progress + fEnd_);
break;
case 3:
result = range_getParameter_outside(progress + 0.5 * (fBegin_ + fEnd_));
break;
case 4:
f64 temp = range_getParameter_outside(progress);
result = arg2 + ((temp - fBegin_) * (arg3 - arg2)) / fDifference_;
break;
}
return result;
}
TFunctionValueAttribute_range::TFunctionValueAttribute_range()
: fBegin_(NAN), fEnd_(fBegin_), fDifference_(fBegin_),
mProgress(TFunctionValue::PROG_INIT), mAdjust(TFunctionValue::ADJ_INIT), _20(fBegin_),
_28(fBegin_), mBegin(TFunctionValue::OUT_INIT), mEnd(TFunctionValue::OUT_INIT) {}
TFunctionValue_composite::TFunctionValue_composite() : pfn_(NULL), data((void*)NULL) {
}
u32 TFunctionValue_composite::getType() const {
return 1;
}
TFunctionValueAttributeSet TFunctionValue_composite::getAttributeSet() {
return TFunctionValueAttributeSet(this, NULL, NULL);
}
void TFunctionValue_composite::initialize() {
refer_initialize();
pfn_ = NULL;
data = TData((void*)NULL);
}
void TFunctionValue_composite::prepare() {
/* empty function */
}
f64 TFunctionValue_composite::getValue(f64 arg1) {
const TFunctionValueAttribute_refer* container = refer_getContainer();
ASSERT(!refer_isReferring(this));
ASSERT(pfn_ != NULL);
return pfn_(arg1, container, data_getData());
}
f64 TFunctionValue_composite::composite_raw(TVector_pointer<TFunctionValue*> const& param_1,
TData const& param_2, f64 param_3) {
u32 index = param_2.get_unsignedInteger();
if (index >= param_1.size()) {
return 0.0;
}
TFunctionValue** p = (TFunctionValue**)param_1.begin();
std::advance(p, index);
JUT_ASSERT(0x247, p!=NULL);
TFunctionValue* piVar4 = *p;
return piVar4->getValue(param_3);
}
f64 TFunctionValue_composite::composite_index(TVector_pointer<TFunctionValue*> const& param_1,
TData const& param_2, f64 param_3) {
s32 size = param_1.size();
if (size <= 1) {
return 0.0;
}
TFunctionValue** local_148 = (TFunctionValue**)param_1.begin();
TFunctionValue* pFront = *local_148;
JUT_ASSERT(599, pFront!=NULL);
TValue fData = pFront->getValue(param_3);
s32 index = floor(fData);
u32 uVar2 = param_2.get_outside();
switch (uVar2) {
case 0:
case 3:
default:
if (index < 0) {
index = 0;
} else if (index >= size - 1) {
index = size - 2;
}
break;
case 1: {
#ifdef __MWERKS__
div_t dt = div(index, size - 1);
#else
div_t dt = div((int)index, (int)size - 1);
#endif
index = dt.rem;
if (index < 0) {
index = size + index;
index--;
}
break;
}
case 2:
if (size - 1 == 1) {
index = 0;
} else {
u32 uVar3 = (u32)(size - 2) * 2;
#ifdef __MWERKS__
div_t dt2 = div(index, uVar3);
#else
div_t dt2 = div((int)index, (int)uVar3);
#endif
index = dt2.rem;
if (index < 0) {
index += uVar3;
}
if (index >= size - 1) {
index = uVar3 - index;
}
}
break;
}
#ifdef __MWERKS__
std::advance_pointer(local_148, index + 1);
#else
std::advance(local_148, index + 1);
#endif
pFront = *local_148;
return pFront->getValue(param_3);
}
// TODO: remove when TContainerEnumerator_const is generic enough
template <typename T>
struct TContainerEnumerator_const_TVector : public JGadget::TEnumerator<const T*> {
inline TContainerEnumerator_const_TVector(JGadget::TVector_pointer<T> const& param_1)
: JGadget::TEnumerator<const T*>(param_1.begin(), param_1.end()) {}
};
f64
TFunctionValue_composite::composite_parameter(TVector_pointer<TFunctionValue*> const& param_1,
TData const& param_2, f64 param_3) {
f64 dVar4 = param_3 - param_2.get_value();
TContainerEnumerator_const_TVector<TFunctionValue*> aTStack_18(param_1);
while (aTStack_18) {
TFunctionValue* const* ppiVar3 = *aTStack_18;
TFunctionValue* piVar3 = *ppiVar3;
dVar4 = piVar3->getValue(dVar4);
}
return dVar4;
}
f64 TFunctionValue_composite::composite_add(TVector_pointer<TFunctionValue*> const& param_1,
TData const& param_2, f64 param_3) {
f64 dVar4 = param_2.get_value();
TContainerEnumerator_const_TVector<TFunctionValue*> aTStack_18(param_1);
while (aTStack_18) {
TFunctionValue* const* p = *aTStack_18;
JUT_ASSERT(0x2a1, p!=NULL);
TFunctionValue* piVar3 = *p;
dVar4 += piVar3->getValue(param_3);
}
return dVar4;
}
f64 TFunctionValue_composite::composite_subtract(TVector_pointer<TFunctionValue*> const& param_1,
TData const& param_2, f64 param_3) {
u32 size = param_1.size();
if (size == 0) {
return 0.0;
}
TContainerEnumerator_const_TVector<TFunctionValue*> aTStack_18(param_1);
TFunctionValue* const* local_148 = *aTStack_18;
TFunctionValue* pFront = *local_148;
JUT_ASSERT(688, pFront!=NULL);
f64 dVar4 = pFront->getValue(param_3);
while (aTStack_18) {
TFunctionValue* const* p = *aTStack_18;
JUT_ASSERT(0x2b5, p!=NULL);
TFunctionValue* piVar3 = *p;
dVar4 -= piVar3->getValue(param_3);
}
dVar4 -= param_2.f32data;
return dVar4;
}
f64 TFunctionValue_composite::composite_multiply(TVector_pointer<TFunctionValue*> const& param_1,
TData const& param_2, f64 param_3) {
f64 dVar4 = param_2.get_value();
TContainerEnumerator_const_TVector<TFunctionValue*> aTStack_18(param_1);
while (aTStack_18) {
TFunctionValue* const* p = *aTStack_18;
JUT_ASSERT(0x2c5, p!=NULL);
TFunctionValue* piVar3 = *p;
dVar4 *= piVar3->getValue(param_3);
}
return dVar4;
}
f64 TFunctionValue_composite::composite_divide(TVector_pointer<TFunctionValue*> const& param_1,
TData const& param_2, f64 param_3) {
u32 size = param_1.size();
if (size == 0) {
return 0.0;
}
TContainerEnumerator_const_TVector<TFunctionValue*> aTStack_18(param_1);
TFunctionValue* const* local_148 = *aTStack_18;
TFunctionValue* pFront = *local_148;
JUT_ASSERT(724, pFront!=NULL);
TValue fData = pFront->getValue(param_3);
while (aTStack_18) {
TFunctionValue* const* p = *aTStack_18;
JUT_ASSERT(0x2d9, p!=NULL);
TFunctionValue* piVar3 = *p;
fData /= piVar3->getValue(param_3);
JGADGET_ASSERTWARN(0x2db, fData!=TValue(0));
}
#if DEBUG
TValue v = param_2.get_value();
JGADGET_ASSERTWARN(0x2df, fData!=TValue(0));
#endif
fData /= param_2.f32data;
return fData;
}
#if PLATFORM_WII || PLATFORM_SHIELD
#define NUMERIC_LIMIT double
#else
#define NUMERIC_LIMIT float
#endif
TFunctionValue_constant::TFunctionValue_constant() : fValue_(std::numeric_limits<NUMERIC_LIMIT>::signaling_NaN()) {}
u32 TFunctionValue_constant::getType() const {
return 2;
}
TFunctionValueAttributeSet TFunctionValue_constant::getAttributeSet() {
return TFunctionValueAttributeSet(NULL, NULL, NULL);
}
void TFunctionValue_constant::initialize() {
fValue_ = NAN;
}
void TFunctionValue_constant::prepare() {
/* empty function */
}
f64 TFunctionValue_constant::getValue(f64 arg1) {
return fValue_;
}
TFunctionValue_transition::TFunctionValue_transition() : _48(NAN), _50(_48) {}
u32 TFunctionValue_transition::getType() const {
return 3;
}
TFunctionValueAttributeSet TFunctionValue_transition::getAttributeSet() {
return TFunctionValueAttributeSet(NULL, this, this);
}
void TFunctionValue_transition::initialize() {
range_initialize();
interpolate_initialize();
_48 = NAN;
_50 = _48;
}
void TFunctionValue_transition::prepare() {
range_prepare();
interpolate_prepare();
}
f64 TFunctionValue_transition::getValue(f64 param_1) {
f64 progress = range_getParameter_progress(param_1);
f64 dVar3 = range_getParameter_outside(progress);
switch (range_getAdjust()) {
default:
if (dVar3 < range_getBegin()) {
return _48;
}
return _50;
case TFunctionValue::ADJ_UNK2:
if (dVar3 < range_getEnd()) {
return _48;
}
return _50;
case TFunctionValue::ADJ_UNK3:
ADJ_UNK3_label:
if (dVar3 < 0.5 * (range_getBegin() + range_getEnd())) {
return _48;
}
return _50;
case TFunctionValue::ADJ_UNK4:
if (dVar3 < range_getBegin()) {
return _48;
}
if (dVar3 >= range_getEnd()) {
return _50;
}
switch (interpolate_get()) {
case 0:
goto ADJ_UNK3_label;
case 1:
case 3:
return _48 + ((dVar3 - range_getBegin()) * data_getDifference()) / range_getDifference();
case 2:
return functionvalue::interpolateValue_plateau(dVar3, range_getBegin(), _48, range_getEnd(), _50);
default:
goto ADJ_UNK3_label;
}
}
}
TFunctionValue_list::TFunctionValue_list() : _44(NULL), uData_(0), _50(NAN), pfnUpdate_(NULL) {}
u32 TFunctionValue_list::getType() const {
return 4;
}
TFunctionValueAttributeSet TFunctionValue_list::getAttributeSet() {
return TFunctionValueAttributeSet(NULL, this, this);
}
void TFunctionValue_list::initialize() {
range_initialize();
interpolate_initialize();
_44 = NULL;
uData_ = 0;
_50 = NAN;
pfnUpdate_ = NULL;
}
void TFunctionValue_list::prepare() {
range_prepare();
interpolate_prepare();
u32 interp = interpolate_get();
switch (interp) {
default:
JUTWarn w;
w << "unknown interpolation : " << interp;
case 0:
pfnUpdate_ = update_INTERPOLATE_NONE_;
break;
case 1:
pfnUpdate_ = update_INTERPOLATE_LINEAR_;
break;
case 2:
pfnUpdate_ = update_INTERPOLATE_PLATEAU_;
break;
case 3:
pfnUpdate_ = update_INTERPOLATE_BSPLINE_dataMore3_;
if (uData_ == 2)
pfnUpdate_ = update_INTERPOLATE_LINEAR_;
break;
}
}
f64 TFunctionValue_list::getValue(f64 param_1) {
f64 dVar9 = range_getParameter_progress(param_1);
u32 iVar7 = uData_ - 1;
TFunctionValue::TEAdjust iVar5 = range_getAdjust();
f64 dVar12 = iVar7;
TIndexData_ local_178;
f64 parOutside;
switch (iVar5) {
case 0:
default:
parOutside = range_getParameter_outside(dVar9);
local_178._0 = parOutside / _50;
break;
case 1:
parOutside = range_getParameter_outside(dVar9 + range_getBegin());
local_178._0 = parOutside / _50;
break;
case 2:
parOutside = range_getParameter_outside(dVar9 + range_getEnd());
local_178._0 = parOutside / _50;
break;
case 3:
parOutside = range_getParameter_outside(dVar9 + 0.5 * (range_getBegin() + range_getEnd()));
local_178._0 = parOutside / _50;
break;
case 4:
parOutside = range_getParameter_outside(dVar9);
local_178._0 = (dVar12 * (parOutside - range_getBegin())) / range_getDifference();
break;
}
if (local_178._0 < 0.0) {
return _44[0];
}
if (local_178._0 >= dVar12) {
return _44[iVar7];
}
local_178._8 = floor(local_178._0);
local_178._10 = local_178._8;
JUT_ASSERT(1063, pfnUpdate_!=NULL);
return pfnUpdate_(*this, local_178);
}
f64 TFunctionValue_list::update_INTERPOLATE_NONE_(const TFunctionValue_list& rThis,
const TIndexData_& data) {
return rThis._44[data._10];
}
f64 TFunctionValue_list::update_INTERPOLATE_LINEAR_(const TFunctionValue_list& rThis,
const TIndexData_& data) {
return functionvalue::interpolateValue_linear_1(data._0, data._8, rThis._44[data._10],
rThis._44[data._10 + 1]);
}
f64 TFunctionValue_list::update_INTERPOLATE_PLATEAU_(const TFunctionValue_list& rThis,
const TIndexData_& data) {
const f32* arr = rThis._44;
return functionvalue::interpolateValue_plateau(data._0, data._8, arr[data._10],
1.0 + data._8, arr[data._10 + 1]);
}
f64 TFunctionValue_list::update_INTERPOLATE_BSPLINE_dataMore3_(
TFunctionValue_list const& rThis, TFunctionValue_list::TIndexData_ const& param_2) {
f64 dVar11 = rThis._44[param_2._10];
f64 dVar10 = rThis._44[param_2._10 + 1];
f64 dVar9;
f64 dVar8;
if (param_2._10 == 0) {
JUT_ASSERT(1119, rThis.uData_>=3);
dVar9 = 2.0 * dVar11 - dVar10;
dVar8 = rThis._44[param_2._10 + 2];
} else {
if (param_2._10 == rThis.uData_ - 2) {
JUT_ASSERT(1125, rThis.uData_>=3);
dVar9 = rThis._44[param_2._10 - 1];
dVar8 = 2.0 * dVar10 - dVar11;
} else {
JUT_ASSERT(1131, rThis.uData_>=3);
dVar9 = rThis._44[param_2._10 - 1];
dVar8 = rThis._44[param_2._10 + 2];
}
}
return functionvalue::interpolateValue_BSpline_uniform(param_2._0 - param_2._8, dVar9, dVar11, dVar10, dVar8);
}
TFunctionValue_list_parameter::TFunctionValue_list_parameter()
: pfData_(NULL), uData_(0), dat1(*this, NULL), dat2(dat1), dat3(dat1), pfnUpdate_(NULL) {}
u32 TFunctionValue_list_parameter::getType() const {
return 5;
}
TFunctionValueAttributeSet TFunctionValue_list_parameter::getAttributeSet() {
return TFunctionValueAttributeSet(NULL, this, this);
}
void TFunctionValue_list_parameter::data_set(const f32* pf, u32 u) {
JUT_ASSERT(1277, (pf != NULL) || (u == 0));
pfData_ = pf;
uData_ = u;
dat1.set(pfData_);
dat2.set(&pfData_[uData_ * 2]);
dat3 = dat1;
#if DEBUG
pfnUpdate_ = NULL;
#endif
}
void TFunctionValue_list_parameter::initialize() {
range_initialize();
interpolate_initialize();
pfData_ = NULL;
uData_ = 0;
TIterator_data_ iter(*this, NULL);
dat1 = iter;
dat2 = dat1;
dat3 = dat1;
pfnUpdate_ = NULL;
}
void TFunctionValue_list_parameter::prepare() {
range_prepare();
interpolate_prepare();
u32 interp = interpolate_get();
switch (interp) {
default:
JUTWarn w;
w << "unknown interpolation : " << interp;
case 0:
pfnUpdate_ = update_INTERPOLATE_NONE_;
break;
case 1:
pfnUpdate_ = update_INTERPOLATE_LINEAR_;
break;
case 2:
pfnUpdate_ = update_INTERPOLATE_PLATEAU_;
break;
case 3:
pfnUpdate_ = update_INTERPOLATE_BSPLINE_dataMore3_;
if (uData_ != 2)
return;
pfnUpdate_ = update_INTERPOLATE_LINEAR_;
break;
}
}
f64 TFunctionValue_list_parameter::getValue(f64 param_0) {
param_0 = range_getParameter(param_0, data_getValue_front(), data_getValue_back());
JUT_ASSERT(1395, pfData_!=NULL)
dat3 = JGadget::findUpperBound_binary_current(dat1, dat2, dat3, param_0);
if (dat3 == dat1) {
return dat3.get()[1];
}
if (dat3 == dat2) {
--dat3;
return dat3.get()[1];
}
const f32* pf = dat3.get();
JUT_ASSERT(1411, (pfData_<=pf-suData_size)&&(pf<pfData_+suData_size*uData_));
JUT_ASSERT(1412, pfnUpdate_!=NULL);
return pfnUpdate_(*this, param_0);
}
f64 TFunctionValue_list_parameter::update_INTERPOLATE_NONE_(
const TFunctionValue_list_parameter& rThis, f64 d) {
return rThis.dat3.get()[-1];
}
f64 TFunctionValue_list_parameter::update_INTERPOLATE_LINEAR_(
const TFunctionValue_list_parameter& rThis, f64 d) {
const f32* a = rThis.dat3.get();
return functionvalue::interpolateValue_linear(d, a[-2], a[-1], a[0], a[1]);
}
f64 TFunctionValue_list_parameter::update_INTERPOLATE_PLATEAU_(
const TFunctionValue_list_parameter& rThis, f64 d) {
const f32* a = rThis.dat3.get();
return functionvalue::interpolateValue_plateau(d, a[-2], a[-1], a[0], a[1]);
}
f64 TFunctionValue_list_parameter::update_INTERPOLATE_BSPLINE_dataMore3_(
TFunctionValue_list_parameter const& rThis, f64 param_2) {
JUT_ASSERT(1457, rThis.uData_>=3)
const f32* pfVar2 = rThis.dat3.get();
f64 local_68[4];
f64 local_48[6];
local_68[1] = pfVar2[-1];
local_68[2] = pfVar2[1];
local_48[2] = pfVar2[-2];
local_48[3] = pfVar2[0];
s32 iVar5 = ((intptr_t)pfVar2 - (intptr_t)rThis.dat1.get()) / 4;
s32 iVar3 = ((intptr_t)rThis.dat2.get() - (intptr_t)pfVar2) / 4;
switch(iVar5) {
case 2:
local_68[0] = 2.0 * local_68[1] - local_68[2];
local_68[3] = pfVar2[3];
local_48[4] = pfVar2[2];
local_48[1] = 2.0 * local_48[2] - local_48[3];
local_48[0] = 2.0 * local_48[2] - local_48[4];
switch (iVar3) {
case 2:
JUT_ASSERT(1481, false);
case 4:
local_48[5] = 2.0 * local_48[4] - local_48[3];
break;
default:
local_48[5] = pfVar2[4];
break;
}
break;
case 4:
local_68[0] = pfVar2[-3];
local_48[1] = pfVar2[-4];
local_48[0] = 2.0 * local_48[1] - local_48[2];
switch (iVar3)
{
case 2:
local_68[3] = 2.0 * local_68[2] - local_68[1];
local_48[4] = 2.0 * local_48[3] - local_48[2];
local_48[5] = 2.0 * local_48[3] - local_48[1];
break;
case 4:
local_68[3] = pfVar2[3];
local_48[4] = pfVar2[2];
local_48[5] = 2.0 * local_48[4] - local_48[3];
break;
default:
local_68[3] = pfVar2[3];
local_48[4] = pfVar2[2];
local_48[5] = pfVar2[4];
}
break;
default:
local_68[0] = pfVar2[-3];
local_48[1] = pfVar2[-4];
local_48[0] = pfVar2[-6];
switch (iVar3) {
case 2:
local_68[3] = 2.0 * local_68[2] - local_68[1];
local_48[4] = 2.0 * local_48[3] - local_48[2];
local_48[5] = 2.0 * local_48[3] - local_48[1];
break;
case 4:
local_68[3] = pfVar2[3];
local_48[4] = pfVar2[2];
local_48[5] = 2.0 * local_48[4] - local_48[3];
break;
default:
local_68[3] = pfVar2[3];
local_48[4] = pfVar2[2];
local_48[5] = pfVar2[4];
break;
}
break;
}
return functionvalue::interpolateValue_BSpline_nonuniform(param_2, local_68, local_48);
}
TFunctionValue_hermite::TFunctionValue_hermite()
: pfData_(NULL), u_(0), uSize_(0), dat1(*this, NULL), dat2(dat1), dat3(dat1) {}
u32 JStudio::TFunctionValue_hermite::getType() const {
return 6;
}
TFunctionValueAttributeSet TFunctionValue_hermite::getAttributeSet() {
return TFunctionValueAttributeSet(NULL, this, NULL);
}
void TFunctionValue_hermite::data_set(const f32* pf, u32 u, u32 uSize) {
JUT_ASSERT(1676, (pf != NULL) || (u == 0));
JUT_ASSERT(1677, (uSize == 3) || (uSize == 4));
pfData_ = pf;
u_ = u;
uSize_ = uSize;
dat1.set(pfData_, uSize_);
dat2.set(&pfData_[u_ * uSize_], uSize_);
dat3 = dat1;
}
void TFunctionValue_hermite::initialize() {
range_initialize();
pfData_ = NULL;
u_ = 0;
uSize_ = 0;
dat1 = TIterator_data_(*this, NULL);
dat2 = dat1;
dat3 = dat1;
}
void TFunctionValue_hermite::prepare() {
range_prepare();
}
f64 TFunctionValue_hermite::getValue(f64 param_0) {
param_0 = range_getParameter(param_0, data_getValue_front(), data_getValue_back());
JUT_ASSERT(1716, pfData_!=NULL)
dat3 = JGadget::findUpperBound_binary_current(dat1, dat2, dat3, param_0);
if (dat3 == dat1) {
return dat3.get()[1];
}
if (dat3 == dat2) {
--dat3;
return dat3.get()[1];
}
const f32* pfVar5 = dat3.get();
const f32* pfVar7 = pfVar5 - uSize_;
return functionvalue::interpolateValue_hermite(
param_0, pfVar7[0], pfVar7[1],
pfVar7[uSize_ - 1], pfVar5[0],
pfVar5[1], pfVar5[2]);
}
} // namespace JStudio
@@ -0,0 +1,18 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio/fvb-data-parse.h"
void JStudio::fvb::data::TParse_TParagraph::getData(TParse_TParagraph::TData* pData) const
{
JUT_ASSERT(24, pData!=NULL);
const void *ptr = getRaw();
ptr = JGadget::binary::parseVariableUInt_16_32_following(ptr, (u32*)pData, (u32*)&pData->u32Type, NULL);
u32 t = (u32)pData->u32Size;
if (!t) {
pData->pContent = NULL;
pData->next = (const u16*)ptr;
} else {
pData->pContent = (const u16*)ptr;
pData->next = (u8*)ptr + JGadget::binary::align_roundUp(t, 4);
}
}
@@ -0,0 +1,5 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio/fvb-data.h"
const char JStudio::fvb::data::ga4cSignature[4] = "FVB";
+460
View File
@@ -0,0 +1,460 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio/fvb.h"
#include "JSystem/JUtility/JUTException.h"
#include <cstring>
namespace JStudio {
namespace fvb {
TObject::~TObject() {
JGADGET_ASSERTWARN(26, pfv_!=NULL);
}
void TObject::prepare(data::TParse_TBlock const& rBlock, TControl* pControl) {
JUT_ASSERT(35, pfv_!=NULL);
JUT_ASSERT(36, pControl!=NULL);
TFunctionValueAttributeSet set = pfv_->getAttributeSet();
const void* pNext = (const void*)rBlock.getNext();
const void* pData = (const void*)rBlock.getContent();
while (pData < pNext) {
data::TParse_TParagraph para(pData);
data::TParse_TParagraph::TData dat;
para.getData(&dat);
u32 u32Type = dat.u32Type;
u32 u32Size = dat.u32Size;
const void* pContent = dat.pContent;
switch (u32Type) {
case 0:
goto end;
case 1:
prepare_data_(dat, pControl);
break;
case 0x10: {
JGADGET_ASSERTWARN(61, u32Size>=4);
JUT_ASSERT(62, pContent!=NULL);
TFunctionValueAttribute_refer* pfvaRefer = set.refer_get();
JGADGET_ASSERTWARN(64, pfvaRefer!=NULL);
if (pfvaRefer == NULL) {
JGADGET_WARNMSG(67, "invalid paragraph");
break;
}
JGadget::TVector_pointer<TFunctionValue*>& rCnt = pfvaRefer->refer_referContainer();
u8* content = (u8*)pContent;
u32 i = *(u32*)content;
u8* ptr = content + 4;
for (; i != 0; i--) {
u32 size = *(u32*)ptr;
TObject* pObject = pControl->getObject(ptr + 4, size);
if (pObject != NULL) {
TFunctionValue* const rfv = pObject->referFunctionValue();
TFunctionValue* const* pRfv = &rfv;
rCnt.push_back(*pRfv);
} else {
JGADGET_WARNMSG(85, "object not found by ID");
}
ptr += align_roundUp(size, 4) + 4;
}
} break;
case 0x11: {
JGADGET_ASSERTWARN(93, u32Size>=4);
JUT_ASSERT(94, pContent!=NULL);
TFunctionValueAttribute_refer* pfvaRefer = set.refer_get();
JGADGET_ASSERTWARN(96, pfvaRefer!=NULL);
if (pfvaRefer == NULL) {
JGADGET_WARNMSG(99, "invalid paragraph");
break;
}
JGadget::TVector_pointer<TFunctionValue*>& rCnt = pfvaRefer->refer_referContainer();
u8* ptr = (u8*)pContent;
u32 i = *(u32*)ptr;
for (; ptr += 4, i != 0; i--) {
u32 index = *(u32*)ptr;
TObject* pObject = pControl->getObject_index(index);
if (pObject != NULL) {
TFunctionValue* const rfv = pObject->referFunctionValue();
TFunctionValue* const* pRfv = &rfv;
rCnt.push_back(*pRfv);
} else {
JGADGET_WARNMSG(114, "object not found by index : " << index);
}
}
} break;
case 0x12: {
JGADGET_ASSERTWARN(121, u32Size==8);
JUT_ASSERT(122, pContent!=NULL);
TFunctionValueAttribute_range* pfvaRange = set.range_get();
JGADGET_ASSERTWARN(124, pfvaRange!=NULL);
if (pfvaRange == NULL) {
JGADGET_WARNMSG(127, "invalid paragraph");
break;
}
f32* arr = (f32*)pContent;
pfvaRange->range_set(arr[0], arr[1]);
} break;
case 0x13: {
JGADGET_ASSERTWARN(138, u32Size==4);
JUT_ASSERT(139, pContent!=NULL);
TFunctionValueAttribute_range* pfvaRange = set.range_get();
JGADGET_ASSERTWARN(141, pfvaRange!=NULL);
if (pfvaRange == NULL) {
JGADGET_WARNMSG(144, "invalid paragraph");
break;
}
TFunctionValue::TEProgress prog = *(TFunctionValue::TEProgress*)pContent;
pfvaRange->range_setProgress(prog);
} break;
case 0x14: {
JGADGET_ASSERTWARN(156, u32Size==4);
JUT_ASSERT(157, pContent!=NULL);
TFunctionValueAttribute_range* pfvaRange = set.range_get();
JGADGET_ASSERTWARN(159, pfvaRange!=NULL);
if (pfvaRange == NULL) {
JGADGET_WARNMSG(162, "invalid paragraph");
break;
}
TFunctionValue::TEAdjust adjust = *(TFunctionValue::TEAdjust*)pContent;
pfvaRange->range_setAdjust(adjust);
} break;
case 0x15: {
JGADGET_ASSERTWARN(174, u32Size==4);
JUT_ASSERT(175, pContent!=NULL);
TFunctionValueAttribute_range* pfvaRange = set.range_get();
JGADGET_ASSERTWARN(177, pfvaRange!=NULL);
if (pfvaRange == NULL) {
JGADGET_WARNMSG(180, "invalid paragraph");
break;
}
u16* out = (u16*)pContent;
pfvaRange->range_setOutside((TFunctionValue::TEOutside)out[0],
(TFunctionValue::TEOutside)out[1]);
} break;
case 0x16: {
JGADGET_ASSERTWARN(193, u32Size==4);
JUT_ASSERT(194, pContent!=NULL);
TFunctionValueAttribute_interpolate* pfvaInterpolate = set.interpolate_get();
JGADGET_ASSERTWARN(197, pfvaInterpolate!=NULL);
if (pfvaInterpolate == NULL) {
JGADGET_WARNMSG(200, "invalid paragraph");
break;
}
TFunctionValue::TEInterpolate interp = *(TFunctionValue::TEInterpolate*)pContent;
pfvaInterpolate->interpolate_set(interp);
} break;
default:
JGADGET_WARNMSG(211, "unknown paragraph : " << u32Type);
}
pData = dat.next;
JUT_ASSERT(214, pData!=NULL);
}
end:
JGADGET_ASSERTWARN(216, pData==pNext);
pfv_->prepare();
}
namespace {
TFunctionValue_composite::TData getCompositeData_raw_(const void* arg1) {
return TFunctionValue_composite::TData(*(const void**)arg1);
}
TFunctionValue_composite::TData getCompositeData_index_(const void* arg1) {
return TFunctionValue_composite::TData(*(u32*)arg1);
}
TFunctionValue_composite::TData getCompositeData_parameter_(const void* arg1) {
return TFunctionValue_composite::TData(*(f32*)arg1);
}
TFunctionValue_composite::TData getCompositeData_add_(const void* arg1) {
return TFunctionValue_composite::TData(*(f32*)arg1);
}
TFunctionValue_composite::TData getCompositeData_subtract_(const void* arg1) {
return TFunctionValue_composite::TData(*(f32*)arg1);
}
TFunctionValue_composite::TData getCompositeData_multiply_(const void* arg1) {
return TFunctionValue_composite::TData(*(f32*)arg1);
}
TFunctionValue_composite::TData getCompositeData_divide_(const void* arg1) {
return TFunctionValue_composite::TData(*(f32*)arg1);
}
const data::CompositeOperation saCompositeOperation_[8] = {
{NULL, NULL},
{&TFunctionValue_composite::composite_raw, &getCompositeData_raw_},
{&TFunctionValue_composite::composite_index, &getCompositeData_index_},
{&TFunctionValue_composite::composite_parameter, &getCompositeData_parameter_},
{&TFunctionValue_composite::composite_add, &getCompositeData_add_},
{&TFunctionValue_composite::composite_subtract, &getCompositeData_subtract_},
{&TFunctionValue_composite::composite_multiply, &getCompositeData_multiply_},
{&TFunctionValue_composite::composite_divide, &getCompositeData_divide_},
};
static const data::CompositeOperation* getCompositeOperation_(data::TEComposite comp) {
return &saCompositeOperation_[comp];
}
} // namespace
TObject_composite::TObject_composite(const data::TParse_TBlock& block) : TObject(block, &fnValue) {}
void TObject_composite::prepare_data_(const data::TParse_TParagraph::TData& rData,
TControl* control) {
JUT_ASSERT(306, rData.u32Type==data::PARAGRAPH_DATA);
u32 u32Size = rData.u32Size;
struct unknown {
data::TEComposite composite_type;
u32 data;
};
const unknown* pContent = static_cast<const unknown*>(rData.pContent);
JGADGET_ASSERTWARN(310, u32Size== 8);
JUT_ASSERT(311, pContent!=NULL);
data::TEComposite type = pContent->composite_type;
const data::CompositeOperation* op = getCompositeOperation_(type);
data::CompositeDataFunc pfn = op->getCompositeData;
JUT_ASSERT(316, pfn!=NULL);
fnValue.data_set(op->composite, pfn(&pContent->data));
}
TObject_constant::TObject_constant(data::TParse_TBlock const& param_0)
: TObject(param_0, &fnValue) {}
void TObject_constant::prepare_data_(const data::TParse_TParagraph::TData& rData,
TControl* control) {
JUT_ASSERT(337, rData.u32Type==data::PARAGRAPH_DATA);
u32 u32Size = rData.u32Size;
const f32* pContent = static_cast<const f32*>(rData.pContent);
JGADGET_ASSERTWARN(341, u32Size==4);
JUT_ASSERT(342, pContent!=NULL);
f32 val = pContent[0];
fnValue.data_set(val);
}
TObject_transition::TObject_transition(data::TParse_TBlock const& param_0)
: TObject(param_0, &fnValue) {}
void TObject_transition::prepare_data_(const data::TParse_TParagraph::TData& rData,
TControl* control) {
ASSERT(rData.u32Type == data::PARAGRAPH_DATA);
u32 u32Size = rData.u32Size;
JGADGET_ASSERTWARN(0, u32Size == 8);
const f32* pContent = static_cast<const f32*>(rData.pContent);
ASSERT(pContent != NULL);
fnValue.data_set(pContent[0], pContent[1]);
}
TObject_list::TObject_list(data::TParse_TBlock const& param_0) : TObject(param_0, &fnValue) {}
void TObject_list::prepare_data_(const data::TParse_TParagraph::TData& rData, TControl* control) {
ASSERT(rData.u32Type == data::PARAGRAPH_DATA);
u32 u32Size = rData.u32Size;
JGADGET_ASSERTWARN(0, u32Size >= 8);
const ListData* pContent = static_cast<const ListData*>(rData.pContent);
ASSERT(pContent != NULL);
fnValue.data_setInterval(pContent->_0);
fnValue.data_set(pContent->_8, pContent->_4);
}
TObject_list_parameter::TObject_list_parameter(data::TParse_TBlock const& param_0)
: TObject(param_0, &fnValue) {}
void TObject_list_parameter::prepare_data_(const data::TParse_TParagraph::TData& rData,
TControl* control) {
ASSERT(rData.u32Type == data::PARAGRAPH_DATA);
u32 u32Size = rData.u32Size;
JGADGET_ASSERTWARN(0, u32Size >= 8);
const ListData* pContent = static_cast<const ListData*>(rData.pContent);
ASSERT(pContent != NULL);
fnValue.data_set(pContent->_4, pContent->_0);
}
TObject_hermite::TObject_hermite(data::TParse_TBlock const& param_0) : TObject(param_0, &fnValue) {}
void TObject_hermite::prepare_data_(const data::TParse_TParagraph::TData& rData,
TControl* control) {
ASSERT(rData.u32Type == data::PARAGRAPH_DATA);
u32 u32Size = rData.u32Size;
JGADGET_ASSERTWARN(0, u32Size >= 8);
const ListData* pContent = static_cast<const ListData*>(rData.pContent);
ASSERT(pContent != NULL);
fnValue.data_set(pContent->_4, pContent->_0 & 0xFFFFFFF, pContent->_0 >> 0x1C);
}
TControl::TControl() : pFactory(NULL) {}
TControl::~TControl() {
JGADGET_ASSERTWARN(0, ocObject_.empty());
}
void TControl::appendObject(TObject* object) {
ocObject_.Push_back(object);
}
void TControl::removeObject(TObject* object) {
ocObject_.Erase(object);
}
void TControl::destroyObject(TObject* object) {
removeObject(object);
getFactory()->destroy(object);
}
void TControl::destroyObject_all() {
while (!ocObject_.empty()) {
destroyObject(&ocObject_.back());
}
}
TObject* TControl::getObject(void const* id, u32 idSize) {
typedef JGadget::TLinkList<TObject, -12>::iterator iterator;
iterator begin = ocObject_.begin();
iterator end = ocObject_.end();
iterator it = std::find_if(begin, end, object::TPRObject_ID_equal(id, idSize));
return it != end ? &*it : NULL;
}
TObject* TControl::getObject_index(u32 index) {
if (index >= ocObject_.size()) {
return NULL;
}
JGadget::TLinkList<TObject, -12>::iterator it = ocObject_.begin();
std::advance(it, index);
return &*it;
}
TFactory::~TFactory() {}
TObject* TFactory::create(data::TParse_TBlock const& rBlock) {
switch (rBlock.get_type()) {
case 1:
return new TObject_composite(rBlock);
case 2:
return new TObject_constant(rBlock);
case 3:
return new TObject_transition(rBlock);
case 4:
return new TObject_list(rBlock);
case 5:
return new TObject_list_parameter(rBlock);
case 6:
return new TObject_hermite(rBlock);
default:
JUTWarn w;
w << "unknown type : ";
return NULL;
}
}
void TFactory::destroy(TObject* pObject) {
delete pObject;
}
TParse::TParse(TControl* pControl) : pControl_(pControl) {
ASSERT(pControl_ != NULL);
}
TParse::~TParse() {}
bool TParse::parseHeader_next(void const** ppData_inout, u32* puBlock_out, u32 flags) {
ASSERT(ppData_inout != NULL);
ASSERT(puBlock_out != NULL);
const void* pData = *ppData_inout;
ASSERT(pData != NULL);
const data::TParse_THeader header(pData);
*ppData_inout = header.getContent();
*puBlock_out = header.get_blockNumber();
if (memcmp(header.get_signature(), &data::ga4cSignature, 4) != 0) {
JUTWarn w;
w << "unknown signature";
return false;
}
if (header.get_byteOrder() != 0xFEFF) {
JUTWarn w;
w << "illegal byte-order";
return false;
}
u16 version = header.get_version();
if (version < 2) {
JUTWarn w;
w << "obselete version : " << (s32)0;
return false;
} else if (version > 0x100) {
JUTWarn w;
w << "unknown version : " << version;
return false;
}
return true;
}
bool TParse::parseBlock_next(void const** ppData_inout, u32* puData_out, u32 flags) {
ASSERT(ppData_inout != NULL);
ASSERT(puData_out != NULL);
const void* pData = *ppData_inout;
ASSERT(pData != NULL);
data::TParse_TBlock blk(pData);
*ppData_inout = blk.getNext();
*puData_out = blk.get_size();
TControl* pControl = getControl();
ASSERT(pControl != NULL);
if (flags & 0x10) {
if (pControl->getObject(blk.get_ID(), blk.get_IDSize()) != NULL)
return 1;
}
if (flags & 0x20) {
return 1;
}
TFactory* pFactory = pControl->getFactory();
if (pFactory == NULL) {
JUTWarn w;
w << "factory not specified";
return 0;
}
TObject* pObject = pFactory->create(blk);
if (pObject == NULL) {
JUTWarn w;
w << "can't create function-value";
if (flags & 0x40) {
return 1;
}
return 0;
}
pObject->prepare(blk, pControl);
pControl->appendObject(pObject);
return 1;
}
} // namespace fvb
} // namespace JStudio
@@ -0,0 +1,194 @@
//
// jstudio-control
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio/jstudio-control.h"
#include "JSystem/JStudio/JStudio/jstudio-math.h"
#include "JSystem/JStudio/JStudio/jstudio-data.h"
#include <cstring>
JStudio::TControl::TControl() {
mTransformOnSet = false;
mTransformOnGet = false;
Vec aVStack_20 = {0.0f,0.0f,0.0f};
transform_setOrigin_TxyzRy(aVStack_20, 0.0f);
}
JStudio::TControl::~TControl() {}
void JStudio::TControl::setFactory(JStudio::TFactory* factory) {
fvb::TFactory* fvbFactory = NULL;
ctb::TFactory* ctbFactory = NULL;
if (factory != NULL) {
fvbFactory = &factory->fvb_Factory;
ctbFactory = &factory->ctb_Factory;
}
stb::TControl::setFactory(factory);
fvb_Control.setFactory(fvbFactory);
ctb_Control.setFactory(ctbFactory);
}
int JStudio::TControl::transformOnSet_setOrigin_TxyzRy(Vec const& param_0, f32 param_1) {
field_0x8c = param_0;
mTransformOnSet_RotationY = param_1;
JStudio::math::getTransformation_RyT(mTransformOnSet_Matrix, param_0, param_1);
return 1;
}
int JStudio::TControl::transformOnGet_setOrigin_TxyzRy(Vec const& param_0, f32 param_1) {
field_0x98 = param_0;
mTransformOnGet_RotationY = param_1;
Mtx afStack_48;
MTXTrans(afStack_48, -param_0.x, -param_0.y, -param_0.z);
math::rotate_y(mTransformOnGet_Matrix, afStack_48, -param_1);
return 1;
}
int JStudio::TControl::transform_setOrigin_ctb(JStudio::ctb::TObject const& param_0) {
switch (param_0.getScheme()) {
case 1: {
const f32* pfVar4 = (const f32*)param_0.getData();
Vec local_144 = {0.0f, 0.0f, 0.0f};
local_144.x = pfVar4[0];
local_144.y = pfVar4[1];
local_144.z = pfVar4[2];
transform_setOrigin_TxyzRy(local_144, pfVar4[3]);
break;
}
default:
return 0;
}
return 1;
}
bool JStudio::TControl::transform_setOrigin_ctb_index(u32 index) {
ctb::TObject* object = ctb_getObject_index(index);
if (object == NULL) {
return false;
}
transform_setOrigin_ctb(*object);
return true;
}
JStudio::TCreateObject::~TCreateObject() {}
JStudio::TFactory::~TFactory() {}
void JStudio::TFactory::appendCreateObject(JStudio::TCreateObject* param_0) {
mList.Push_back(param_0);
}
JStudio::TObject* JStudio::TFactory::create(JStudio::stb::data::TParse_TBlock_object const& rParse) {
JGadget::TContainerEnumerator<JGadget::TLinkList<TCreateObject, -4> > aTStack_368(mList);
while(aTStack_368) {
TCreateObject& piVar1 = *aTStack_368;
JStudio::TObject* obj;
if (piVar1.create(&obj, rParse)) {
return obj;
}
}
#if DEBUG
u32 type = rParse.get_type();
char a5c[8];
stb::data::toString_block(a5c, type);
const char* szID = (const char*)rParse.get_ID();
JGADGET_ASSERTWARN(0x108, rParse.get_IDSize()>0);
JGADGET_ASSERTWARN(0x109, szID[rParse.get_IDSize()-1]=='\\0');
JGADGET_WARNMSG3(0x10c, "ID not found\n demo object : ", szID, "\n type : ", a5c);
#endif
return NULL;
}
JStudio::TParse::TParse(JStudio::TControl* param_0) : stb::TParse(param_0) {
}
JStudio::TParse::~TParse() {}
bool JStudio::TParse::parseHeader(JStudio::stb::data::TParse_THeader const& param_0,
u32 param_1) {
const JStudio::stb::data::THeader::Target& target = param_0.get_target();
if (memcmp(target.name, JStudio::data::ga8cSignature, sizeof(JStudio::data::ga8cSignature)) != 0) {
return false;
}
if (target.target_version < 2) {
return false;
}
if (target.target_version > 6) {
return false;
}
JStudio::TControl* pControl = getControl();
JUT_ASSERT(322, pControl!=NULL);
if ((param_1 & 0x100) == 0) {
Vec local_468 = {0.0f, 0.0f, 0.0f};
pControl->transform_setOrigin_TxyzRy(local_468, 0.0f);
pControl->transform_enable(false);
}
return true;
}
bool JStudio::TParse::parseBlock_block(JStudio::stb::data::TParse_TBlock const& param_0,
u32 param_1) {
switch(param_0.get_type()) {
case 'JFVB':
return parseBlock_block_fvb_(param_0, param_1);
case 'JCTB':
return parseBlock_block_ctb_(param_0, param_1);
default:
return stb::TParse::parseBlock_block(param_0, param_1);
}
}
bool JStudio::TParse::parseBlock_block_fvb_(JStudio::stb::data::TParse_TBlock const& param_0,
u32 param_1) {
TControl* pControl = getControl();
JUT_ASSERT(361, pControl!=NULL);
const void* pContent = param_0.getContent();
JUT_ASSERT(363, pContent!=NULL);
u32 uVar4 = param_1 & 0xf;
if ((param_1 & 0x10) != 0) {
uVar4 |= 0x10;
}
if ((param_1 & 0x20) != 0) {
uVar4 |= 0x20;
}
if ((param_1 & 0x40) != 0) {
uVar4 |= 0x40;
}
fvb::TParse aTStack_30(&pControl->fvb_Control);
if (!aTStack_30.parse(pContent, uVar4)) {
return false;
}
return true;
}
bool JStudio::TParse::parseBlock_block_ctb_(JStudio::stb::data::TParse_TBlock const& param_0,
u32 param_1) {
TControl* pControl = getControl();
JUT_ASSERT(386, pControl!=NULL);
const void* pContent = param_0.getContent();
JUT_ASSERT(388, pContent!=NULL);
u32 uVar4 = param_1 & 0xf;
if ((param_1 & 0x10) != 0) {
uVar4 |= 0x10;
}
if ((param_1 & 0x20) != 0) {
uVar4 |= 0x20;
}
if ((param_1 & 0x40) != 0) {
uVar4 |= 0x40;
}
ctb::TParse aTStack_30(&pControl->ctb_Control);
if (!aTStack_30.parse(pContent, uVar4)) {
return false;
}
if ((param_1 & 0x200) == 0) {
if (pControl->transform_setOrigin_ctb_index(0) == 0) {
return 0;
}
pControl->transform_enable(true);
}
return true;
}
@@ -0,0 +1,5 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio/jstudio-data.h"
const char JStudio::data::ga8cSignature[8] = "jstudio";
@@ -0,0 +1,69 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio/jstudio-math.h"
#include "JSystem/JGeometry.h"
#include "JSystem/TPosition3.h"
#include <cmath>
void JStudio::math::getRotation_xyz(MtxP param_1, f32 x, f32 y, f32 z) {
f32 cosx = cosf(DEG_TO_RAD(x));
f32 sinx = sinf(DEG_TO_RAD(x));
f32 cosy = cosf(DEG_TO_RAD(y));
f32 siny = sinf(DEG_TO_RAD(y));
f32 cosz = cosf(DEG_TO_RAD(z));
f32 sinz = sinf(DEG_TO_RAD(z));
f32 cosxcosz = cosx * cosz;
f32 cosxsinz = cosx * sinz;
f32 sinxcosz = sinx * cosz;
f32 sinxsinz = sinx * sinz;
param_1[0][0] = cosy * cosz;
param_1[1][0] = cosy * sinz;
param_1[2][0] = -siny;
param_1[2][1] = sinx * cosy;
param_1[2][2] = cosx * cosy;
param_1[0][1] = ((sinxcosz * siny) - cosxsinz);
param_1[0][2] = (sinxsinz + (cosxcosz * siny));
param_1[1][1] = (cosxcosz + (sinxsinz * siny));
param_1[1][2] = (((cosxsinz) * siny) - sinxcosz);
param_1[0][3] = 0.0f;
param_1[1][3] = 0.0f;
param_1[2][3] = 0.0f;
}
void JStudio::math::getTransformation_SRxyzT(MtxP param_1, Vec const& param_2, Vec const& param_3,
Vec const& param_4) {
Mtx afStack_40;
MTXScale(afStack_40, param_2.x, param_2.y, param_2.z);
Mtx amStack_70;
rotate_xyz(afStack_40, amStack_70, param_3);
MTXTransApply(amStack_70, param_1, param_4.x, param_4.y, param_4.z);
}
void JStudio::math::getFromTransformation_SRxyzT(Vec* param_1, Vec* param_2, Vec* param_3,
CMtxP param_4) {
getFromTransformation_S(param_1, param_4);
getFromTransformation_T(param_3, param_4);
JGeometry::TRotation3<JGeometry::SMatrix33C<double> > aTStack_88;
JGeometry::TVec3<double> local_a0;
double dVar9 = 0.0;
double dVar8 = 0.0;
double dVar7 = 0.0;
if (0.0f != param_1->x) {
dVar9 = 1.0 / param_1->x;
}
if (0.0f != param_1->y) {
dVar8 = 1.0 / param_1->y;
}
if (0.0f != param_1->z) {
dVar7 = 1.0 / param_1->z;
}
aTStack_88.set(param_4[0][0] * dVar9, param_4[0][1] * dVar8, param_4[0][2] * dVar7,
param_4[1][0] * dVar9, param_4[1][1] * dVar8, param_4[1][2] * dVar7,
param_4[2][0] * dVar9, param_4[2][1] * dVar8, param_4[2][2] * dVar7);
aTStack_88.getEulerXYZ(&local_a0);
local_a0 *= 180.0 / m_PI_D;
param_2->x = local_a0.x;
param_2->y = local_a0.y;
param_2->z = local_a0.z;
}
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,55 @@
//
// object-id
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio/object-id.h"
#include "JSystem/JUtility/JUTAssert.h"
bool JStudio::object::TIDData::isEqual(JStudio::object::TIDData const& a,
JStudio::object::TIDData const& b) {
u32 aSize = a.getIDSize();
u32 bSize = b.getIDSize();
if (aSize != bSize) {
return false;
}
const u8* aStr32 = a.getID();
const u8* bStr32 = b.getID();
if (aStr32 == bStr32) {
// they point to the same id
return true;
}
u32 u = aSize;
for (; u >= 4; u -= 4, aStr32 += 4, bStr32 += 4) {
if (*(u32*)aStr32 != *(u32*)bStr32) {
return false;
}
}
const u8* aStrBytes = aStr32;
const u8* bStrBytes = bStr32;
JUT_ASSERT(46, u<4);
switch (u) {
case 3:
if (*aStrBytes != *bStrBytes) {
return false;
}
aStrBytes++;
bStrBytes++;
case 2:
if (*aStrBytes != *bStrBytes) {
return false;
}
aStrBytes++;
bStrBytes++;
case 1:
if (*aStrBytes != *bStrBytes) {
return false;
}
}
return true;
}
@@ -0,0 +1,84 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio/stb-data-parse.h"
#include "JSystem/JUtility/JUTAssert.h"
#include <os.h>
#include <stdint.h>
namespace JStudio {
namespace stb {
namespace data {
void TParse_TSequence::getData(TData* pData) const {
JUT_ASSERT(50, pData!=NULL);
pData->content = NULL;
pData->next = NULL;
u32 head = get_head();
u8 type = head >> 24;
u32 param = head & 0xffffff;
pData->type = type & 0xff;
pData->param = param;
if (type == 0)
return;
const void* next = (const void*)((intptr_t)getRaw() + 4);
if (type <= 0x7f) {
pData->next = next;
} else {
pData->content = next;
pData->next = (const void*)((intptr_t)next + param);
}
}
void TParse_TParagraph::getData(TData* pData) const {
JUT_ASSERT(80, pData!=NULL);
const void* data = getRaw();
u32 result;
data = parseVariableUInt_16_32_following(data, &result, &pData->type, NULL);
pData->param = result;
if (result == 0) {
pData->content = NULL;
pData->next = data;
} else {
pData->content = data;
pData->next = (const void*)((intptr_t)data + align_roundUp(result, 4));
}
}
void TParse_TParagraph_data::getData(TParse_TParagraph_data::TData* pData) const {
JUT_ASSERT(104, pData!=NULL);
pData->entrySize = 0;
pData->entryCount = 0;
pData->content = NULL;
pData->next = NULL;
u8* temp = (u8*)getRaw();
u8* filedata = temp;
if (filedata == NULL)
return;
u8 r29 = *filedata;
pData->status = r29 & ~0x8;
if (!r29)
return;
filedata++;
u32 r28 = 1;
if (r29 & 8) {
r28 = *filedata;
filedata++;
}
pData->entryCount = r28;
pData->content = filedata;
u8 r27 = r29 & 7;
if (r27 == 0)
return;
u32 dataSize = (gauDataSize_TEParagraph_data)[r27];
pData->entrySize = dataSize;
pData->next = filedata + (dataSize * r28);
}
} // namespace data
} // namespace stb
} // namespace JStudio
@@ -0,0 +1,6 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio/stb-data.h"
const s32 JStudio::stb::data::gauDataSize_TEParagraph_data[8] = {0x0, 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40};
const u32 JStudio::stb::data::ga4cSignature = 'STB\0';
+487
View File
@@ -0,0 +1,487 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio/stb.h"
#include "JSystem/JStudio/JStudio/jstudio-object.h"
#include "JSystem/JUtility/JUTException.h"
#include <algorithm>
#include <cstring>
namespace JStudio {
namespace stb {
// unchecked, in debug dol
const char* TObject::toString_status(int status) {
const char* result;
switch (status) {
default:
result = "(undefined)";
break;
case 0:
result = "still";
break;
case 1:
result = "end";
break;
case 2:
result = "wait";
break;
case 4:
result = "suspend";
break;
case 8:
result = "inactive";
break;
}
return result;
}
TObject::TObject(u32 arg1, const void* id, u32 id_size)
: TObject_ID(id, id_size), pControl(NULL), signature(arg1), mFlag(0), bSequence_(0), _20(0),
pSequence(NULL), pSequence_next(NULL), u32Wait_(0), mStatus(STATUS_STILL) {}
TObject::TObject(const data::TParse_TBlock_object& object)
: TObject_ID(object.get_ID(), object.get_IDSize()), pControl(NULL),
signature(object.get_type()), mFlag(object.get_flag()), bSequence_(0), _20(0), pSequence(0),
pSequence_next(object.getContent()), u32Wait_(0), mStatus(STATUS_STILL) {}
TObject::~TObject() {
JGADGET_ASSERTWARN(0, getControl() == NULL);
}
void TObject::setFlag_operation(u8 op, int val) {
switch (op) {
default:
JUTWarn w;
w << "unknown flag-operation : " << op;
break;
case 1:
mFlag |= val;
break;
case 2:
mFlag &= val;
break;
case 3:
mFlag ^= val;
break;
}
}
#if !PLATFORM_SHIELD || DEBUG
void TObject::reset(const void* arg1) {
bSequence_ = 0;
mStatus = STATUS_STILL;
pSequence_next = arg1;
u32Wait_ = 0;
}
#endif
#if DEBUG
void TObject::reset() {
reset(NULL);
}
#endif
bool TObject::forward(u32 arg1) {
bool temp = false;
while (true) {
if (mFlag & 0x8000) {
switch (getStatus()) {
case STATUS_STILL:
case STATUS_END:
break;
case STATUS_WAIT:
case STATUS_SUSPEND:
setStatus_(STATUS_INACTIVE);
if (bSequence_) {
on_end();
}
break;
case STATUS_INACTIVE:
break;
default:
ASSERT(false);
break;
}
return true;
}
if (getStatus() == STATUS_INACTIVE) {
ASSERT(bSequence_);
on_begin();
setStatus_(STATUS_WAIT);
}
ASSERT(getStatus() != STATUS_INACTIVE);
TControl* control = getControl();
if ((control != NULL && control->isSuspended()) || isSuspended()) {
if (bSequence_) {
ASSERT((getStatus() == STATUS_WAIT) || (getStatus() == STATUS_SUSPEND));
setStatus_(STATUS_SUSPEND);
on_wait(arg1);
}
return true;
}
while (true) {
void* nextseq = (void*)getSequence_next();
setSequence_(nextseq);
if (nextseq == NULL) {
if (bSequence_) {
ASSERT(getStatus() != STATUS_STILL);
if (!temp) {
on_wait(0);
}
bSequence_ = false;
setStatus_(STATUS_END);
on_end();
}
return false;
}
if (!bSequence_) {
ASSERT(getStatus() == STATUS_STILL);
bSequence_ = true;
on_begin();
}
setStatus_(STATUS_WAIT);
if (u32Wait_ == 0) {
process_sequence_();
if (u32Wait_ == 0) {
break;
}
}
ASSERT(u32Wait_ > 0);
temp = true;
if (arg1 >= u32Wait_) {
u32 wait = u32Wait_;
arg1 -= u32Wait_;
u32Wait_ = 0;
on_wait(wait);
} else {
u32Wait_ -= arg1;
on_wait(arg1);
return true;
}
}
}
}
void TObject::do_begin() {
/* empty function */
}
void TObject::do_end() {
/* empty function */
}
void TObject::do_paragraph(u32 param_0, void const* param_1, u32 param_2) {
/* empty function */
}
void TObject::do_wait(u32 param_0) {
/* empty function */
}
void TObject::do_data(void const* param_0, u32 param_1, void const* param_2, u32 param_3) {
/* empty function */
}
void TObject::process_sequence_() {
ASSERT(getWait() == 0);
data::TParse_TSequence seq(getSequence());
data::TParse_TSequence::TData dat;
seq.getData(&dat);
u8 type = dat.type;
u32 u32Value = dat.param;
const void* pContent = dat.content;
const void* pNext = dat.next;
setSequence_next(dat.next);
switch (type) {
case 0:
JGADGET_ASSERTWARN(0, u32Value == 0);
JGADGET_ASSERTWARN(0, pContent == NULL);
break;
case 1:
JGADGET_ASSERTWARN(0, pContent == NULL);
setFlag_operation_(u32Value);
break;
case 2:
JGADGET_ASSERTWARN(0, pContent == NULL);
setWait(u32Value);
break;
case 3: {
JGADGET_ASSERTWARN(0, pContent == NULL);
s32 off = toInt32FromUInt24_(u32Value);
void* nextseq = (void*)getSequence_offset(off);
setSequence_next(nextseq);
break;
}
case 4: {
JGADGET_ASSERTWARN(0, pContent == NULL);
u32 val = toInt32FromUInt24_(u32Value);
suspend(val);
break;
}
case 0x80: {
ASSERT(pContent != NULL);
void* p = (void*)pContent;
data::TParse_TParagraph para(NULL);
while (p < pNext) {
para.setRaw(p);
data::TParse_TParagraph::TData para_dat;
para.getData(&para_dat);
if (para_dat.type <= 0xff) {
process_paragraph_reserved_(para_dat.type, para_dat.content, para_dat.param);
} else {
on_paragraph(para_dat.type, para_dat.content, para_dat.param);
}
p = (void*)para_dat.next;
ASSERT(p != NULL);
}
JGADGET_ASSERTWARN(0, p == pNext);
break;
}
default:
JUTWarn w;
w << "unknown sequence : " << dat.type;
break;
}
}
void TObject::process_paragraph_reserved_(u32 arg1, const void* pContent, u32 uSize) {
switch (arg1) {
case 0x1:
ASSERT(pContent != NULL);
ASSERT(uSize == 4);
setFlag_operation_(*(u32*)pContent);
break;
case 0x2:
ASSERT(pContent != NULL);
ASSERT(uSize == 4);
setWait(*(u32*)pContent);
break;
case 0x3: {
ASSERT(pContent != NULL);
ASSERT(uSize == 4);
const void* seq = getSequence_offset(*(s32*)pContent);
setSequence_next(seq);
break;
}
case 0x80:
on_data(NULL, 0, pContent, uSize);
break;
case 0x81: {
data::TParse_TParagraph_dataID dataID(pContent);
const void* temp = dataID.getContent();
on_data(dataID.get_ID(), dataID.get_IDSize(), temp,
uSize - ((uintptr_t)temp - (uintptr_t)dataID.getRaw()));
break;
}
case 0x82:
ASSERT(pContent != NULL);
break;
}
}
TObject_control::TObject_control(const void* arg1, u32 arg2) : TObject(-1, arg1, arg2) {}
TControl::TControl() : _4(0), _8(0), pFactory(NULL), mObject_control(NULL, 0), _54(0) {
resetStatus_();
mObject_control.setControl_(this);
}
// TObject_control::TObject_control() definition gets inlined here
TControl::~TControl() {
mObject_control.setControl_(NULL);
JGADGET_ASSERTWARN(0, ocObject_.empty());
}
void TControl::appendObject(TObject* p) {
p->setControl_(this);
ocObject_.Push_back(p);
}
void TControl::removeObject(TObject* p) {
ASSERT(p != NULL);
ASSERT(p->getControl() == this);
p->setControl_(NULL);
ocObject_.Erase(p);
}
void TControl::destroyObject(TObject* p) {
removeObject(p);
ASSERT(pFactory != NULL);
pFactory->destroy(p);
}
void TControl::destroyObject_all() {
while (!ocObject_.empty()) {
destroyObject(&ocObject_.back());
}
}
// NONMATCHING - TPRObject_ID_equal copy issue
TObject* TControl::getObject(void const* param_0, u32 param_1) {
JGadget::TLinkList<TObject, -12>::iterator begin = ocObject_.begin();
JGadget::TLinkList<TObject, -12>::iterator end = ocObject_.end();
JGadget::TLinkList<TObject, -12>::iterator local_50 = std::find_if(begin, end, object::TPRObject_ID_equal(param_0, param_1));
if ((local_50 != end) != false) {
return &*local_50;
}
return NULL;
}
void TControl::reset() {
resetStatus_();
mObject_control.reset();
JGadget::TContainerEnumerator<JGadget::TLinkList<JStudio::stb::TObject, -12> > aTStack_18(ocObject_);
while (aTStack_18) {
(*aTStack_18).reset();
}
}
bool TControl::forward(u32 param_0) {
_54 = mObject_control.getSuspend();
bool rv = mObject_control.forward(param_0);
int uVar7 = 0xf;
int uVar6 = 0;
JGadget::TContainerEnumerator<JGadget::TLinkList<JStudio::stb::TObject, -12> > aTStack_38(ocObject_);
while (aTStack_38) {
JStudio::stb::TObject& this_00 = *aTStack_38;
rv = this_00.forward(param_0) || rv;
int uVar3 = this_00.getStatus();
uVar7 &= uVar3;
uVar6 |= uVar3;
}
setStatus_(uVar7 | (uVar6 << 0x10));
return rv;
}
TFactory::~TFactory() {}
JStudio::TObject* TFactory::create(data::TParse_TBlock_object const& param_0) {
return NULL;
}
void TFactory::destroy(TObject* p) {
delete p;
}
TParse::TParse(TControl* pControl) : pControl(pControl) {}
TParse::~TParse() {}
bool TParse::parseHeader_next(const void** ppData_inout, u32* puBlock_out, u32 flags) {
ASSERT(ppData_inout != NULL);
ASSERT(puBlock_out != NULL);
const void* pData = *ppData_inout;
ASSERT(pData != NULL);
const data::TParse_THeader header(pData);
*ppData_inout = header.getContent();
*puBlock_out = header.get_blockNumber();
if (memcmp(header.get_signature(), &data::ga4cSignature, 4) != 0) {
JUTWarn w;
w << "unknown signature";
return false;
}
if (header.get_byteOrder() != 0xFEFF) {
JUTWarn w;
w << "illegal byte-order";
return false;
}
u16 version = header.get_version();
if (version < 1) {
JUTWarn w;
w << "obselete version : " << (s32)0;
return false;
} else if (version > 3) {
JUTWarn w;
w << "unknown version : " << version;
return false;
}
return parseHeader(header, flags);
}
bool TParse::parseBlock_next(void const** ppData_inout, u32* puData_out, u32 flags) {
ASSERT(ppData_inout != NULL);
ASSERT(puData_out != NULL);
const void* pData = *ppData_inout;
ASSERT(pData != NULL);
data::TParse_TBlock blk(pData);
*ppData_inout = blk.getNext();
*puData_out = blk.get_size();
return parseBlock_block(blk, flags);
}
bool TParse::parseHeader(data::TParse_THeader const& param_0, u32 flags) {
return true;
}
bool TParse::parseBlock_block(const data::TParse_TBlock& ppBlock, u32 flags) {
return parseBlock_object(ppBlock.get(), flags);
}
bool TParse::parseBlock_object(const data::TParse_TBlock_object& ppObject, u32 flags) {
TControl* pControl = getControl();
ASSERT(pControl != NULL);
if (ppObject.get_type() == data::BLOCK_NONE) {
TObject_control& ref = pControl->referObject_control();
ref.reset(ppObject.getContent());
return true;
}
if (flags & 0x10) {
TObject* p = pControl->getObject(ppObject.get_ID(), ppObject.get_IDSize());
if (p != NULL) {
p->reset(ppObject.getContent());
return true;
}
}
if (flags & 0x20)
return true;
TFactory* pFactory = pControl->getFactory();
if (pFactory == NULL) {
JUTWarn w;
w << "factory not specified";
return false;
}
JStudio::TObject* p = pFactory->create(ppObject);
if (p == NULL) {
if (flags & 0x40)
return true;
char a5c[8];
char t[16];
int type = ppObject.get_type();
data::toString_block(a5c, type);
JUTWarn w;
w << "can't create object : " << a5c;
w << "(0x" << type << ")";
return false;
}
pControl->appendObject(p);
return true;
}
} // namespace stb
} // namespace JStudio
@@ -0,0 +1,8 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio_JPreviewer/control.h"
JStudioPreviewer::TControl::TControl() : JOREventCallbackListNode(0xc0000000,0xc00000ff,false) {
}
@@ -0,0 +1,44 @@
//
// control
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio_JAudio2/control.h"
#include "JSystem/JGadget/pointer.h"
JStudio_JAudio2::TCreateObject::~TCreateObject() {}
bool JStudio_JAudio2::TCreateObject::create(
JStudio::TObject** ppObject, JStudio::stb::data::TParse_TBlock_object const& param_2) {
JUT_ASSERT(40, ppObject!=NULL);
CreateFunc func;
switch (param_2.get_type()) {
case 'JSND':
func = createObject_JAI_SOUND_;
break;
default:
return false;
}
*ppObject = func(param_2, this);
return 1;
}
JStudio::TObject* JStudio_JAudio2::TCreateObject::createObject_JAI_SOUND_(
JStudio::stb::data::TParse_TBlock_object const& param_1,
JStudio_JAudio2::TCreateObject* param_2) {
JStudio_JAudio2::TAdaptor_sound* adaptor = new JStudio_JAudio2::TAdaptor_sound(param_2);
if (adaptor == NULL) {
return NULL;
}
JGadget::TPointer_delete<JStudio_JAudio2::TAdaptor_sound> deleteGuard(adaptor);
adaptor->set_bPermit_onExit_notEnd_(param_2->isPermit_onExit_notEnd());
JStudio::TObject_sound* soundObj =
JStudio::TCreateObject::createFromAdaptor<JStudio_JAudio2::TAdaptor_sound>(param_1,
adaptor);
if (soundObj == NULL) {
return NULL;
}
deleteGuard.set(NULL);
return soundObj;
}
@@ -0,0 +1,327 @@
//
// object-sound
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio_JAudio2/object-sound.h"
#include "JSystem/JStudio/JStudio_JAudio2/control.h"
#include "JSystem/JStudio/JStudio_JStage/control.h"
namespace JStudio_JAudio2 {
namespace {
static void setValue_VOLUME_(JAISound *param_1, float param_2) {
param_1->getAuxiliary().moveVolume(param_2, 0);
}
static void setValue_PAN_(JAISound *param_1, float param_2) {
param_1->getAuxiliary().movePan(param_2, 0);
}
static void setValue_PITCH_(JAISound *param_1, float param_2) {
param_1->getAuxiliary().movePitch(param_2, 0);
}
static void setValue_TEMPO_(JAISound *param_1, float param_2) {
JAITempoMgr* tempoMgr = param_1->getTempoMgr();
if (tempoMgr != NULL) {
tempoMgr->setTempo(param_2);
}
}
static void setValue_ECHO_(JAISound *param_1, float param_2) {
param_1->getAuxiliary().moveFxMix(param_2, 0);
}
}; // namespace
}; // namespace JStudio_JAudio2
JStudio_JAudio2::TAdaptor_sound::TAdaptor_sound(JStudio_JAudio2::TCreateObject* param_1) :
pCreateObject_(param_1) {
field_0x11c = 0;
field_0x11d = 0;
field_0x11e = 0;
field_0x11f = 0;
field_0x120 = 0;
field_0x124 = 0xffffffff;
field_0x128 = 0;
field_0x12c = NULL;
field_0x13c = NULL;
field_0x140 = 0xffffffff;
field_0x144 = 0;
JUT_ASSERT(112, pCreateObject_!=NULL);
}
JStudio_JAudio2::TAdaptor_sound::~TAdaptor_sound() {
if (opJAISoundHandle_) {
if (field_0x11f == 0) {
opJAISoundHandle_->stop();
} else if (field_0x11c != 0) {
opJAISoundHandle_.releaseSound();
} else {
opJAISoundHandle_->stop();
}
}
}
void JStudio_JAudio2::TAdaptor_sound::adaptor_do_prepare() {
static JStudio::TAdaptor::TSetVariableValue_immediate aoData[4] = {
TSetVariableValue_immediate(0, 0.0f),
TSetVariableValue_immediate(1, 0.0f),
TSetVariableValue_immediate(2, 0.0f),
TSetVariableValue_immediate(-1, NAN),
};
adaptor_setVariableValue_immediate(aoData);
for (TVVOSetValue_* pTVar1 = saoVVOSetValue_; pTVar1->field_0x04 != -1; pTVar1++) {
adaptor_referVariableValue(pTVar1->field_0x04)->setOutput(pTVar1);
}
}
JStudio_JAudio2::TAdaptor_sound::TVVOSetValue_ JStudio_JAudio2::TAdaptor_sound::saoVVOSetValue_[6] = {
JStudio_JAudio2::TAdaptor_sound::TVVOSetValue_(
JStudio_JAudio2::TAdaptor_sound::UNK_7, setValue_VOLUME_
),
JStudio_JAudio2::TAdaptor_sound::TVVOSetValue_(
JStudio_JAudio2::TAdaptor_sound::UNK_8, setValue_PAN_
),
JStudio_JAudio2::TAdaptor_sound::TVVOSetValue_(
JStudio_JAudio2::TAdaptor_sound::UNK_9, setValue_PITCH_
),
JStudio_JAudio2::TAdaptor_sound::TVVOSetValue_(
JStudio_JAudio2::TAdaptor_sound::UNK_10, setValue_TEMPO_
),
JStudio_JAudio2::TAdaptor_sound::TVVOSetValue_(
JStudio_JAudio2::TAdaptor_sound::UNK_11, setValue_ECHO_
),
JStudio_JAudio2::TAdaptor_sound::TVVOSetValue_(
JStudio_JAudio2::TAdaptor_sound::UNK_NONE, NULL
),
};
void JStudio_JAudio2::TAdaptor_sound::adaptor_do_end() {
}
void JStudio_JAudio2::TAdaptor_sound::adaptor_do_update(u32 param_1) {
const JStudio::TObject* pObject = adaptor_getObject();
JUT_ASSERT(194, pObject!=NULL);
const JStudio::TControl* pControl = pObject->getControl();
JUT_ASSERT(196, pControl!=NULL);
JStudio::TControl::TTransform_position VStack_148;
JStudio::TControl::TTransform_position VStack_154;
const JStudio::TControl::TTransform_position* pVVar2;
adaptor_getVariableValue_Vec(&VStack_148,
JStudio::TAdaptor_sound::sauVariableValue_3_POSITION_XYZ);
if (field_0x144 == 0) {
pVVar2 = pControl->transformOnSet_transform_ifEnabled(VStack_148, &VStack_154);
} else {
if (!JStudio_JStage::transform_toGlobalFromLocal(&VStack_154, VStack_148, field_0x13c, field_0x140)) {
return;
}
pVVar2 = &VStack_154;
}
field_0x130 = *pVVar2;
if (field_0x11d) {
switch(field_0x120) {
case 2: {
JAISoundStarter* soundStarter = pCreateObject_->get_pJAISoundStarter_();
soundStarter->startLevelSound(field_0x124, &opJAISoundHandle_, field_0x12c);
break;
}
case 1:
field_0x120 = 2;
break;
}
}
if (field_0x11e != 0 && field_0x124 != -1 && !opJAISoundHandle_) {
prepareSound_();
beginSound_fadeIn_();
}
if (field_0x12c != NULL && opJAISoundHandle_)
{
opJAISoundHandle_->setPos(*field_0x12c);
}
}
void JStudio_JAudio2::TAdaptor_sound::adaptor_do_SOUND(JStudio::data::TEOperationData param_1,
void const* pContent, u32 uSize) {
switch(param_1) {
case JStudio::data::UNK_0x19:
JUT_ASSERT(283, pContent!=NULL);
JUT_ASSERT(284, uSize==4);
field_0x124 = *(u32*)pContent;
prepareSound_();
break;
}
}
void JStudio_JAudio2::TAdaptor_sound::adaptor_do_BEGIN(JStudio::data::TEOperationData param_1,
void const* pContent, u32 uSize) {
switch (param_1) {
case JStudio::data::UNK_0x1:
JUT_ASSERT(284, uSize == 0);
beginSound_();
break;
}
}
void JStudio_JAudio2::TAdaptor_sound::adaptor_do_BEGIN_FADE_IN(
JStudio::data::TEOperationData param_1, void const* pContent, u32 uSize) {
switch (param_1) {
case JStudio::data::UNK_0x2:
JUT_ASSERT(323, pContent!=NULL);
JUT_ASSERT(324, uSize==4);
beginSound_fadeIn_(*(f32*)pContent);
break;
}
}
void JStudio_JAudio2::TAdaptor_sound::adaptor_do_END(JStudio::data::TEOperationData param_1,
void const* pContent, u32 uSize) {
switch (param_1) {
case JStudio::data::UNK_0x1:
JUT_ASSERT(345, uSize == 0);
endSound_();
break;
}
}
void JStudio_JAudio2::TAdaptor_sound::adaptor_do_END_FADE_OUT(
JStudio::data::TEOperationData param_1, void const* pContent, u32 uSize) {
switch (param_1) {
case JStudio::data::UNK_0x2:
JUT_ASSERT(364, pContent!=NULL);
JUT_ASSERT(365, uSize==4);
endSound_fadeOut_(*(f32*)pContent);
break;
}
}
void JStudio_JAudio2::TAdaptor_sound::adaptor_do_PARENT(
JStudio::data::TEOperationData param_1, void const* pContent, u32 uSize) {
switch (param_1) {
case JStudio::data::UNK_0x18:
JUT_ASSERT(387, pContent!=NULL);
JUT_ASSERT(388, uSize!=0);
field_0x13c = NULL;
JStage::TSystem* pJSGSystem = (JStage::TSystem*)pCreateObject_->get_pJSGSystem_();
JUT_ASSERT(396, pJSGSystem != NULL);
JStage::TObject* pJSGObject;
if (!pJSGSystem->JSGFindObject(&pJSGObject, (const char*)pContent, JStage::OBJECT_UNDEFINED)) {
JUT_ASSERT(405, pJSGObject != NULL);
field_0x13c = pJSGObject;
}
break;
}
}
void JStudio_JAudio2::TAdaptor_sound::adaptor_do_PARENT_NODE(JStudio::data::TEOperationData param_1,
const void* pContent, u32 uSize) {
switch (param_1) {
case JStudio::data::UNK_0x18:
if (field_0x13c != NULL) {
JUT_ASSERT(431, pContent!=NULL);
JUT_ASSERT(432, uSize==0);
field_0x140 = field_0x13c->JSGFindNodeID((char*)pContent);
if (field_0x140 == -1) {
return;
}
}
break;
case JStudio::data::UNK_0x19:
JUT_ASSERT(447, uSize==4);
JUT_ASSERT(448, pContent!=NULL);
field_0x140 = *(u32*)pContent;
break;
}
}
void JStudio_JAudio2::TAdaptor_sound::adaptor_do_PARENT_ENABLE(
JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) {
if (param_1 == JStudio::data::UNK_0x2) {
JUT_ASSERT(468, uSize == 4);
JUT_ASSERT(469, pContent != NULL);
field_0x144 = *(u32*)pContent ? 1 : 0;
}
}
void JStudio_JAudio2::TAdaptor_sound::adaptor_do_REPEAT(JStudio::data::TEOperationData param_1,
const void* pContent, u32 uSize) {
if (param_1 == JStudio::data::UNK_0x2) {
JUT_ASSERT(490, uSize == 4);
JUT_ASSERT(491, pContent != NULL);
field_0x11e = *(u32*)pContent ? 1 : 0;
}
}
void JStudio_JAudio2::TAdaptor_sound::adaptor_do_CONTINUOUS(JStudio::data::TEOperationData param_1,
const void* pContent, u32 uSize) {
if (param_1 == JStudio::data::UNK_0x2) {
JUT_ASSERT(512, uSize == 4);
JUT_ASSERT(513, pContent != NULL);
field_0x11d = *(u32*)pContent ? 1 : 0;
}
}
void JStudio_JAudio2::TAdaptor_sound::adaptor_do_LOCATED(JStudio::data::TEOperationData param_1,
const void* pContent, u32 uSize) {
if (param_1 == JStudio::data::UNK_0x2) {
JUT_ASSERT(534, pContent != NULL);
JUT_ASSERT(535, uSize == 4);
u32 val = *(u32*)pContent;
field_0x12c = NULL;
if (val != 0) {
field_0x12c = &field_0x130;
}
}
}
void JStudio_JAudio2::TAdaptor_sound::adaptor_do_ON_EXIT_NOT_END(
JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) {
if (param_1 == JStudio::data::UNK_0x2) {
JUT_ASSERT(512, uSize == 4);
JUT_ASSERT(513, pContent != NULL);
field_0x11f = *(u32*)pContent ? 1 : 0;
}
}
void JStudio_JAudio2::TAdaptor_sound::TVVOSetValue_::operator()(f32 param_1,
JStudio::TAdaptor* param_2) const {
JUT_ASSERT(596, param_2 != NULL);
if (((JStudio_JAudio2::TAdaptor_sound*)param_2)->opJAISoundHandle_) {
JAISound* sound = ((JStudio_JAudio2::TAdaptor_sound*)param_2)->opJAISoundHandle_.sound_;
field_0x08(sound, param_1);
}
}
void JStudio_JAudio2::TAdaptor_sound::prepareSound_() {
if (opJAISoundHandle_) {
opJAISoundHandle_stop_();
}
JAISoundStarter* soundStarter = pCreateObject_->get_pJAISoundStarter_();
if (field_0x11d == 0) {
soundStarter->startSound(field_0x124, &opJAISoundHandle_, field_0x12c);
} else {
soundStarter->startLevelSound(field_0x124, &opJAISoundHandle_, field_0x12c);
}
if (opJAISoundHandle_) {
opJAISoundHandle_->lockWhenPrepared();
}
}
void JStudio_JAudio2::TAdaptor_sound::beginSound_fadeIn_() {
if (opJAISoundHandle_) {
opJAISoundHandle_->fadeIn(field_0x128);
opJAISoundHandle_->unlockIfLocked();
field_0x120 = 1;
}
}
void JStudio_JAudio2::TAdaptor_sound::endSound_fadeOut_(u32 u32FadeTime) {
if (opJAISoundHandle_) {
opJAISoundHandle_->stop(u32FadeTime);
JUT_ASSERT(654, (u32FadeTime>0)||!opJAISoundHandle_);
field_0x120 = 0;
}
}
@@ -0,0 +1,58 @@
//
// control
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio_JParticle/control.h"
#include "JSystem/JParticle/JPAEmitterManager.h"
#include "JSystem/JGadget/pointer.h"
JStudio_JParticle::TCreateObject::~TCreateObject() {}
bool
JStudio_JParticle::TCreateObject::create(JStudio::TObject** ppObject,
JStudio::stb::data::TParse_TBlock_object const& param_2) {
JUT_ASSERT(40, ppObject!=NULL);
CreateFunc func;
switch (param_2.get_type()) {
case 'JPTC':
func = createObject_JPA_PARTICLE_;
break;
default:
return false;
}
*ppObject = func(param_2, this);
return true;
}
JPABaseEmitter* JStudio_JParticle::TCreateObject::emitter_create(u32 param_1) {
JGeometry::TVec3<f32> local_08;
Vec local_1c = {0.0f, 0.0f, 0.0f};
local_08 = local_1c;
return pJPAEmitterManager_->createSimpleEmitterID(
local_08, param_1 & 0xffff, (param_1 >> 24) & 0xff, (param_1 >> 16) & 0xff, NULL, NULL);
}
void JStudio_JParticle::TCreateObject::emitter_destroy(JPABaseEmitter* pEmitter) {
pJPAEmitterManager_->forceDeleteEmitter(pEmitter);
}
JStudio::TObject* JStudio_JParticle::TCreateObject::createObject_JPA_PARTICLE_(
JStudio::stb::data::TParse_TBlock_object const& param_1,
JStudio_JParticle::TCreateObject* param_2) {
JStudio_JParticle::TAdaptor_particle* adaptor = new JStudio_JParticle::TAdaptor_particle(param_2);
if (adaptor == NULL) {
return NULL;
}
JGadget::TPointer_delete<JStudio_JParticle::TAdaptor_particle> deleteGuard(adaptor);
adaptor->set_bPermit_onExit_notEnd_(param_2->isPermit_onExit_notEnd());
JStudio::TObject_particle* particle =
JStudio::TCreateObject::createFromAdaptor<JStudio_JParticle::TAdaptor_particle>(param_1,
adaptor);
if (particle == NULL) {
return NULL;
}
deleteGuard.set(NULL);
return particle;
}
@@ -0,0 +1,378 @@
//
// object-particle
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio_JParticle/object-particle.h"
#include "JSystem/JStudio/JStudio_JStage/control.h"
JStudio_JParticle::TAdaptor_particle::TAdaptor_particle(
JStudio_JParticle::TCreateObject* param_1) :
pCreateObject_(param_1),
pJPAEmitter_(NULL),
field_0x1a8(this) {
field_0x1b4 = 0;
field_0x1b5 = 0;
field_0x1b6 = 0;
field_0x1b7 = 0;
field_0x1b8 = 0;
field_0x1bc = -1;
u32FadeTime_end = 0;
field_0x1c4 = 0;
field_0x1c8 = 0;
field_0x1cc = 0;
field_0x1d0 = NULL;
field_0x1d4 = -1;
field_0x1d8 = 0;
JUT_ASSERT(90, pCreateObject_!=NULL);
}
JStudio_JParticle::TAdaptor_particle::~TAdaptor_particle() {
if (pJPAEmitter_ != NULL) {
if (field_0x1b6 == 0) {
pCreateObject_->emitter_destroy(pJPAEmitter_);
} else if (field_0x1b4 != 0) {
pJPAEmitter_->setEmitterCallBackPtr(field_0x1a8.getOld());
pJPAEmitter_->quitImmortalEmitter();
} else {
pCreateObject_->emitter_destroy(pJPAEmitter_);
}
}
}
void JStudio_JParticle::TAdaptor_particle::adaptor_do_prepare() {
static JStudio::TAdaptor::TSetVariableValue_immediate aoData[18] = {
JStudio::TAdaptor::TSetVariableValue_immediate(0, 0.0f),
JStudio::TAdaptor::TSetVariableValue_immediate(1, 0.0f),
JStudio::TAdaptor::TSetVariableValue_immediate(2, 0.0f),
JStudio::TAdaptor::TSetVariableValue_immediate(3, 0.0f),
JStudio::TAdaptor::TSetVariableValue_immediate(4, 0.0f),
JStudio::TAdaptor::TSetVariableValue_immediate(5, 0.0f),
JStudio::TAdaptor::TSetVariableValue_immediate(6, 1.0f),
JStudio::TAdaptor::TSetVariableValue_immediate(7, 1.0f),
JStudio::TAdaptor::TSetVariableValue_immediate(8, 1.0f),
JStudio::TAdaptor::TSetVariableValue_immediate(9, 255.0f),
JStudio::TAdaptor::TSetVariableValue_immediate(10, 255.0f),
JStudio::TAdaptor::TSetVariableValue_immediate(11, 255.0f),
JStudio::TAdaptor::TSetVariableValue_immediate(12, 255.0f),
JStudio::TAdaptor::TSetVariableValue_immediate(13, 255.0f),
JStudio::TAdaptor::TSetVariableValue_immediate(14, 255.0f),
JStudio::TAdaptor::TSetVariableValue_immediate(15, 255.0f),
JStudio::TAdaptor::TSetVariableValue_immediate(16, 255.0f),
JStudio::TAdaptor::TSetVariableValue_immediate(),
};
adaptor_setVariableValue_immediate(aoData);
}
void JStudio_JParticle::TAdaptor_particle::adaptor_do_end() {
}
void JStudio_JParticle::TAdaptor_particle::adaptor_do_update(u32 param_1) {
const JStudio::TObject* pObject = adaptor_getObject();
JUT_ASSERT(179, pObject != NULL);
const JStudio::TControl* pControl = pObject->getControl();
JUT_ASSERT(181, pControl != NULL);
if (u32FadeTime_end != 0 && field_0x1c4 < u32FadeTime_end) {
JUT_ASSERT(187, state_isFade_());
JUT_ASSERT(188, pJPAEmitter_ != NULL);
field_0x1c4 += param_1;
if (field_0x1c4 >= u32FadeTime_end) {
switch (field_0x1b8) {
case 1:
field_0x1b8 = 2;
break;
case 3:
pCreateObject_->emitter_destroy(pJPAEmitter_);
pJPAEmitter_ = NULL;
field_0x1b8 = 0;
break;
}
u32FadeTime_end = 0;
field_0x1c4 = 0;
}
} else {
JUT_ASSERT(210, !state_isFade_());
}
if (field_0x1b5 != 0 && field_0x1b7 != 0 && pJPAEmitter_ == NULL) {
beginParticle_fadeIn_();
}
}
void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARTICLE(
JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) {
if (param_1 == JStudio::data::UNK_0x19) {
JUT_ASSERT(232, uSize==4);
JUT_ASSERT(233, pContent!=NULL);
field_0x1bc = *(u32*)pContent;
}
}
void JStudio_JParticle::TAdaptor_particle::adaptor_do_BEGIN(JStudio::data::TEOperationData param_1,
const void* pContent, u32 uSize) {
switch (param_1) {
case JStudio::data::UNK_0x1:
JUT_ASSERT(253, uSize==0);
beginParticle_();
break;
}
}
void JStudio_JParticle::TAdaptor_particle::adaptor_do_BEGIN_FADE_IN(
JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) {
switch (param_1) {
case JStudio::data::UNK_0x2:
JUT_ASSERT(272, pContent!=NULL);
JUT_ASSERT(273, uSize==4);
beginParticle_fadeIn_(*(f32*)pContent);
break;
}
}
void JStudio_JParticle::TAdaptor_particle::adaptor_do_END(JStudio::data::TEOperationData param_1,
const void* pContent, u32 uSize) {
if (param_1 == JStudio::data::UNK_0x1) {
JUT_ASSERT(294, uSize==0);
endParticle_();
}
}
void JStudio_JParticle::TAdaptor_particle::adaptor_do_END_FADE_OUT(
JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) {
switch (param_1) {
case JStudio::data::UNK_0x2:
JUT_ASSERT(336, pContent!=NULL);
JUT_ASSERT(337, uSize==4);
endParticle_fadeOut_(*(f32*)pContent);
break;
}
}
void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT(
JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) {
switch (param_1) {
case JStudio::data::UNK_0x18:
JUT_ASSERT(313, pContent!=NULL);
JUT_ASSERT(314, uSize==4);
field_0x1d0 = NULL;
const JStage::TSystem* pJSGSystem = pCreateObject_->get_pJSGSystem_();
JUT_ASSERT(345, pJSGSystem!=NULL);
JStage::TObject* pJSGObject;
if (pJSGSystem->JSGFindObject(&pJSGObject, (const char*)pContent, JStage::OBJECT_UNDEFINED) == 0) {
JUT_ASSERT(354, pJSGObject!=NULL);
field_0x1d0 = pJSGObject;
}
break;
}
}
void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT_NODE(
JStudio::data::TEOperationData param_1, const void* pContent, u32 uSize) {
switch (param_1) {
case JStudio::data::UNK_0x18:
if (field_0x1d0 != NULL) {
JUT_ASSERT(380, pContent!=NULL);
JUT_ASSERT(381, uSize==4);
field_0x1d4 = field_0x1d0->JSGFindNodeID((const char*)pContent);
if (field_0x1d4 == -1) {
return;
}
}
break;
case JStudio::data::UNK_0x19:
JUT_ASSERT(397, uSize==4);
JUT_ASSERT(396, pContent!=NULL);
field_0x1d4 = *(u32*)pContent;
break;
}
}
void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT_ENABLE(JStudio::data::TEOperationData param_1,
const void* pContent, u32 uSize) {
if (param_1 == JStudio::data::UNK_0x2) {
JUT_ASSERT(417, uSize==4);
JUT_ASSERT(418, pContent!=NULL);
field_0x1d8 = *(u32*)pContent ? 1 : 0;
}
}
void JStudio_JParticle::TAdaptor_particle::adaptor_do_PARENT_FUNCTION(JStudio::data::TEOperationData param_1,
const void* pContent, u32 uSize) {
if (param_1 == JStudio::data::UNK_0x2) {
JUT_ASSERT(439, uSize==4);
JUT_ASSERT(439, pContent!=NULL);
field_0x1cc = *(u32*)pContent;
}
}
void JStudio_JParticle::TAdaptor_particle::adaptor_do_REPEAT(JStudio::data::TEOperationData param_1,
const void* pContent, u32 uSize) {
if (param_1 == JStudio::data::UNK_0x2) {
JUT_ASSERT(460, uSize==4);
JUT_ASSERT(461, pContent!=NULL);
field_0x1b5 = *(u32*)pContent ? 1 : 0;
}
}
void JStudio_JParticle::TAdaptor_particle::adaptor_do_ON_EXIT_NOT_END(JStudio::data::TEOperationData param_1,
const void* pContent, u32 uSize) {
if (param_1 == JStudio::data::UNK_0x2) {
JUT_ASSERT(460, uSize==4);
JUT_ASSERT(461, pContent!=NULL);
field_0x1b6 = *(u32*)pContent ? 1 : 0;
}
}
void
JStudio_JParticle::TAdaptor_particle::TJPACallback_emitter_::execute(JPABaseEmitter* pJPAEmitter) {
JUT_ASSERT(518, pJPAEmitter==pThis_->pJPAEmitter_);
if (pJPAEmitter->isEnableDeleteEmitter()) {
pThis_->pCreateObject_->emitter_destroy(pJPAEmitter);
pThis_->pJPAEmitter_ = NULL;
pThis_->field_0x1b8 = 0;
pThis_->u32FadeTime_end = 0;
pThis_->field_0x1c4 = 0;
return;
}
const JStudio::TObject* pObject = pThis_->adaptor_getObject();
JUT_ASSERT(534, pObject!=NULL);
const JStudio::TControl* pControl = pObject->getControl();
JUT_ASSERT(536, pControl!=NULL);
TJPAEmitter_stopDrawParticle_ aTStack_21c(pJPAEmitter);
JStudio::TControl::TTransform_translation_rotation_scaling VStack_19c;
JStudio::TControl::TTransform_translation_rotation_scaling aTStack_1c0;
pThis_->adaptor_getVariableValue_Vec(
&VStack_19c.translation,
sauVariableValue_3_TRANSLATION_XYZ);
pThis_->adaptor_getVariableValue_Vec(
&VStack_19c.rotation,
sauVariableValue_3_ROTATION_XYZ);
pThis_->adaptor_getVariableValue_Vec(
&VStack_19c.scaling,
sauVariableValue_3_SCALING_XYZ);
if (pThis_->field_0x1d8 == 0) {
const JStudio::TControl::TTransform_translation_rotation_scaling* pVVar9 = &VStack_19c;
switch(pThis_->field_0x1cc) {
case 0:
pVVar9 = pControl->transformOnSet_transform_ifEnabled(VStack_19c, &aTStack_1c0);
break;
case 1:
break;
}
pJPAEmitter->setGlobalTranslation(pVVar9->translation);
int rotx = 65536.0 * (pVVar9->rotation.x / 360.0);
int roty = 65536.0 * (pVVar9->rotation.y / 360.0);
int rotz = 65536.0 * (pVVar9->rotation.z / 360.0);
pJPAEmitter->setGlobalRotation(JGeometry::TVec3<s16>(rotx, roty, rotz));
pJPAEmitter->setGlobalScale(pVVar9->scaling);
} else {
Mtx afStack_1f0;
if (JStudio_JStage::transform_toGlobalFromLocal(afStack_1f0, VStack_19c, pThis_->field_0x1d0,
pThis_->field_0x1d4) == 0)
{
return;
}
pJPAEmitter->setGlobalSRTMatrix(afStack_1f0);
}
f64 alpha = 1.0;
u32 u32FadeTime_end = pThis_->u32FadeTime_end;
f64 dVar16 = u32FadeTime_end;
f64 dVar15 = pThis_->field_0x1c4;
switch(pThis_->field_0x1b8) {
case 1:
JUT_ASSERT(606, u32FadeTime_end>0);
alpha = dVar15 / dVar16;
break;
case 3:
JUT_ASSERT(611, u32FadeTime_end>0);
alpha = (dVar16 - dVar15) / dVar16;
}
u8 globalAlpha = 255;
GXColor a_Stack_224;
pThis_->adaptor_getVariableValue_GXColor(&a_Stack_224, sauVariableValue_4_COLOR_RGBA);
alpha *= a_Stack_224.a;
if (alpha < 255.0) {
globalAlpha = alpha;
}
pJPAEmitter->setGlobalAlpha(globalAlpha);
aTStack_21c.set(NULL);
if (pOld != NULL) {
pOld->execute(pJPAEmitter);
}
}
void
JStudio_JParticle::TAdaptor_particle::TJPACallback_emitter_::executeAfter(JPABaseEmitter* pJPAEmitter) {
if (pOld != NULL) {
pOld->executeAfter(pJPAEmitter);
}
}
void
JStudio_JParticle::TAdaptor_particle::TJPACallback_emitter_::draw(JPABaseEmitter* pJPAEmitter) {
if (pOld != NULL) {
pOld->draw(pJPAEmitter);
}
}
void
JStudio_JParticle::TAdaptor_particle::TJPACallback_emitter_::drawAfter(JPABaseEmitter* pJPAEmitter) {
if (pOld != NULL) {
pOld->drawAfter(pJPAEmitter);
}
}
void JStudio_JParticle::TAdaptor_particle::beginParticle_fadeIn_() {
if (pJPAEmitter_ != NULL) {
pCreateObject_->emitter_destroy(pJPAEmitter_);
}
JPABaseEmitter* pEmitter = pCreateObject_->emitter_create(field_0x1bc);
pJPAEmitter_ = pEmitter;
if (pEmitter != NULL) {
field_0x1a8.setOld(pEmitter->getEmitterCallBackPtr());
pEmitter->setEmitterCallBackPtr(&field_0x1a8);
pEmitter->becomeImmortalEmitter();
field_0x1b7 = 1;
field_0x1b8 = 1;
if (field_0x1c8 == 0) {
field_0x1b8 = 2;
}
u32FadeTime_end = field_0x1c8;
field_0x1c4 = 0;
}
}
void JStudio_JParticle::TAdaptor_particle::endParticle_fadeOut_(u32 param_1) {
if (pJPAEmitter_ == NULL) {
return;
}
if (param_1 == 0) {
pCreateObject_->emitter_destroy(pJPAEmitter_);
pJPAEmitter_ = NULL;
field_0x1b8 = 0;
u32FadeTime_end = 0;
field_0x1c4 = 0;
return;
}
u8 eState_old = field_0x1b8 & 0xff;
field_0x1b8 = 3;
if (field_0x1c4 == 0) {
u32FadeTime_end = param_1;
return;
}
JUT_ASSERT(735, state_isFade_(eState_old));
u32 u32Denominator = 0;
switch(eState_old) {
case 1:
u32Denominator = field_0x1c4;
break;
case 3:
u32Denominator = u32FadeTime_end - field_0x1c4;
break;
}
JUT_ASSERT(793, u32Denominator!=0);
u32FadeTime_end = ((f64)param_1 * (f64)u32FadeTime_end) / u32Denominator;
field_0x1c4 = u32FadeTime_end - param_1;
}
@@ -0,0 +1,56 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio_JStage/control.h"
#include "JSystem/JStage/JSGActor.h"
#include "JSystem/JStage/JSGLight.h"
#include "JSystem/JStage/JSGFog.h"
#include "JSystem/JStage/JSGCamera.h"
#include "JSystem/JStage/JSGAmbientLight.h"
JStudio_JStage::TCreateObject::~TCreateObject() {}
bool JStudio_JStage::TCreateObject::create(
JStudio::TObject** ppObject, JStudio::stb::data::TParse_TBlock_object const& rParse) {
JUT_ASSERT(83, ppObject!=NULL);
*ppObject = NULL;
ObjCreateFuncT pfnCreateObject;
JStage::TEObject eObject;
switch(rParse.get_type()) {
case 'JACT':
pfnCreateObject = createObject_JSG_<TAdaptor_actor, JStage::TActor>;
eObject = JStage::OBJECT_ACTOR;
break;
case 'JCMR':
pfnCreateObject = createObject_JSG_<TAdaptor_camera, JStage::TCamera>;
eObject = JStage::OBJECT_CAMERA;
break;
case 'JABL':
pfnCreateObject = createObject_JSG_<TAdaptor_ambientLight, JStage::TAmbientLight>;
eObject = JStage::OBJECT_AMBIENT;
break;
case 'JLIT':
pfnCreateObject = createObject_JSG_<TAdaptor_light, JStage::TLight>;
eObject = JStage::OBJECT_LIGHT;
break;
case 'JFOG':
pfnCreateObject = createObject_JSG_<TAdaptor_fog, JStage::TFog>;
eObject = JStage::OBJECT_FOG;
break;
default:
return NULL;
}
JUT_ASSERT(99, pfnCreateObject!=NULL);
JUT_ASSERT(100, eObject!=JStage::OBJECT_UNDEFINED);
JUT_ASSERT(109, pJSGSystem_!=NULL);
JStage::TObject* pJSGObject;
int pJVar2 = pJSGSystem_->JSGFindObject(&pJSGObject, (char const*)rParse.get_ID(), eObject);
switch(pJVar2) {
case 0:
JUT_ASSERT(115, pJSGObject!=NULL);
*ppObject = pfnCreateObject(rParse, pJSGObject, pJSGSystem_);
return true;
case 2:
return true;
}
return false;
}
@@ -0,0 +1,356 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio_JStage/object-actor.h"
JStudio_JStage::TAdaptor_actor::TAdaptor_actor(JStage::TSystem const* param_1,
JStage::TActor* param_2) :
TAdaptor_object_(this, param_1,param_2) {
field_0x130 = 0;
field_0x134 = 0;
field_0x138 = 0;
field_0x13c = NULL;
field_0x140 = -1;
field_0x144 = 0;
field_0x148 = NULL;
field_0x14c = -1;
}
JStudio_JStage::TAdaptor_actor::~TAdaptor_actor() {
adaptor_do_end();
}
void JStudio_JStage::TAdaptor_actor::adaptor_do_prepare() {
const TVVOutputObject* pOutput = saoVVOutput_;
while (!pOutput->isEnd_()) {
pOutput->adaptor_setOutput_(this);
pOutput++;
}
const TVVOutput_ANIMATION_FRAME_* pAnimOutput = saoVVOutput_ANIMATION_FRAME_;
while (!pAnimOutput->isEnd_()) {
pAnimOutput->adaptor_setOutput_(this);
pAnimOutput++;
}
}
void JStudio_JStage::TAdaptor_actor::adaptor_do_begin() {
adaptor_object_begin_();
const JStage::TActor* pActor = get_pJSG_();
#if DEBUG
{ // This block is needed to match the stack in debug
const JStudio::TObject* pObject = adaptor_getObject();
JUT_ASSERT(72, pObject!=NULL);
const JStudio::TControl* pControl = pObject->getControl();
JUT_ASSERT(74, pControl!=NULL);
getJSG_SRT_(pControl);
}
#else
// Fakematch, load order is wrong in retail when using the inlines shown in debug
getJSG_SRT_((const JStudio::TControl*)(adaptor_getObject()->pControl));
#endif
const TVVOutputObject* pOutput = saoVVOutput_;
while (!pOutput->isEnd_()) {
pOutput->setVariableValue_(pActor, this);
pOutput++;
}
const TVVOutput_ANIMATION_FRAME_* pAnimOutput = saoVVOutput_ANIMATION_FRAME_;
while (!pAnimOutput->isEnd_()) {
pAnimOutput->setVariableValue_(pActor, this);
pAnimOutput++;
}
}
void JStudio_JStage::TAdaptor_actor::adaptor_do_end() {
adaptor_object_end_();
}
void JStudio_JStage::TAdaptor_actor::adaptor_do_update(u32 param_1) {
const JStudio::TObject* pObject = adaptor_getObject();
JUT_ASSERT(104, pObject != NULL);
const JStudio::TControl* pControl = pObject->getControl();
JUT_ASSERT(106, pControl != NULL);
setJSG_SRT_(pControl);
pJSGObject_->JSGUpdate();
}
void JStudio_JStage::TAdaptor_actor::adaptor_do_data(void const* param_1, u32 param_2,
void const* param_3, u32 param_4) {
adaptor_object_data_(param_1, param_2, param_3, param_4);
}
void JStudio_JStage::TAdaptor_actor::adaptor_do_SHAPE(JStudio::data::TEOperationData operation,
void const* param_2, u32 param_3) {
setJSG_ID_(&JStage::TActor::JSGSetShape, operation, param_2, param_3);
}
void JStudio_JStage::TAdaptor_actor::adaptor_do_ANIMATION(JStudio::data::TEOperationData operation,
void const* param_2, u32 param_3) {
setJSG_ID_(&JStage::TActor::JSGSetAnimation, operation, param_2, param_3);
}
void JStudio_JStage::TAdaptor_actor::adaptor_do_ANIMATION_MODE(JStudio::data::TEOperationData operation,
void const* pContent, u32 uSize) {
switch (operation) {
case JStudio::data::UNK_0x2:
JUT_ASSERT(153, uSize==4);
JUT_ASSERT(154, pContent!=NULL);
field_0x130 = *(u32*)pContent;
break;
}
}
void JStudio_JStage::TAdaptor_actor::adaptor_do_TEXTURE_ANIMATION(JStudio::data::TEOperationData operation,
void const* param_2, u32 param_3) {
setJSG_ID_(&JStage::TActor::JSGSetTextureAnimation, operation, param_2, param_3);
}
void JStudio_JStage::TAdaptor_actor::adaptor_do_TEXTURE_ANIMATION_MODE(
JStudio::data::TEOperationData operation, void const* pContent, u32 uSize) {
switch (operation) {
case JStudio::data::UNK_0x2:
JUT_ASSERT(182, uSize==4);
JUT_ASSERT(183, pContent!=NULL);
field_0x134 = *(u32*)pContent;
break;
}
}
void JStudio_JStage::TAdaptor_actor::adaptor_do_PARENT(
JStudio::data::TEOperationData operation, void const* pContent, u32 uSize) {
switch (operation) {
case JStudio::data::UNK_0x18:
JUT_ASSERT(203, pContent!=NULL);
JUT_ASSERT(204, uSize!=0);
field_0x13c = adaptor_object_findJSGObject_((const char*)pContent);
break;
}
}
void JStudio_JStage::TAdaptor_actor::adaptor_do_PARENT_NODE(
JStudio::data::TEOperationData operation, void const* pContent, u32 uSize) {
switch (operation) {
case JStudio::data::UNK_0x18:
JUT_ASSERT(226, pContent!=NULL);
JUT_ASSERT(227, uSize!=0);
field_0x140 = adaptor_object_findJSGObjectNode_(field_0x13c, (const char*)pContent);
break;
case JStudio::data::UNK_0x19:
JUT_ASSERT(237, uSize==4);
JUT_ASSERT(238, pContent!=NULL);
field_0x140 = *(u32*)pContent;
break;
}
}
void JStudio_JStage::TAdaptor_actor::adaptor_do_PARENT_ENABLE(
JStudio::data::TEOperationData operation, void const* pContent, u32 uSize) {
switch (operation) {
case JStudio::data::UNK_0x2:
JUT_ASSERT(257, uSize==4);
JUT_ASSERT(258, pContent!=NULL);
bool v0 = (*(u32*)pContent != 0);
if (field_0x144 != v0) {
field_0x144 = v0;
switch (field_0x138) {
case 0:
break;
case 1:
JStage::TObject* object = NULL;
u32 v1 = -1;
if (v0 != 0) {
object = field_0x13c;
v1 = field_0x140;
}
pJSGObject_->JSGSetParent(object, v1);
break;
}
}
break;
}
}
void JStudio_JStage::TAdaptor_actor::adaptor_do_PARENT_FUNCTION(
JStudio::data::TEOperationData operation, void const* pContent, u32 uSize) {
switch (operation) {
case JStudio::data::UNK_0x2:
JUT_ASSERT(303, uSize==4);
JUT_ASSERT(304, pContent!=NULL);
field_0x138 = *(u32*)pContent;
break;
}
}
void JStudio_JStage::TAdaptor_actor::adaptor_do_RELATION(
JStudio::data::TEOperationData operation, void const* pContent, u32 uSize) {
switch (operation) {
case JStudio::data::UNK_0x18:
JUT_ASSERT(324, pContent!=NULL);
JUT_ASSERT(325, uSize!=0);
field_0x148 = adaptor_object_findJSGObject_((const char*)pContent);
break;
}
}
void JStudio_JStage::TAdaptor_actor::adaptor_do_RELATION_NODE(
JStudio::data::TEOperationData operation, void const* pContent, u32 uSize) {
switch (operation) {
case JStudio::data::UNK_0x18:
JUT_ASSERT(347, pContent!=NULL);
JUT_ASSERT(348, uSize!=0);
field_0x14c = adaptor_object_findJSGObjectNode_(field_0x13c, (const char*)pContent);
break;
case JStudio::data::UNK_0x19:
JUT_ASSERT(358, uSize==4);
JUT_ASSERT(359, pContent!=NULL);
field_0x14c = *(u32*)pContent;
break;
}
}
void JStudio_JStage::TAdaptor_actor::adaptor_do_RELATION_ENABLE(
JStudio::data::TEOperationData operation, void const* pContent, u32 uSize) {
switch (operation) {
case JStudio::data::UNK_0x2:
JUT_ASSERT(378, uSize==4);
JUT_ASSERT(379, pContent!=NULL);
pJSGObject_->JSGSetRelation(*(u32*)pContent, field_0x148, field_0x14c);
break;
}
}
void JStudio_JStage::TAdaptor_actor::setJSG_ID_(void (JStage::TActor::*function)(u32),
JStudio::data::TEOperationData operation,
void const* pContent, u32 uSize) {
switch (operation) {
case JStudio::data::UNK_0x19:
(((JStage::TActor*)pJSGObject_)->*function)(*(u32*)pContent);
break;
}
}
void JStudio_JStage::TAdaptor_actor::setJSG_SRT_(JStudio::TControl const* pControl) {
JStudio::TControl::TTransform_translation_rotation_scaling transform;
JStudio::TControl::TTransform_translation_rotation_scaling multipliedTransform;
adaptor_getVariableValue_Vec(&transform.translation, sauVariableValue_3_TRANSLATION_XYZ);
adaptor_getVariableValue_Vec(&transform.rotation, sauVariableValue_3_ROTATION_XYZ);
adaptor_getVariableValue_Vec(&transform.scaling, sauVariableValue_3_SCALING_XYZ);
const JStudio::TControl::TTransform_translation_rotation_scaling* pTransform;
if (field_0x144 == 0) {
pTransform = pControl->transformOnSet_transform_ifEnabled(transform, &multipliedTransform);
} else {
pTransform = &transform;
switch (field_0x138) {
case 0: {
Mtx mtx;
bool check;
if (!transform_toGlobalFromLocal(mtx, *pTransform, field_0x13c, field_0x140)) {
check = false;
} else {
JStudio::math::getFromTransformation_SRxyzT(
&multipliedTransform.scaling, &multipliedTransform.rotation,
&multipliedTransform.translation, mtx);
check = true;
}
if (!check) {
return;
}
pTransform = &multipliedTransform;
break;
}
case 1:
break;
}
}
JStage::TActor* pActor = get_pJSG_();
pActor->JSGSetTranslation(pTransform->translation);
pActor->JSGSetRotation(pTransform->rotation);
pActor->JSGSetScaling(pTransform->scaling);
}
void JStudio_JStage::TAdaptor_actor::getJSG_SRT_(JStudio::TControl const* pControl) {
JStudio::TControl::TTransform_translation_rotation_scaling transform;
JStudio::TControl::TTransform_translation_rotation_scaling trs;
Mtx mtx;
JStage::TActor* pActor = get_pJSG_();
pActor->JSGGetTranslation(&transform.translation);
pActor->JSGGetRotation(&transform.rotation);
pActor->JSGGetScaling(&transform.scaling);
JStudio::TControl::TTransform_translation_rotation_scaling* outTransform;
if (!field_0x144) {
outTransform = pControl->transformOnGet_transform_ifEnabled(&transform, &trs);
} else {
outTransform = &transform;
switch (field_0x138) {
case 1:
break;
case 0:
bool check;
if (!transform_toLocalFromGlobal(mtx, *outTransform, field_0x13c, field_0x140)) {
check = false;
} else {
JStudio::math::getFromTransformation_SRxyzT(&trs.scaling, &trs.rotation,
&trs.translation, mtx);
check = true;
}
if (!check) {
return;
}
outTransform = &trs;
break;
}
}
adaptor_setVariableValue_Vec(sauVariableValue_3_TRANSLATION_XYZ,
outTransform->translation);
adaptor_setVariableValue_Vec(sauVariableValue_3_ROTATION_XYZ, outTransform->rotation);
adaptor_setVariableValue_Vec(sauVariableValue_3_SCALING_XYZ, outTransform->scaling);
}
void JStudio_JStage::TAdaptor_actor::TVVOutput_ANIMATION_FRAME_::operator()(
f32 param_1, JStudio::TAdaptor* adaptor) const {
JStage::TActor* actor = static_cast<TAdaptor_actor*>(adaptor)->get_pJSG_();
// not sure what this bit is
u32 idx = *(u32*)(((u32)adaptor - 1) + field_0x8);
u8 idx_lowBytes = idx;
u8 idx_highBytes = idx >> 8;
f32 maxVal = (actor->*mMaxGetter)();
switch (idx_highBytes) {
case 1:
param_1 = maxVal - param_1;
break;
case 0:
break;
}
if (maxVal > 0.0f) {
param_1 = (f32)(*JStudio::TFunctionValue::toFunction_outside(idx_lowBytes))(param_1, maxVal);
}
(actor->*mSetter)(param_1);
}
JStudio_JStage::TAdaptor_actor::TVVOutput_ANIMATION_FRAME_::~TVVOutput_ANIMATION_FRAME_() {
}
namespace JStudio_JStage {
const TAdaptor_actor::TVVOutputObject TAdaptor_actor::saoVVOutput_[] = {
TVVOutputObject(TAdaptor_actor::TEACTOR_1, &JStage::TActor::JSGSetAnimationTransition, &JStage::TActor::JSGGetAnimationTransition),
TVVOutputObject()
};
const TAdaptor_actor::TVVOutput_ANIMATION_FRAME_ TAdaptor_actor::saoVVOutput_ANIMATION_FRAME_[] = {
TVVOutput_ANIMATION_FRAME_(0, 305, &JStage::TActor::JSGSetAnimationFrame, &JStage::TActor::JSGGetAnimationFrame, &JStage::TActor::JSGGetAnimationFrameMax),
TVVOutput_ANIMATION_FRAME_(2, 309, &JStage::TActor::JSGSetTextureAnimationFrame, &JStage::TActor::JSGGetTextureAnimationFrame, &JStage::TActor::JSGGetTextureAnimationFrameMax),
TVVOutput_ANIMATION_FRAME_()
};
}; // namespace JStudio_JStage
@@ -0,0 +1,42 @@
//
// object-ambientlight
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio_JStage/object-ambientlight.h"
JStudio_JStage::TAdaptor_ambientLight::TAdaptor_ambientLight(JStage::TSystem const* param_1,
JStage::TAmbientLight* param_2)
: TAdaptor_object_(this, param_1, param_2) {}
JStudio_JStage::TAdaptor_ambientLight::~TAdaptor_ambientLight() {
adaptor_do_end();
}
void JStudio_JStage::TAdaptor_ambientLight::adaptor_do_prepare() {
}
void JStudio_JStage::TAdaptor_ambientLight::adaptor_do_begin() {
adaptor_object_begin_();
JStage::TAmbientLight* light = get_pJSG_();
GXColor color = light->JSGGetColor();
adaptor_setVariableValue_GXColor(sauVariableValue_4_COLOR_RGBA, color);
}
void JStudio_JStage::TAdaptor_ambientLight::adaptor_do_end() {
adaptor_object_end_();
}
void JStudio_JStage::TAdaptor_ambientLight::adaptor_do_update(u32 param_1) {
JStage::TAmbientLight* lightObj = get_pJSG_();
GXColor color;
adaptor_getVariableValue_GXColor(&color, sauVariableValue_4_COLOR_RGBA);
lightObj->JSGSetColor(color);
pJSGObject_->JSGUpdate();
}
void JStudio_JStage::TAdaptor_ambientLight::adaptor_do_data(void const* param_1, u32 param_2,
void const* param_3, u32 param_4) {
adaptor_object_data_(param_1, param_2, param_3, param_4);
}
@@ -0,0 +1,293 @@
//
// object-camera
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio_JStage/object-camera.h"
JStudio_JStage::TAdaptor_camera::TAdaptor_camera(JStage::TSystem const* param_1,
JStage::TCamera* param_2)
: TAdaptor_object_(this, param_1, param_2) {
field_0x108 = 0;
field_0x10c = 0;
field_0x110 = -1;
field_0x114 = 0;
field_0x118 = 0;
field_0x11c = -1;
field_0x120 = 0;
}
JStudio_JStage::TAdaptor_camera::~TAdaptor_camera() {
adaptor_do_end();
}
JStudio_JStage::TAdaptor_camera::TVVOutput JStudio_JStage::TAdaptor_camera::saoVVOutput_[5] = {
TVVOutput(JStudio_JStage::TAdaptor_camera::TECAMERA_7, &JStage::TCamera::JSGSetViewRoll,
&JStage::TCamera::JSGGetViewRoll),
TVVOutput(JStudio_JStage::TAdaptor_camera::TECAMERA_6, &JStage::TCamera::JSGSetProjectionFovy,
&JStage::TCamera::JSGGetProjectionFovy),
TVVOutput(JStudio_JStage::TAdaptor_camera::TECAMERA_8, &JStage::TCamera::JSGSetProjectionNear,
&JStage::TCamera::JSGGetProjectionNear),
TVVOutput(JStudio_JStage::TAdaptor_camera::TECAMERA_9, &JStage::TCamera::JSGSetProjectionFar,
&JStage::TCamera::JSGGetProjectionFar),
TVVOutput(),
};
void JStudio_JStage::TAdaptor_camera::adaptor_do_prepare() {
TVVOutput* pOutput = saoVVOutput_;
while (!pOutput->isEnd_()) {
pOutput->adaptor_setOutput_(this);
pOutput++;
}
}
void JStudio_JStage::TAdaptor_camera::adaptor_do_begin() {
adaptor_object_begin_();
JStage::TCamera* pCamera = get_pJSG_();
const JStudio::TObject* pObject = adaptor_getObject();
JUT_ASSERT(70, pObject != NULL);
const JStudio::TControl* pControl = pObject->getControl();
JUT_ASSERT(72, pControl != NULL);
getJSG_position_(pControl);
getJSG_targetPosition_(pControl);
TVVOutput* pOutput = saoVVOutput_;
while (!pOutput->isEnd_()) {
pOutput->setVariableValue_(pCamera, this);
pOutput++;
}
}
void JStudio_JStage::TAdaptor_camera::adaptor_do_end() {
adaptor_object_end_();
}
void JStudio_JStage::TAdaptor_camera::adaptor_do_update(u32 param_1) {
const JStudio::TObject* pObject = adaptor_getObject();
JUT_ASSERT(98, pObject != NULL);
const JStudio::TControl* pControl = pObject->getControl();
JUT_ASSERT(100, pControl != NULL);
setJSG_position_(pControl);
setJSG_targetPosition_(pControl);
pJSGObject_->JSGUpdate();
}
void JStudio_JStage::TAdaptor_camera::adaptor_do_data(void const* param_1, u32 param_2,
void const* param_3, u32 param_4) {
adaptor_object_data_(param_1, param_2, param_3, param_4);
}
void JStudio_JStage::TAdaptor_camera::adaptor_do_PARENT(JStudio::data::TEOperationData param_1,
void const* pContent, u32 uSize) {
switch(param_1) {
case JStudio::data::UNK_0x18:
JUT_ASSERT(132, pContent!=NULL);
JUT_ASSERT(133, uSize!=0);
field_0x10c = adaptor_object_findJSGObject_((char*)pContent);
break;
}
}
void JStudio_JStage::TAdaptor_camera::adaptor_do_PARENT_NODE(JStudio::data::TEOperationData param_1,
void const* pContent, u32 uSize) {
switch (param_1) {
case JStudio::data::UNK_0x18:
JUT_ASSERT(155, pContent!=NULL);
JUT_ASSERT(156, uSize!=0);
field_0x110 = adaptor_object_findJSGObjectNode_(field_0x10c, (char*)pContent);
break;
case JStudio::data::UNK_0x19:
JUT_ASSERT(166, uSize==4);
JUT_ASSERT(167, pContent!=NULL);
field_0x110 = *(int*)pContent;
break;
}
}
void
JStudio_JStage::TAdaptor_camera::adaptor_do_PARENT_ENABLE(JStudio::data::TEOperationData param_1,
void const* pContent, u32 uSize) {
switch (param_1) {
case JStudio::data::UNK_0x2:
JUT_ASSERT(185, uSize==4);
JUT_ASSERT(186, pContent!=NULL);
field_0x114 = *(u32*)pContent ? true : false;
switch(field_0x108) {
case 1: {
JStage::TObject* parent = 0;
int idx = -1;
if (field_0x114 != 0) {
parent = field_0x10c;
idx = field_0x110;
}
pJSGObject_->JSGSetParent(parent, idx);
break;
}
case 0:
break;
}
break;
}
}
void
JStudio_JStage::TAdaptor_camera::adaptor_do_PARENT_FUNCTION(JStudio::data::TEOperationData param_1,
void const* pContent, u32 uSize) {
switch(param_1) {
case JStudio::data::UNK_0x2:
JUT_ASSERT(226, uSize==4);
JUT_ASSERT(227, pContent!=NULL);
field_0x108 = *(int*)pContent;
break;
}
}
void JStudio_JStage::TAdaptor_camera::adaptor_do_TARGET_PARENT(
JStudio::data::TEOperationData param_1, void const* pContent, u32 uSize) {
switch(param_1) {
case JStudio::data::UNK_0x18:
JUT_ASSERT(247, pContent!=NULL);
JUT_ASSERT(248, uSize!=0);
field_0x118 = adaptor_object_findJSGObject_((char*)pContent);
break;
}
}
void JStudio_JStage::TAdaptor_camera::adaptor_do_TARGET_PARENT_NODE(
JStudio::data::TEOperationData param_1, void const* pContent, u32 uSize) {
switch (param_1) {
case JStudio::data::UNK_0x18:
JUT_ASSERT(270, pContent!=NULL);
JUT_ASSERT(271, uSize!=0);
field_0x11c = adaptor_object_findJSGObjectNode_(field_0x118, (char*)pContent);
break;
case JStudio::data::UNK_0x19:
JUT_ASSERT(282, uSize==4);
JUT_ASSERT(283, pContent!=NULL);
field_0x11c = *(int*)pContent;
break;
}
}
void JStudio_JStage::TAdaptor_camera::adaptor_do_TARGET_PARENT_ENABLE(
JStudio::data::TEOperationData param_1, void const* pContent, u32 uSize) {
switch(param_1) {
case JStudio::data::UNK_0x2:
JUT_ASSERT(301, uSize==4);
JUT_ASSERT(302, pContent!=NULL);
field_0x120 = *(int*)pContent ? 1 : 0;
break;
}
}
void JStudio_JStage::TAdaptor_camera::setJSG_position_(JStudio::TControl const* param_1) {
JStudio::TControl::TTransform_position VStack_138;
JStudio::TControl::TTransform_position VStack_144;
adaptor_getVariableValue_Vec(&VStack_138, sauVariableValue_3_POSITION_XYZ);
const Vec* pViewPosition;
if (field_0x114 == 0) {
pViewPosition = param_1->transformOnSet_transform_ifEnabled(VStack_138, &VStack_144);
} else {
pViewPosition = &VStack_138;
switch (field_0x108) {
case 0: {
int iVar1 =
transform_toGlobalFromLocal(&VStack_144, VStack_138, field_0x10c, field_0x110);
if (iVar1 == 0) {
return;
}
pViewPosition = &VStack_144;
break;
}
case 1:
break;
}
}
get_pJSG_()->JSGSetViewPosition(*pViewPosition);
}
void JStudio_JStage::TAdaptor_camera::getJSG_position_(JStudio::TControl const* param_1) {
Mtx mtx;
JStudio::TControl::TTransform_position transform;
JStudio::TControl::TTransform_position tempTransform;
const JStudio::TControl::TTransform_position* outTransform;
get_pJSG_()->JSGGetViewPosition(&transform);
if (!field_0x114) {
outTransform = param_1->transformOnGet_transform_ifEnabled(transform, &tempTransform);
} else {
outTransform = &transform;
switch (field_0x108) {
case 0:
bool check;
if (!transform_toLocalFromGlobal(mtx, *outTransform, field_0x10c, field_0x110)) {
check = false;
} else {
tempTransform.x = mtx[0][3];
tempTransform.y = mtx[1][3];
tempTransform.z = mtx[2][3];
check = true;
}
if (!check) {
return;
}
outTransform = &tempTransform;
break;
case 1:
break;
}
}
adaptor_setVariableValue_Vec(sauVariableValue_3_POSITION_XYZ, *outTransform);
}
void JStudio_JStage::TAdaptor_camera::setJSG_targetPosition_(JStudio::TControl const* param_1) {
JStudio::TControl::TTransform_position transform;
JStudio::TControl::TTransform_position tempTransform;
const JStudio::TControl::TTransform_position* outTransform;
adaptor_getVariableValue_Vec(&transform, sauVariableValue_3_TARGET_POSITION_XYZ);
if (field_0x120 == 0) {
outTransform = param_1->transformOnSet_transform_ifEnabled(
transform, &tempTransform);
} else {
if (transform_toGlobalFromLocal(&tempTransform, transform,
field_0x118, field_0x11c) == 0) {
return;
}
outTransform = &tempTransform;
}
get_pJSG_()->JSGSetViewTargetPosition(*outTransform);
}
void JStudio_JStage::TAdaptor_camera::getJSG_targetPosition_(JStudio::TControl const* param_1) {
Mtx mtx;
JStudio::TControl::TTransform_position transform;
JStudio::TControl::TTransform_position tempTransform;
const JStudio::TControl::TTransform_position* outTransform;
get_pJSG_()->JSGGetViewTargetPosition(&transform);
if (!field_0x120) {
outTransform = param_1->transformOnGet_transform_ifEnabled(transform, &tempTransform);
} else {
outTransform = &transform;
bool check;
if (!transform_toLocalFromGlobal(mtx, *outTransform, field_0x118, field_0x11c)) {
check = false;
} else {
tempTransform.x = mtx[0][3];
tempTransform.y = mtx[1][3];
tempTransform.z = mtx[2][3];
check = true;
}
if (!check) {
return;
}
outTransform = &tempTransform;
}
adaptor_setVariableValue_Vec(sauVariableValue_3_TARGET_POSITION_XYZ, *outTransform);
}
@@ -0,0 +1,58 @@
//
// object-fog
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio_JStage/object-fog.h"
JStudio_JStage::TAdaptor_fog::TAdaptor_fog(JStage::TSystem const* param_0, JStage::TFog* param_1)
: TAdaptor_object_(this, param_0, param_1) {}
JStudio_JStage::TAdaptor_fog::~TAdaptor_fog() {
adaptor_do_end();
}
JStudio_JStage::TVariableValueOutput_object_<JStudio_JStage::TAdaptor_fog, JStage::TFog> JStudio_JStage::TAdaptor_fog::saoVVOutput_[3] = {
JStudio_JStage::TVariableValueOutput_object_<JStudio_JStage::TAdaptor_fog, JStage::TFog>(JStudio_JStage::TAdaptor_fog::TEFOG_4, &JStage::TFog::JSGSetStartZ, &JStage::TFog::JSGGetStartZ),
JStudio_JStage::TVariableValueOutput_object_<JStudio_JStage::TAdaptor_fog, JStage::TFog>(JStudio_JStage::TAdaptor_fog::TEFOG_5, &JStage::TFog::JSGSetEndZ, &JStage::TFog::JSGGetEndZ),
JStudio_JStage::TVariableValueOutput_object_<JStudio_JStage::TAdaptor_fog, JStage::TFog>(),
};
void JStudio_JStage::TAdaptor_fog::adaptor_do_prepare() {
TVariableValueOutput_object_<JStudio_JStage::TAdaptor_fog, JStage::TFog>* pOutput =
saoVVOutput_;
while (!pOutput->isEnd_()) {
pOutput->adaptor_setOutput_(this);
pOutput++;
}
}
void JStudio_JStage::TAdaptor_fog::adaptor_do_begin() {
adaptor_object_begin_();
JStage::TFog* pFog = get_pJSG_();
adaptor_setVariableValue_GXColor(sauVariableValue_4_COLOR_RGBA, pFog->JSGGetColor());
TVariableValueOutput_object_<JStudio_JStage::TAdaptor_fog, JStage::TFog>* pOutput =
saoVVOutput_;
while (!pOutput->isEnd_()) {
pOutput->setVariableValue_(pFog, this);
pOutput++;
}
}
void JStudio_JStage::TAdaptor_fog::adaptor_do_end() {
adaptor_object_end_();
}
void JStudio_JStage::TAdaptor_fog::adaptor_do_update(u32 param_1) {
JStage::TFog* pFog = get_pJSG_();
GXColor color;
adaptor_getVariableValue_GXColor(&color, sauVariableValue_4_COLOR_RGBA);
pFog->JSGSetColor(color);
pJSGObject_->JSGUpdate();
}
void JStudio_JStage::TAdaptor_fog::adaptor_do_data(void const* param_1, u32 param_2,
void const* param_3, u32 param_4) {
adaptor_object_data_(param_1, param_2, param_3, param_4);
}
@@ -0,0 +1,158 @@
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio_JStage/object-light.h"
JStudio_JStage::TAdaptor_light::TAdaptor_light(JStage::TSystem const* param_1,
JStage::TLight* param_2)
: JStudio_JStage::TAdaptor_object_(this, param_1, param_2) {
field_0x11c = 0;
}
JStudio_JStage::TAdaptor_light::~TAdaptor_light() {
adaptor_do_end();
}
JStudio_JStage::TAdaptor_light::TVVOutput_direction_
JStudio_JStage::TAdaptor_light::saoVVOutput_direction_[6] = {
JStudio_JStage::TAdaptor_light::TVVOutput_direction_(
JStudio_JStage::TAdaptor_light::TE_VALUE_10,
JStudio_JStage::TAdaptor_light::DIRECTION_1),
JStudio_JStage::TAdaptor_light::TVVOutput_direction_(
JStudio_JStage::TAdaptor_light::TE_VALUE_11,
JStudio_JStage::TAdaptor_light::DIRECTION_1),
JStudio_JStage::TAdaptor_light::TVVOutput_direction_(
JStudio_JStage::TAdaptor_light::TE_VALUE_7,
JStudio_JStage::TAdaptor_light::DIRECTION_2),
JStudio_JStage::TAdaptor_light::TVVOutput_direction_(
JStudio_JStage::TAdaptor_light::TE_VALUE_8,
JStudio_JStage::TAdaptor_light::DIRECTION_2),
JStudio_JStage::TAdaptor_light::TVVOutput_direction_(
JStudio_JStage::TAdaptor_light::TE_VALUE_9,
JStudio_JStage::TAdaptor_light::DIRECTION_2),
JStudio_JStage::TAdaptor_light::TVVOutput_direction_(),
};
void JStudio_JStage::TAdaptor_light::adaptor_do_prepare() {
TVVOutput_direction_* pOutput = saoVVOutput_direction_;
while (!pOutput->isEnd_()) {
pOutput->adaptor_setOutput_(this);
pOutput++;
}
}
void JStudio_JStage::TAdaptor_light::adaptor_do_begin() {
{
adaptor_object_begin_();
JStage::TLight* pLightObj = get_pJSG_();
const JStudio::TObject* pObject = adaptor_getObject();
JUT_ASSERT(60, pObject!=NULL);
const JStudio::TControl* pControl = pObject->getControl();
JUT_ASSERT(62, pControl!=NULL);
GXColor lightColor = pLightObj->JSGGetColor();
adaptor_setVariableValue_GXColor(sauVariableValue_4_COLOR_RGBA, lightColor);
JStudio::TControl::TTransform_position_direction lightObjTransform;
JStudio::TControl::TTransform_position_direction aTStack_b8;
pLightObj->JSGGetPosition(&lightObjTransform.position);
pLightObj->JSGGetDirection(&lightObjTransform.direction);
const JStudio::TControl::TTransform_position_direction* finalTransform =
(const JStudio::TControl::TTransform_position_direction*)
pControl->transformOnGet_transform_ifEnabled(lightObjTransform, &aTStack_b8);
adaptor_setVariableValue_Vec(sauVariableValue_3_POSITION_XYZ, finalTransform->position);
f32 dirx = finalTransform->direction.x;
f32 diry = finalTransform->direction.y;
f32 dirz = finalTransform->direction.z;
f32 sqr = sqrtf(dirx * dirx + dirz * dirz);
f32 dVar11 = atan2f(dirx, dirz);
f32 dVar9 = atan2f(diry, sqr);
adaptor_setVariableValue_immediate(10, MTXRadToDeg(dVar11));
adaptor_setVariableValue_immediate(11, MTXRadToDeg(dVar9));
Vec VStack_c4;
VECAdd(&finalTransform->position, &finalTransform->direction, &VStack_c4);
adaptor_setVariableValue_Vec(sauVariableValue_3_TARGET_POSITION_XYZ, VStack_c4);
}
}
void JStudio_JStage::TAdaptor_light::adaptor_do_end() {
adaptor_object_end_();
}
void JStudio_JStage::TAdaptor_light::adaptor_do_update(u32 param_1) {
JStage::TLight* lightObj = get_pJSG_();
const JStudio::TObject* pObject = adaptor_getObject();
JUT_ASSERT(118, pObject!=NULL);
const JStudio::TControl* pControl = pObject->getControl();
JUT_ASSERT(120, pControl!=NULL);
GXColor lightColor;
adaptor_getVariableValue_GXColor(&lightColor, sauVariableValue_4_COLOR_RGBA);
lightObj->JSGSetColor(lightColor);
JStudio::TControl::TTransform_position_direction VStack_198;
JStudio::TControl::TTransform_position_direction aTStack_1b0;
adaptor_getVariableValue_Vec(&VStack_198.position, sauVariableValue_3_POSITION_XYZ);
switch (field_0x11c) {
case 1: {
f32 dVar10 = adaptor_getVariableValue(10)->getValue();
f32 dVar11 = adaptor_getVariableValue(11)->getValue();
f32 temp = MTXDegToRad(dVar11);
f32 dVar12 = cosf(temp);
f32 sinVal = sinf(temp);
f32 temp2 = MTXDegToRad(dVar10);
VStack_198.direction.x = dVar12 * sinf(temp2);
VStack_198.direction.y = sinVal;
VStack_198.direction.z = dVar12 * cosf(temp2);
break;
}
case 2:
Vec VStack_1c0;
adaptor_getVariableValue_Vec(&VStack_1c0, sauVariableValue_3_TARGET_POSITION_XYZ);
VECSubtract(&VStack_1c0, &VStack_198.position, &VStack_198.direction);
}
const JStudio::TControl::TTransform_position_direction* pTrans =
pControl->transformOnSet_transform_ifEnabled(VStack_198, &aTStack_1b0);
lightObj->JSGSetPosition(pTrans->position);
lightObj->JSGSetDirection(pTrans->direction);
pJSGObject_->JSGUpdate();
}
void JStudio_JStage::TAdaptor_light::adaptor_do_data(void const* param_1, u32 param_2,
void const* param_3, u32 param_4) {
adaptor_object_data_(param_1, param_2, param_3, param_4);
}
void JStudio_JStage::TAdaptor_light::adaptor_do_FACULTY(JStudio::data::TEOperationData param_1,
void const* pContent, u32 uSize) {
switch (param_1) {
case JStudio::data::UNK_0x2:
JUT_ASSERT(198, uSize==4);
JUT_ASSERT(199, pContent!=NULL);
JStage::TELight lightType;
switch (*(u32*)pContent) {
case 0x301:
lightType = JStage::TELIGHT_1;
break;
case 0x302:
lightType = JStage::TELIGHT_2;
break;
case 0x303:
lightType = JStage::TELIGHT_3;
break;
default:
// TODO: find out how to lose the goto
goto end;
}
get_pJSG_()->JSGSetLightType(lightType);
break;
}
end:;
}
void JStudio_JStage::TAdaptor_light::adaptor_do_ENABLE(JStudio::data::TEOperationData param_1,
void const* param_2, u32 param_3) {
adaptor_object_ENABLE_(param_1, param_2, param_3);
}
void JStudio_JStage::TAdaptor_light::TVVOutput_direction_::operator()(
f32 param_0, JStudio::TAdaptor* param_1) const {
JStudio_JStage::TAdaptor_light* p = (JStudio_JStage::TAdaptor_light*)param_1;
JUT_ASSERT(246, p!=NULL);
p->field_0x11c = field_0x8;
}
@@ -0,0 +1,123 @@
//
// object
//
#include "JSystem/JSystem.h" // IWYU pragma: keep
#include "JSystem/JStudio/JStudio_JStage/object.h"
bool JStudio_JStage::transform_toGlobalFromLocal(
f32 (*param_1)[4], JStudio::TControl::TTransform_translation_rotation_scaling const& param_2,
JStage::TObject const* param_3, u32 param_4) {
if (param_3 == NULL) {
return false;
}
Mtx nodeTransformMtx;
if (!param_3->JSGGetNodeTransformation(param_4, nodeTransformMtx)) {
return false;
}
Mtx amStack_70;
JStudio::math::getTransformation_SRxyzT(amStack_70, param_2.scaling, param_2.rotation,
param_2.translation);
MTXConcat(nodeTransformMtx, amStack_70, param_1);
return true;
}
bool JStudio_JStage::transform_toGlobalFromLocal(
f32 (*param_1)[4], JStudio::TControl::TTransform_position const& param_2,
JStage::TObject const* param_3, u32 param_4) {
if (param_3 == NULL) {
return false;
}
Mtx nodeTransformMtx;
if (!param_3->JSGGetNodeTransformation(param_4, nodeTransformMtx)) {
return false;
}
Mtx amStack_70;
JStudio::math::getTransformation_T(amStack_70, &param_2);
MTXConcat(nodeTransformMtx, amStack_70, param_1);
return true;
}
bool JStudio_JStage::transform_toLocalFromGlobal(
f32 (*param_1)[4], JStudio::TControl::TTransform_translation_rotation_scaling const& param_2,
JStage::TObject const* param_3, u32 param_4) {
if (param_3 == NULL) {
return false;
}
Mtx nodeTransformMtx;
if (!param_3->JSGGetNodeTransformation(param_4, nodeTransformMtx)) {
return false;
}
Mtx afStack_70;
JStudio::math::getTransformation_SRxyzT(afStack_70, param_2.scaling, param_2.rotation,
param_2.translation);
Mtx auStack_a0;
MTXInverse(nodeTransformMtx, auStack_a0);
MTXConcat(auStack_a0, afStack_70, param_1);
return true;
}
bool JStudio_JStage::transform_toLocalFromGlobal(
f32 (*param_1)[4], JStudio::TControl::TTransform_position const& param_2,
JStage::TObject const* param_3, u32 param_4) {
if (param_3 == NULL) {
return false;
}
Mtx nodeTransformMtx;
if (!param_3->JSGGetNodeTransformation(param_4, nodeTransformMtx)) {
return false;
}
Mtx afStack_70;
JStudio::math::getTransformation_T(afStack_70, &param_2);
Mtx auStack_a0;
MTXInverse(nodeTransformMtx, auStack_a0);
MTXConcat(auStack_a0, afStack_70, param_1);
return true;
}
void JStudio_JStage::TAdaptor_object_::adaptor_object_data_(void const* param_1, u32 param_2,
void const* param_3, u32 param_4) {
int uVar3;
if (param_2 == 0) {
uVar3 = JStage::TActor::ID_NORMAL;
} else {
uVar3 = *(int*)param_1;
}
pJSGObject_->JSGSetData(uVar3, param_3, param_4);
}
JStage::TObject*
JStudio_JStage::TAdaptor_object_::adaptor_object_findJSGObject_(char const* param_1) {
JStage::TObject* pJSGObject;
if (pJSGSystem_->JSGFindObject(&pJSGObject, param_1, JStage::OBJECT_UNDEFINED) == 0) {
JUT_ASSERT(122, pJSGObject != NULL);
} else {
return NULL;
}
return pJSGObject;
}
s32 JStudio_JStage::TAdaptor_object_::adaptor_object_findJSGObjectNode_(
JStage::TObject const* param_1, char const* param_2) {
if (param_1 == NULL) {
return -1;
}
return param_1->JSGFindNodeID(param_2);
}
void
JStudio_JStage::TAdaptor_object_::adaptor_object_ENABLE_(JStudio::data::TEOperationData param_1,
void const* pContent, u32 uSize) {
switch (param_1) {
case JStudio::data::UNK_0x2:
JUT_ASSERT(157, uSize==4);
JUT_ASSERT(158, pContent!=NULL);
if (*(u32*)pContent != 0) {
pJSGObject_->JSGFEnableFlag(2);
} else {
pJSGObject_->JSGFDisableFlag(2);
}
break;
}
}