Yosin_Game/StageActorRegister.h

358 lines
8.5 KiB
C
Raw Normal View History

2024-05-04 18:30:32 +08:00
#pragma once
//<2F><>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>Map
extern std::map<uint64_t, ActorPtr>ActorPtrMapObject;
//<2F><><EFBFBD><EFBFBD><EBB5AD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8>Map
std::map<uint32_t, FadeTransitionPtr>FadeTransitionPtrMapObject;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Map
std::map<std::string, uint64_t>SquirrelStagePtrMapObject;
//<2F><><EFBFBD>س<EFBFBD><D8B3><EFBFBD>
static SQInteger Reset_Scene(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EBB3A1>
SQInteger gscene;
sq_getinteger(v, 2, &gscene);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EBB3A1>
if (ActorPtrMapObject.count(gscene)) {
SquirrelStagePtr scene = dynamic_cast<SquirrelStage*>(ActorPtrMapObject[gscene].Get());
//<2F>Ƴ<EFBFBD><C6B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӷ<EFBFBD><D3B6><EFBFBD>
scene->RemoveAllChildren();
//<2F><><EFBFBD>¹<EFBFBD><C2B9><EFBFBD>
scene->PushBaseUi();
//<2F><><EFBFBD>µ<EFBFBD><C2B5>ý<EFBFBD><C3BD><EFBFBD><EBB3A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
scene->OnEnter();
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
//ActorPtr c = scene->GetChild("Scene_Default_Layer");
//c->RemoveAllChildren();
//ActorList ChildList = scene->GetAllChildren();
//for (auto& child : ChildList)
//{
// if (!child->IsName("Scene_Mouse_UI_Layer")) {
// child->RemoveAllChildren();
// }
//}
return 1;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static SQInteger Create_Scene(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const SQChar* StageName;
sq_getstring(v, 2, &StageName);
//<2F>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>New<65><77>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
char* gStageName = SquirrelClassEx::SquirrelU2W((char*)StageName);
std::string RealStageName = gStageName;
//<2F><><EFBFBD><EFBFBD>New<65><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
delete[]gStageName;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SquirrelStagePtr scene = new SquirrelStage(RealStageName);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UUID
uint32_t UUID = scene->GetObjectID();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Map<61><70><EFBFBD><EFBFBD>
ActorPtrMapObject[UUID] = scene;
SquirrelStagePtrMapObject[RealStageName] = UUID;
sq_pushinteger(v, UUID);
return 1;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
static SQInteger Get_SceneByName(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const SQChar* StageName;
sq_getstring(v, 2, &StageName);
//<2F>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>New<65><77>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
char* gStageName = SquirrelClassEx::SquirrelU2W((char*)StageName);
std::string RealStageName = gStageName;
//<2F><><EFBFBD><EFBFBD>New<65><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
delete[]gStageName;
if (SquirrelStagePtrMapObject.count(RealStageName) && ActorPtrMapObject.count(SquirrelStagePtrMapObject[RealStageName])) {
sq_pushinteger(v, SquirrelStagePtrMapObject[RealStageName]);
}
else {
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SquirrelStagePtr scene = new SquirrelStage(RealStageName);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UUID
uint32_t UUID = scene->GetObjectID();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Map<61><70><EFBFBD><EFBFBD>
ActorPtrMapObject[UUID] = scene;
SquirrelStagePtrMapObject[RealStageName] = UUID;
sq_pushinteger(v, UUID);
}
return 1;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>򳡾<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڻ<EFBFBD><DABB>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>
static SQInteger Get_TownSceneByName(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
const SQChar* StageName;
sq_getstring(v, 2, &StageName);
//<2F>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>New<65><77>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
char* gStageName = SquirrelClassEx::SquirrelU2W((char*)StageName);
std::string RealStageName = gStageName;
//<2F><><EFBFBD><EFBFBD>New<65><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
delete[]gStageName;
if (SquirrelStagePtrMapObject.count(RealStageName) && ActorPtrMapObject.count(SquirrelStagePtrMapObject[RealStageName])) {
sq_pushinteger(v, SquirrelStagePtrMapObject[RealStageName]);
}
else {
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SquirrelTownStagePtr scene = new SquirrelTownStage(RealStageName);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UUID
uint32_t UUID = scene->GetObjectID();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Map<61><70><EFBFBD><EFBFBD>
ActorPtrMapObject[UUID] = scene;
SquirrelStagePtrMapObject[RealStageName] = UUID;
sq_pushinteger(v, UUID);
}
return 1;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
static SQInteger Director_EnterStage(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EBB3A1>
SQInteger gscene;
sq_getinteger(v, 2, &gscene);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EBB3A1>
if (ActorPtrMapObject.count(gscene)) {
SquirrelStagePtr scene = dynamic_cast<SquirrelStage*>(ActorPtrMapObject[gscene].Get());
if (Top == 2) {
Director::GetInstance().EnterStage(scene);
}
else if (Top == 3) {
SQInteger gTsn;
sq_getinteger(v, 3, &gTsn);
if (FadeTransitionPtrMapObject.count(gTsn)) {
FadeTransitionPtr Tsn = FadeTransitionPtrMapObject[gTsn];
Director::GetInstance().EnterStage(scene, Tsn);
}
else {
Director::GetInstance().EnterStage(scene);
}
}
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
static SQInteger Director_PushStage(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EBB3A1>
SQInteger gscene;
sq_getinteger(v, 2, &gscene);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EBB3A1>
if (ActorPtrMapObject.count(gscene)) {
SquirrelStagePtr scene = dynamic_cast<SquirrelStage*>(ActorPtrMapObject[gscene].Get());
if (Top == 2) {
Director::GetInstance().PushStage(scene);
}
else if (Top == 3) {
SQInteger gTsn;
sq_getinteger(v, 3, &gTsn);
if (FadeTransitionPtrMapObject.count(gTsn)) {
FadeTransitionPtr Tsn = FadeTransitionPtrMapObject[gTsn];
Director::GetInstance().PushStage(scene, Tsn);
}
else {
Director::GetInstance().PushStage(scene);
}
}
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>
static SQInteger Director_PopStage(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EBB3A1>
SQInteger gscene;
sq_getinteger(v, 2, &gscene);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EBB3A1>
if (ActorPtrMapObject.count(gscene)) {
SquirrelStagePtr scene = dynamic_cast<SquirrelStage*>(ActorPtrMapObject[gscene].Get());
if (Top == 2) {
Director::GetInstance().PopStage();
}
else if (Top == 3) {
SQInteger gTsn;
sq_getinteger(v, 3, &gTsn);
if (FadeTransitionPtrMapObject.count(gTsn)) {
FadeTransitionPtr Tsn = FadeTransitionPtrMapObject[gTsn];
Director::GetInstance().PopStage(Tsn);
}
else {
Director::GetInstance().PopStage();
}
}
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//<2F><><EFBFBD>ݻ<EFBFBD>ȡ<EFBFBD><C8A1>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
static SQInteger Director_GetScene(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
uint32_t scene = Director::GetInstance().GetCurrentStage()->GetObjectID();
sq_pushinteger(v, scene);
return 1;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ճ<EFBFBD><D5B3><EFBFBD>ջ
static SQInteger Director_ClearStages(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
Director::GetInstance().ClearStages();
return 0;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EBB5AD><EFBFBD><EFBFBD><EFBFBD>ɶ<EFBFBD><C9B6><EFBFBD>
static SQInteger Creat_FadeTransition(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger gDuration;
SQBool gParallel;
sq_getinteger(v, 2, &gDuration);
sq_getbool(v, 3, &gParallel);
Duration Time = Duration(gDuration);
FadeTransitionPtr Tsn = new FadeTransition(Time, gParallel);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>UUID
uint32_t UUID = Tsn->GetObjectID();
//<2F><><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Map<61><70><EFBFBD><EFBFBD>
FadeTransitionPtrMapObject[UUID] = Tsn;
sq_pushinteger(v, UUID);
return 1;
}