summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorhatal175 <hatal175@users.noreply.github.com>2024-01-31 02:02:22 +0200
committerGitHub <noreply@github.com>2024-01-30 16:02:22 -0800
commit1c891adeb8a58a62fb3e6a6ff5bb3ec8da00f883 (patch)
treeede5c0fdcc69221a0bc0dbc2e7b326183131cf8a /include
parent16259ec265b11275f3401916904953b943ff7b1d (diff)
work on functionvalue (#2054)
Diffstat (limited to 'include')
-rw-r--r--include/JSystem/JGadget/vector.h18
-rw-r--r--include/JSystem/JStudio/JStudio/functionvalue.h88
2 files changed, 71 insertions, 35 deletions
diff --git a/include/JSystem/JGadget/vector.h b/include/JSystem/JGadget/vector.h
index cd597a6a53..41d1bdce8d 100644
--- a/include/JSystem/JGadget/vector.h
+++ b/include/JSystem/JGadget/vector.h
@@ -34,6 +34,16 @@ struct TVector {
extend = vector::extend_default;
}
+ inline u32 size() const {
+ if (pBegin_ == NULL) {
+ return 0;
+ }
+
+ return ((int)pEnd_ - (int)pBegin_) / 4;
+ }
+
+ void **const begin() const { return pBegin_; }
+ void **const end() const { return pEnd_; }
void** begin() { return pBegin_; }
void** end() { return pEnd_; }
// void erase(void** arg1, void** arg2) {}
@@ -57,9 +67,15 @@ struct TVector_pointer_void : TVector<void*, TAllocator> {
template <typename T>
struct TVector_pointer : TVector_pointer_void {
- // TVector_pointer(const TAllocator<void*>& allocator) : TVector_pointer_void(allocator) {}
+ TVector_pointer(const TAllocator<void*>& allocator) : TVector_pointer_void(allocator) {}
~TVector_pointer() {}
+ const T* begin() const { return (const T*)TVector_pointer_void::begin(); }
+ T* begin() { return (T*)TVector_pointer_void::begin(); }
+
+ const T* end() const { return (const T*)TVector_pointer_void::end(); }
+ T* end() { return (T*)TVector_pointer_void::end(); }
+
void push_back(const T& ref) {
static_cast<TVector_pointer_void*>(this)->push_back((const void*&)ref);
}
diff --git a/include/JSystem/JStudio/JStudio/functionvalue.h b/include/JSystem/JStudio/JStudio/functionvalue.h
index 9450fa776d..9dd8d9abd0 100644
--- a/include/JSystem/JStudio/JStudio/functionvalue.h
+++ b/include/JSystem/JStudio/JStudio/functionvalue.h
@@ -5,8 +5,6 @@
#include "JSystem/JGadget/vector.h"
#include "global.h"
-extern u8 lit_652[];
-
namespace JStudio {
typedef f64 (*ExtrapolateParameter)(f64, f64);
@@ -21,7 +19,7 @@ class TFunctionValueAttribute_interpolate;
class TFunctionValue {
public:
enum TEProgress { PROG_INIT };
- enum TEAdjust { ADJ_INIT };
+ enum TEAdjust { ADJ_INIT, ADJ_UNK1, ADJ_UNK2, ADJ_UNK3, ADJ_UNK4 };
enum TEOutside { OUT_INIT };
enum TEInterpolate {};
@@ -78,8 +76,8 @@ public:
class TFunctionValueAttribute_refer : public JGadget::TVector_pointer<TFunctionValue*> {
public:
- // TFunctionValueAttribute_refer() :
- // JGadget::TVector_pointer<TFunctionValue*>(JGadget::TAllocator<void*>()) {}
+ TFunctionValueAttribute_refer() :
+ JGadget::TVector_pointer<TFunctionValue*>(JGadget::TAllocator<void*>()) {}
~TFunctionValueAttribute_refer() {}
/* 802816E8 */ void refer_initialize();
@@ -112,16 +110,20 @@ public:
void range_setOutside_begin(TFunctionValue::TEOutside begin) { mBegin = begin; }
void range_setOutside_end(TFunctionValue::TEOutside end) { mEnd = end; }
f64 range_getParameter_outside(f64 arg1) const {
- f64 temp = arg1 - fBegin_;
- f64 result = temp;
- if (temp < *(f64*)&lit_652) {
- result = TFunctionValue::toFunction(mBegin)(temp, fDifference_);
- } else if (temp >= fDifference_) {
- result = TFunctionValue::toFunction(mEnd)(temp, fDifference_);
+ f64 result = arg1;
+ result -= fBegin_;
+ if (result < 0.0) {
+ result = TFunctionValue::toFunction(mBegin)(result, fDifference_);
+ } else if (result >= fDifference_) {
+ result = TFunctionValue::toFunction(mEnd)(result, fDifference_);
}
- return result + fBegin_;
+ result += fBegin_;
+ return result;
}
f64 range_getParameter_progress(f64 arg1) const { return _20 + _28 * (arg1 - _20); }
+ f64 range_getBegin() const { return fBegin_;}
+ f64 range_getEnd() const { return fEnd_;}
+ f64 range_getDifference() const { return fDifference_; }
private:
/* 0x00 */ f64 fBegin_;
@@ -176,6 +178,8 @@ public:
TData(f32 data) : f32data(data) {}
inline void operator=(const TData& rhs) { f32data = rhs.f32data; }
+ u32 get_unsignedInteger() const { return u32data; }
+ f64 get_value() const { return f32data; }
union {
const void* rawData;
@@ -196,17 +200,17 @@ public:
/* 80281DE0 */ virtual void initialize();
/* 80281E24 */ virtual void prepare();
/* 80281E28 */ virtual f64 getValue(f64);
- /* 80281E5C */ void composite_raw(TVector_pointer<TFunctionValue*> const&, TData const&, f64);
- /* 80281EC8 */ void composite_index(TVector_pointer<TFunctionValue*> const&, TData const&, f64);
- /* 8028202C */ void composite_parameter(TVector_pointer<TFunctionValue*> const&, TData const&,
- f64);
- /* 80282094 */ void composite_add(TVector_pointer<JStudio::TFunctionValue*> const&,
- TData const&, f64);
- /* 80282118 */ void composite_subtract(TVector_pointer<TFunctionValue*> const&, TData const&,
+ /* 80281E5C */ static f64 composite_raw(TVector_pointer<TFunctionValue*> const&, TData const&, f64);
+ /* 80281EC8 */ static f64 composite_index(TVector_pointer<TFunctionValue*> const&, TData const&, f64);
+ /* 8028202C */ static f64 composite_parameter(TVector_pointer<TFunctionValue*> const&,
+ TData const&, f64);
+ /* 80282094 */ static f64 composite_add(TVector_pointer<JStudio::TFunctionValue*> const&,
+ TData const&, f64);
+ /* 80282118 */ static f64 composite_subtract(TVector_pointer<TFunctionValue*> const&, TData const&,
f64);
- /* 80282200 */ void composite_multiply(TVector_pointer<TFunctionValue*> const&, TData const&,
+ /* 80282200 */ static f64 composite_multiply(TVector_pointer<TFunctionValue*> const&, TData const&,
f64);
- /* 80282284 */ void composite_divide(TVector_pointer<TFunctionValue*> const&, TData const&,
+ /* 80282284 */ static f64 composite_divide(TVector_pointer<TFunctionValue*> const&, TData const&,
f64);
void data_set(CompositeFunc fn, const TData& dat) {
@@ -239,6 +243,8 @@ public:
_50 = a2;
}
+ f64 data_getDifference() const { return _50 - _48; }
+
private:
/* 0x48 */ f64 _48;
/* 0x50 */ f64 _50;
@@ -267,7 +273,7 @@ public:
void data_set(const f32* pf, u32 u) {
ASSERT((pf != NULL) || (u == 0));
_44 = pf;
- _48 = u;
+ uData_ = u;
}
void data_setInterval(f64 f) {
@@ -290,9 +296,9 @@ public:
private:
/* 0x44 */ const f32* _44;
- /* 0x48 */ u32 _48;
+ /* 0x48 */ u32 uData_;
/* 0x50 */ f64 _50;
- /* 0x58 */ update_INTERPOLATE _58;
+ /* 0x58 */ update_INTERPOLATE pfnUpdate_;
};
class TFunctionValue_list_parameter : TFunctionValue,
@@ -304,6 +310,11 @@ public:
TIterator_data_(const TIterator_data_& other) : value_(other.value_) {}
void operator=(const TIterator_data_& rhs) { value_ = rhs.value_; }
+ TIterator_data_& operator--() {
+ value_ -= 2;
+ return *this;
+ }
+ friend bool operator==(const TIterator_data_& lhs, const TIterator_data_& rhs) { return lhs.value_ == rhs.value_; }
const f32* get() const { return value_; }
void set(const f32* value) { value_ = value; }
@@ -331,13 +342,18 @@ public:
/* 80283060 */ static f64
update_INTERPOLATE_BSPLINE_dataMore3_(JStudio::TFunctionValue_list_parameter const&, f64);
+ f64 data_getValue_back() {
+ return pfData_[(uData_ - 1) * 2];
+ }
+ f64 data_getValue_front() { return pfData_[0]; }
+
private:
- /* 0x44 */ const f32* _44;
- /* 0x48 */ u32 _48;
+ /* 0x44 */ const f32* pfData_;
+ /* 0x48 */ u32 uData_;
/* 0x4c */ TIterator_data_ dat1;
/* 0x50 */ TIterator_data_ dat2;
/* 0x54 */ TIterator_data_ dat3;
- /* 0x58 */ update_INTERPOLATE _58;
+ /* 0x58 */ update_INTERPOLATE pfnUpdate_;
};
class TFunctionValue_hermite : TFunctionValue, TFunctionValueAttribute_range {
@@ -347,19 +363,19 @@ public:
value_ = value;
size_ = rParent.data_getSize();
}
- TIterator_data_(const TIterator_data_& other) {
- value_ = other.value_;
- size_ = other.size_;
- }
+
+ const f32* get() { return value_; }
void set(const f32* value, u32 size) {
value_ = value;
size_ = size;
}
+
+ friend bool operator==(const TIterator_data_& lhs, const TIterator_data_& rhs) { return lhs.value_ == rhs.value_; }
- void operator=(const TIterator_data_& rhs) {
- value_ = rhs.value_;
- size_ = rhs.size_;
+ TIterator_data_& operator--() {
+ value_ -= size_;
+ return *this;
}
/* 0x00 */ const f32* value_;
@@ -377,6 +393,10 @@ public:
/* 8028344C */ virtual f64 getValue(f64);
u32 data_getSize() const { return uSize_; }
+ f64 data_getValue_back() {
+ return pf_[(u_ - 1) * uSize_];
+ }
+ f64 data_getValue_front() { return pf_[0]; }
private:
/* 0x40 */ const f32* pf_;