358 lines
8.5 KiB
C
358 lines
8.5 KiB
C
|
|
#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;
|
|||
|
|
}
|