Yosin_Game/UiFrameWork.cpp

74 lines
2.0 KiB
C++
Raw Permalink Normal View History

2024-05-04 18:30:32 +08:00
#include "UiFrameWork.h"
std::map<uint64_t , int>UI_HOVER_ZORDER;
std::map<uint64_t, UiFrameWork*>UI_HOVER_OBJECT;
void UiFrameWork::OnHoverEvent(Event* evt) {
//ÿ<><C3BF>UI<55><EFBFBD><E0B1BB>ͣʱ<CDA3>ͻ<EFBFBD><CDBB><EFBFBD>Map <20><>д<EFBFBD><D0B4><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
UI_HOVER_ZORDER[this->GetObjectID()] = this->GetZOrder();
UI_HOVER_OBJECT[this->GetObjectID()] = this;
//ȡ<><C8A1>Map<61><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
auto MaxZorderMap = std::max_element(UI_HOVER_ZORDER.begin(), UI_HOVER_ZORDER.end(), [](std::pair<std::uint64_t, int> left, std::pair<std::uint64_t, int> right) { return left.second < right.second; });
std::map<uint64_t, UiFrameWork*>::reverse_iterator iter;
for (iter = UI_HOVER_OBJECT.rbegin(); iter != UI_HOVER_OBJECT.rend(); iter++) {
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ͵<C7BE><CDB5><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>ͣ
if (iter->first == MaxZorderMap->first) {
iter->second->OnHover();
}
else {
iter->second->OnOut();
}
}
}
void UiFrameWork::OnOutEvent(Event* evt) {
//ÿ<><C3BF>UI<55><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD>ͣʱ <20>ͻ<EFBFBD><CDBB><EFBFBD>Map<61><70> <20>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
UI_HOVER_ZORDER.erase(this->GetObjectID());
UI_HOVER_OBJECT.erase(this->GetObjectID());
this->OnOut();
//ȡ<><C8A1>Map<61><70><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
auto MaxZorderMap = std::max_element(UI_HOVER_ZORDER.begin(), UI_HOVER_ZORDER.end(), [](std::pair<std::uint64_t, int> left, std::pair<std::uint64_t, int> right) { return left.second < right.second; });
std::map<uint64_t, UiFrameWork*>::reverse_iterator iter;
for (iter = UI_HOVER_OBJECT.rbegin(); iter != UI_HOVER_OBJECT.rend(); iter++) {
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǿ͵<C7BE><CDB5><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>ͣ
if (iter->first == MaxZorderMap->first) {
iter->second->OnHover();
}
else {
iter->second->OnOut();
}
}
}
void UiFrameWork::RemoveZorder()
{
UI_HOVER_ZORDER.erase(this->GetObjectID());
UI_HOVER_OBJECT.erase(this->GetObjectID());
}
void UiFrameWork::OnHover()
{
}
void UiFrameWork::OnOut()
{
}
void UiFrameWork::Init()
{
//UI<55><49> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ComponentPtr comp = new MouseSensor;
AddComponent(0, comp);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><CDA3><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>¼<EFBFBD>
AddListener<MouseHoverEvent>(Closure(this, &UiFrameWork::OnHoverEvent));
AddListener<MouseOutEvent>(Closure(this, &UiFrameWork::OnOutEvent));
}