mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-09 07:07:42 +00:00
More widget imps
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
#include "CGuiSliderGroup.hpp"
|
||||
#include "CGuiAnimController.hpp"
|
||||
#include "CGuiLogicalEventTrigger.hpp"
|
||||
|
||||
namespace urde
|
||||
{
|
||||
@@ -12,12 +14,72 @@ void CGuiSliderGroup::LoadWidgetFnMap()
|
||||
WidgetFnMap.emplace(std::make_pair(19, &CGuiSliderGroup::MAF_Decrement));
|
||||
}
|
||||
|
||||
bool CGuiSliderGroup::MAF_Increment(CGuiFunctionDef* def, CGuiControllerInfo* info)
|
||||
CGuiSliderGroup::CGuiSliderGroup(const CGuiWidgetParms& parms, float a, float b, float c, float d)
|
||||
: CGuiCompoundWidget(parms), xf8_minVal(a), xfc_maxVal(b), x100_curVal(c), x104_increment(d)
|
||||
{
|
||||
}
|
||||
|
||||
bool CGuiSliderGroup::MAF_Decrement(CGuiFunctionDef* def, CGuiControllerInfo* info)
|
||||
void CGuiSliderGroup::SetSelectionChangedCallback
|
||||
(std::function<void(const CGuiSliderGroup*, float)>&& func)
|
||||
{
|
||||
x114_changeCallback = std::move(func);
|
||||
}
|
||||
|
||||
bool CGuiSliderGroup::MAF_Increment(CGuiFunctionDef*, CGuiControllerInfo*)
|
||||
{
|
||||
float oldVal = x100_curVal;
|
||||
SetCurVal(x100_curVal + x104_increment);
|
||||
x114_changeCallback(this, oldVal);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CGuiSliderGroup::MAF_Decrement(CGuiFunctionDef*, CGuiControllerInfo*)
|
||||
{
|
||||
float oldVal = x100_curVal;
|
||||
SetCurVal(x100_curVal - x104_increment);
|
||||
x114_changeCallback(this, oldVal);
|
||||
return true;
|
||||
}
|
||||
|
||||
void CGuiSliderGroup::SetCurVal(float cur)
|
||||
{
|
||||
x100_curVal = zeus::clamp(xf8_minVal, cur, xfc_maxVal);
|
||||
float factor = 0.f;
|
||||
if (xfc_maxVal != xf8_minVal)
|
||||
factor = (x100_curVal - xf8_minVal) / (xfc_maxVal - xf8_minVal);
|
||||
|
||||
const zeus::CVector3f& w0Idle = x10c_workers[0]->GetIdlePosition();
|
||||
const zeus::CVector3f& w1Idle = x10c_workers[1]->GetIdlePosition();
|
||||
x10c_workers[0]->SetLocalPosition(zeus::CVector3f::lerp(w0Idle, w1Idle, factor));
|
||||
}
|
||||
|
||||
bool CGuiSliderGroup::AddWorkerWidget(CGuiWidget* worker)
|
||||
{
|
||||
if (worker->GetWorkerId() < 0 || worker->GetWorkerId() > 1)
|
||||
return true;
|
||||
x10c_workers[worker->GetWorkerId()] = worker;
|
||||
return true;
|
||||
}
|
||||
|
||||
CGuiWidget* CGuiSliderGroup::GetWorkerWidget(int id)
|
||||
{
|
||||
if (id < 0 || id > 1)
|
||||
return nullptr;
|
||||
return x10c_workers[id];
|
||||
}
|
||||
|
||||
CGuiSliderGroup* CGuiSliderGroup::Create(CGuiFrame* frame, CInputStream& in, bool flag)
|
||||
{
|
||||
CGuiWidgetParms parms = ReadWidgetHeader(frame, in, flag);
|
||||
|
||||
float min = in.readFloatBig();
|
||||
float max = in.readFloatBig();
|
||||
float cur = in.readFloatBig();
|
||||
float increment = in.readFloatBig();
|
||||
|
||||
CGuiSliderGroup* ret = new CGuiSliderGroup(parms, min, max, cur, increment);
|
||||
ret->ParseBaseInfo(frame, in, parms);
|
||||
return ret;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user