Simplify and improve AnimState class

This commit is contained in:
stujones11 2018-05-26 21:19:50 +01:00
parent 16ee1d80a7
commit 608bbcc546
2 changed files with 26 additions and 46 deletions

View File

@ -557,7 +557,6 @@ bool Viewer::OnEvent(const SEvent &event)
AnimState::AnimState(IGUIEnvironment *env) : AnimState::AnimState(IGUIEnvironment *env) :
env(env), env(env),
frame(0), frame(0),
max(0),
state(E_ANIM_STATE_PAUSED) state(E_ANIM_STATE_PAUSED)
{} {}
@ -567,39 +566,29 @@ void AnimState::load(ISceneNode *node)
if (!model) if (!model)
return; return;
IGUIToolBar *toolbar = getToolBar(); s32 max = model->getEndFrame();
if (!toolbar) bool enabled = (max > 0);
return;
max = model->getEndFrame();
model->setFrameLoop(0, 0);
state = E_ANIM_STATE_PAUSED; state = E_ANIM_STATE_PAUSED;
model->setFrameLoop(0, 0);
initField(E_GUI_ID_ANIM_START, max, enabled);
initField(E_GUI_ID_ANIM_END, max, enabled);
initField(E_GUI_ID_ANIM_FRAME, max, enabled);
initField(E_GUI_ID_ANIM_SPEED, 60, enabled);
setField(E_GUI_ID_ANIM_START, 0); setField(E_GUI_ID_ANIM_START, 0);
setField(E_GUI_ID_ANIM_END, max); setField(E_GUI_ID_ANIM_END, max);
setField(E_GUI_ID_ANIM_FRAME, 0); setField(E_GUI_ID_ANIM_FRAME, 0);
bool enabled = (max > 0); IGUIElement *root = env->getRootGUIElement();
const list<IGUIElement*> &children = toolbar->getChildren(); AnimCtrl *anim = (AnimCtrl*)
list<IGUIElement*>::ConstIterator iter = children.begin(); root->getElementFromId(E_GUI_ID_ANIM_CTRL, true);
while (iter != children.end()) anim->reset(enabled);
if (enabled)
{ {
if ((*iter)->getID() == E_GUI_ID_ANIM_CTRL) IGUIButton *button =
{ (IGUIButton*)anim->getElementFromId(E_GUI_ID_PAUSE, true);
AnimCtrl *anim = (AnimCtrl*)(*iter); button->setPressed(true);
anim->reset(enabled);
if (enabled)
{
IGUIButton *button =
(IGUIButton*)anim->getElementFromId(E_GUI_ID_PAUSE, true);
button->setPressed(true);
}
}
else if ((*iter)->getType() != EGUIET_STATIC_TEXT)
{
(*iter)->setEnabled(enabled);
}
++iter;
} }
} }
@ -610,31 +599,24 @@ void AnimState::update(ISceneNode *node)
setField(E_GUI_ID_ANIM_FRAME, frame); setField(E_GUI_ID_ANIM_FRAME, frame);
} }
IGUIToolBar *AnimState::getToolBar() void AnimState::initField(s32 id, const u32 &max, const bool &enabled)
{ {
IGUIElement *root = env->getRootGUIElement(); IGUIElement *root = env->getRootGUIElement();
return (IGUIToolBar*)root->getElementFromId(E_GUI_ID_TOOLBAR, true); IGUISpinBox *spin = (IGUISpinBox*)root->getElementFromId(id, true);
spin->setRange(0, max);
spin->setEnabled(enabled);
} }
u32 AnimState::getField(s32 id) u32 AnimState::getField(s32 id)
{ {
IGUIToolBar *toolbar = getToolBar(); IGUIElement *root = env->getRootGUIElement();
if (!toolbar) IGUISpinBox *spin = (IGUISpinBox*)root->getElementFromId(id, true);
return 0;
IGUISpinBox *spin;
spin = (IGUISpinBox*)toolbar->getElementFromId(id, true);
return spin->getValue(); return spin->getValue();
} }
void AnimState::setField(s32 id, const u32 &value) void AnimState::setField(s32 id, const u32 &value)
{ {
IGUIToolBar *toolbar = getToolBar(); IGUIElement *root = env->getRootGUIElement();
if (!toolbar) IGUISpinBox *spin = (IGUISpinBox*)root->getElementFromId(id, true);
return; spin->setValue(value);
IGUISpinBox *spin;
spin = (IGUISpinBox*)toolbar->getElementFromId(id, true);
spin->setRange(0, max);
spin->setValue(std::min(value, max));
} }

View File

@ -31,6 +31,7 @@ public:
AnimState(IGUIEnvironment *env); AnimState(IGUIEnvironment *env);
void load(ISceneNode *node); void load(ISceneNode *node);
void update(ISceneNode *node); void update(ISceneNode *node);
void initField(s32 id, const u32 &max, const bool &enabled);
void setField(s32 id, const u32 &value); void setField(s32 id, const u32 &value);
void setState(s32 id) { state = id; } void setState(s32 id) { state = id; }
u32 getField(s32 id); u32 getField(s32 id);
@ -38,11 +39,8 @@ public:
s32 getState() { return state; } s32 getState() { return state; }
private: private:
IGUIToolBar *getToolBar();
IGUIEnvironment *env; IGUIEnvironment *env;
u32 frame; u32 frame;
u32 max;
s32 state; s32 state;
}; };