Magic_Game/core/Node/ButtonToggle.cpp

376 lines
8.5 KiB
C++
Raw Blame History

#include "..\enodes.h"
e2d::EButtonToggle::EButtonToggle()
: EButton()
, m_bState(true)
, m_pNormalOn(nullptr)
, m_pMouseoverOn(nullptr)
, m_pSelectedOn(nullptr)
, m_pDisabledOn(nullptr)
, m_pNormalOff(nullptr)
, m_pMouseoverOff(nullptr)
, m_pSelectedOff(nullptr)
, m_pDisabledOff(nullptr)
{
}
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, const BtnClkCallback & callback)
: EButton()
, m_bState(true)
, m_pNormalOn(nullptr)
, m_pMouseoverOn(nullptr)
, m_pSelectedOn(nullptr)
, m_pDisabledOn(nullptr)
, m_pNormalOff(nullptr)
, m_pMouseoverOff(nullptr)
, m_pSelectedOff(nullptr)
, m_pDisabledOff(nullptr)
{
this->setNormal(toggleOnNormal);
this->setNormalOff(toggleOffNormal);
this->setCallback(callback);
}
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, ENode * toggleOnSelected, ENode * toggleOffSelected, const BtnClkCallback & callback)
: EButton()
, m_bState(true)
, m_pNormalOn(nullptr)
, m_pMouseoverOn(nullptr)
, m_pSelectedOn(nullptr)
, m_pDisabledOn(nullptr)
, m_pNormalOff(nullptr)
, m_pMouseoverOff(nullptr)
, m_pSelectedOff(nullptr)
, m_pDisabledOff(nullptr)
{
this->setNormal(toggleOnNormal);
this->setNormalOff(toggleOffNormal);
this->setSelected(toggleOnSelected);
this->setSelectedOff(toggleOffSelected);
this->setCallback(callback);
}
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, ENode * toggleOnMouseOver, ENode * toggleOffMouseOver, ENode * toggleOnSelected, ENode * toggleOffSelected, const BtnClkCallback & callback)
: EButton()
, m_bState(true)
, m_pNormalOn(nullptr)
, m_pMouseoverOn(nullptr)
, m_pSelectedOn(nullptr)
, m_pDisabledOn(nullptr)
, m_pNormalOff(nullptr)
, m_pMouseoverOff(nullptr)
, m_pSelectedOff(nullptr)
, m_pDisabledOff(nullptr)
{
this->setNormal(toggleOnNormal);
this->setNormalOff(toggleOffNormal);
this->setMouseOver(toggleOnMouseOver);
this->setMouseOverOff(toggleOffMouseOver);
this->setSelected(toggleOnSelected);
this->setSelectedOff(toggleOffSelected);
this->setCallback(callback);
}
e2d::EButtonToggle::EButtonToggle(ENode * toggleOnNormal, ENode * toggleOffNormal, ENode * toggleOnMouseOver, ENode * toggleOffMouseOver, ENode * toggleOnSelected, ENode * toggleOffSelected, ENode * toggleOnDisabled, ENode * toggleOffDisabled, const BtnClkCallback & callback)
: EButton()
, m_bState(true)
, m_pNormalOn(nullptr)
, m_pMouseoverOn(nullptr)
, m_pSelectedOn(nullptr)
, m_pDisabledOn(nullptr)
, m_pNormalOff(nullptr)
, m_pMouseoverOff(nullptr)
, m_pSelectedOff(nullptr)
, m_pDisabledOff(nullptr)
{
this->setNormal(toggleOnNormal);
this->setNormalOff(toggleOffNormal);
this->setMouseOver(toggleOnMouseOver);
this->setMouseOverOff(toggleOffMouseOver);
this->setSelected(toggleOnSelected);
this->setSelectedOff(toggleOffSelected);
this->setDisabled(toggleOnDisabled);
this->setDisabledOff(toggleOffDisabled);
this->setCallback(callback);
}
void e2d::EButtonToggle::toggle()
{
// <20><><EFBFBD>ð<EFBFBD>ť״̬
setState(!m_bState);
// ִ<>лص<D0BB><D8B5><EFBFBD><EFBFBD><EFBFBD>
if (m_Callback)
{
m_Callback();
}
}
bool e2d::EButtonToggle::getState() const
{
return m_bState;
}
void e2d::EButtonToggle::setState(bool bState)
{
if (m_bState != bState)
{
m_bState = bState;
_updateState();
_updateVisiable();
}
}
void e2d::EButtonToggle::setNormal(ENode * normal)
{
if (normal != m_pNormalOn)
{
// <20>Ƴ<EFBFBD><C6B3>ɵ<EFBFBD>
if (m_pNormalOn)
{
this->removeChild(m_pNormalOn);
}
// <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>
if (normal)
{
this->addChild(normal);
normal->setPivot(m_fPivotX, m_fPivotY);
}
m_pNormalOn = normal;
_updateState();
_updateVisiable();
}
}
void e2d::EButtonToggle::setMouseOver(ENode * mouseover)
{
if (mouseover != m_pMouseoverOn)
{
// <20>Ƴ<EFBFBD><C6B3>ɵ<EFBFBD>
if (m_pMouseoverOn)
{
this->removeChild(m_pMouseoverOn);
}
// <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>
if (mouseover)
{
this->addChild(mouseover);
mouseover->setPivot(m_fPivotX, m_fPivotY);
}
m_pMouseoverOn = mouseover;
_updateState();
_updateVisiable();
}
}
void e2d::EButtonToggle::setSelected(ENode * selected)
{
if (selected != m_pSelectedOn)
{
// <20>Ƴ<EFBFBD><C6B3>ɵ<EFBFBD>
if (m_pSelectedOn)
{
this->removeChild(m_pSelectedOn);
}
// <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>
if (selected)
{
this->addChild(selected);
selected->setPivot(m_fPivotX, m_fPivotY);
}
m_pSelectedOn = selected;
_updateState();
_updateVisiable();
}
}
void e2d::EButtonToggle::setDisabled(ENode * disabled)
{
if (disabled != m_pDisabledOn)
{
// <20>Ƴ<EFBFBD><C6B3>ɵ<EFBFBD>
if (m_pDisabledOn)
{
this->removeChild(m_pDisabledOn);
}
// <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>
if (disabled)
{
this->addChild(disabled);
disabled->setPivot(m_fPivotX, m_fPivotY);
}
m_pDisabledOn = disabled;
_updateState();
_updateVisiable();
}
}
void e2d::EButtonToggle::setNormalOff(ENode * normal)
{
if (normal != m_pNormalOff)
{
// <20>Ƴ<EFBFBD><C6B3>ɵ<EFBFBD>
if (m_pNormalOff)
{
this->removeChild(m_pNormalOff);
}
// <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>
if (normal)
{
this->addChild(normal);
normal->setPivot(m_fPivotX, m_fPivotY);
}
m_pNormalOff = normal;
_updateState();
_updateVisiable();
}
}
void e2d::EButtonToggle::setMouseOverOff(ENode * mouseover)
{
if (mouseover != m_pMouseoverOff)
{
// <20>Ƴ<EFBFBD><C6B3>ɵ<EFBFBD>
if (m_pMouseoverOff)
{
this->removeChild(m_pMouseoverOff);
}
// <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>
if (mouseover)
{
this->addChild(mouseover);
mouseover->setPivot(m_fPivotX, m_fPivotY);
}
m_pMouseoverOff = mouseover;
_updateState();
_updateVisiable();
}
}
void e2d::EButtonToggle::setSelectedOff(ENode * selected)
{
if (selected != m_pSelectedOff)
{
// <20>Ƴ<EFBFBD><C6B3>ɵ<EFBFBD>
if (m_pSelectedOff)
{
this->removeChild(m_pSelectedOff);
}
// <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>
if (selected)
{
this->addChild(selected);
selected->setPivot(m_fPivotX, m_fPivotY);
}
m_pSelectedOff = selected;
_updateState();
_updateVisiable();
}
}
void e2d::EButtonToggle::setDisabledOff(ENode * disabled)
{
if (disabled != m_pDisabledOff)
{
// <20>Ƴ<EFBFBD><C6B3>ɵ<EFBFBD>
if (m_pDisabledOff)
{
this->removeChild(m_pDisabledOff);
}
// <20><><EFBFBD><EFBFBD><EFBFBD>µ<EFBFBD>
if (disabled)
{
this->addChild(disabled);
disabled->setPivot(m_fPivotX, m_fPivotY);
}
m_pDisabledOff = disabled;
_updateState();
_updateVisiable();
}
}
void e2d::EButtonToggle::setPivotX(float pivotX)
{
ENode::setPivotX(pivotX);
if (m_pNormalOn) m_pNormalOn->setPivotX(pivotX);
if (m_pMouseoverOn) m_pMouseoverOn->setPivotX(pivotX);
if (m_pSelectedOn) m_pSelectedOn->setPivotX(pivotX);
if (m_pDisabledOn) m_pDisabledOn->setPivotX(pivotX);
if (m_pNormalOff) m_pNormalOff->setPivotX(pivotX);
if (m_pMouseoverOff) m_pMouseoverOff->setPivotX(pivotX);
if (m_pSelectedOff) m_pSelectedOff->setPivotX(pivotX);
if (m_pDisabledOff) m_pDisabledOff->setPivotX(pivotX);
}
void e2d::EButtonToggle::setPivotY(float pivotY)
{
ENode::setPivotY(pivotY);
if (m_pNormalOn) m_pNormalOn->setPivotY(pivotY);
if (m_pMouseoverOn) m_pMouseoverOn->setPivotY(pivotY);
if (m_pSelectedOn) m_pSelectedOn->setPivotY(pivotY);
if (m_pDisabledOn) m_pDisabledOn->setPivotY(pivotY);
if (m_pNormalOff) m_pNormalOff->setPivotY(pivotY);
if (m_pMouseoverOff) m_pMouseoverOff->setPivotY(pivotY);
if (m_pSelectedOff) m_pSelectedOff->setPivotY(pivotY);
if (m_pDisabledOff) m_pDisabledOff->setPivotY(pivotY);
}
void e2d::EButtonToggle::setPivot(float pivotX, float pivotY)
{
ENode::setPivot(pivotX, pivotY);
if (m_pNormalOn) m_pNormalOn->setPivot(pivotX, pivotY);
if (m_pMouseoverOn) m_pMouseoverOn->setPivot(pivotX, pivotY);
if (m_pSelectedOn) m_pSelectedOn->setPivot(pivotX, pivotY);
if (m_pDisabledOn) m_pDisabledOn->setPivot(pivotX, pivotY);
if (m_pNormalOff) m_pNormalOff->setPivot(pivotX, pivotY);
if (m_pMouseoverOff) m_pMouseoverOff->setPivot(pivotX, pivotY);
if (m_pSelectedOff) m_pSelectedOff->setPivot(pivotX, pivotY);
if (m_pDisabledOff) m_pDisabledOff->setPivot(pivotX, pivotY);
}
void e2d::EButtonToggle::_updateState()
{
if (m_bState)
{
m_pNormal = m_pNormalOn;
m_pMouseover = m_pMouseoverOn;
m_pSelected = m_pSelectedOn;
m_pDisabled = m_pDisabledOn;
if (m_pNormalOff) m_pNormalOff->setVisiable(false);
if (m_pMouseoverOff) m_pMouseoverOff->setVisiable(false);
if (m_pSelectedOff) m_pSelectedOff->setVisiable(false);
if (m_pDisabledOff) m_pDisabledOff->setVisiable(false);
}
else
{
m_pNormal = m_pNormalOff;
m_pMouseover = m_pMouseoverOff;
m_pSelected = m_pSelectedOff;
m_pDisabled = m_pDisabledOff;
if (m_pNormalOn) m_pNormalOn->setVisiable(false);
if (m_pMouseoverOn) m_pMouseoverOn->setVisiable(false);
if (m_pSelectedOn) m_pSelectedOn->setVisiable(false);
if (m_pDisabledOn) m_pDisabledOn->setVisiable(false);
}
}
void e2d::EButtonToggle::_runCallback()
{
m_bState = !m_bState;
_updateState();
if (m_Callback)
{
m_Callback();
}
}