Yosin_Game/SpriteActorRegister.h

373 lines
7.6 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;
extern NPK_M* npk;
//<2F><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static SQInteger Create_Image(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
const SQChar* gOutPutBuffer;
sq_getstring(v, 2, &gOutPutBuffer);
SQInteger gFrame;
sq_getinteger(v, 3, &gFrame);
//ת<><D7AA>img<6D><67><EFBFBD><EFBFBD>
std::string TextureName = (char*)gOutPutBuffer;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
TexturePtr t = SquirrelClassEx::GetTexturePtrByImg(TextureName, gFrame);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
SpritePtr Png = new Sprite(t);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΨһID
uint64_t UUID = Png->GetObjectID();
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Map<61><70><EFBFBD><EFBFBD>
ActorPtrMapObject[UUID] = Png;
sq_pushinteger(v, UUID);
return 1;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>߼<EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static SQInteger Create_ImageEx(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
//<2F><><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
if (Top == 3) {
const SQChar* gOutPutBuffer;
sq_getstring(v, 2, &gOutPutBuffer);
SQInteger gFrame;
sq_getinteger(v, 3, &gFrame);
std::string TextureName = (char*)gOutPutBuffer;
SpriteExPtr Png = new SpriteEx();
TexturePtr t = SquirrelClassEx::GetTexturePtrByImg(TextureName, gFrame);
Png->SetFrame(t);
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΨһID
uint64_t UUID = Png->GetObjectID();
//<2F><><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Map<61><70><EFBFBD><EFBFBD>
ActorPtrMapObject[UUID] = Png;
sq_pushinteger(v, UUID);
}
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
else if (Top == 1) {
SpriteExPtr Png = new SpriteEx();
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΨһID
uint64_t UUID = Png->GetObjectID();
//<2F><><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Map<61><70><EFBFBD><EFBFBD>
ActorPtrMapObject[UUID] = Png;
sq_pushinteger(v, UUID);
}
return 1;
}
//<2F><><EFBFBD>ø߼<C3B8>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ
static SQInteger Set_ImageEx_Mode(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
SQInteger gType;
sq_getinteger(v, 3, &gType);
//<2F><>ȫ<EFBFBD><C8AB>Map<61>л<EFBFBD>ȡ<EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
if (ActorPtrMapObject.count(ActorUUID)) {
SpriteExPtr Png = dynamic_cast<SpriteEx*>(ActorPtrMapObject[ActorUUID].Get());
Png->SetMode(gType);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//<2F><><EFBFBD>ø߼<C3B8>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֡
static SQInteger Set_ImageEx_Frame(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
const SQChar* gOutPutBuffer;
sq_getstring(v, 3, &gOutPutBuffer);
SQInteger gFrame;
sq_getinteger(v, 4, &gFrame);
std::string TextureName = (char*)gOutPutBuffer;
//<2F><>ȫ<EFBFBD><C8AB>Map<61>л<EFBFBD>ȡ<EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
if (ActorPtrMapObject.count(ActorUUID)) {
SpriteExPtr Png = dynamic_cast<SpriteEx*>(ActorPtrMapObject[ActorUUID].Get());
TexturePtr t = SquirrelClassEx::GetTexturePtrByImg(TextureName, gFrame);
Png->SetFrame(t);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//<2F><><EFBFBD>ø߼<C3B8><DFBC><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>͸<EFBFBD><CDB8><EFBFBD><EFBFBD>
static SQInteger Set_ImageEx_Alpha(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
SQFloat Alpha;
sq_getfloat(v, 3, &Alpha);
//<2F><>ȫ<EFBFBD><C8AB>Map<61>л<EFBFBD>ȡ<EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
if (ActorPtrMapObject.count(ActorUUID)) {
SpriteExPtr Png = dynamic_cast<SpriteEx*>(ActorPtrMapObject[ActorUUID].Get());
Png->SetOpacity(Alpha);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//<2F><><EFBFBD>ø߼<C3B8><DFBC><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>֡<EFBFBD><D6A1>Ϣ
static SQInteger Set_ImageEx_FrameInfo(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
std::vector<int> FrameDelay;
sq_pushnull(v); // null iterator
while (SQ_SUCCEEDED(sq_next(v, 3)))
{
SQInteger gDelay;
sq_getinteger(v, -1, &gDelay);
FrameDelay.push_back(gDelay);
//<2F><><EFBFBD><EFBFBD>-1<><31>ֵ<EFBFBD><D6B5>-2<>Ǽ<EFBFBD>
sq_pop(v, 2); //<2F><><EFBFBD><EFBFBD>һ<EFBFBD>ε<EFBFBD><CEB5><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
}
sq_pop(v, 1);
SQInteger Loop;
sq_getinteger(v, 4, &Loop);
//<2F><>ȫ<EFBFBD><C8AB>Map<61>л<EFBFBD>ȡ<EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
if (ActorPtrMapObject.count(ActorUUID)) {
SpriteExPtr Png = dynamic_cast<SpriteEx*>(ActorPtrMapObject[ActorUUID].Get());
Png->SetFrameInfo(FrameDelay, Loop);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//<2F><><EFBFBD>ø߼<C3B8><DFBC><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD>񲥷Ŷ<F1B2A5B7><C5B6><EFBFBD>
static SQInteger Set_ImageEx_PlayAnimotion(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
SQBool Type;
sq_getbool(v, 3, &Type);
//<2F><>ȫ<EFBFBD><C8AB>Map<61>л<EFBFBD>ȡ<EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
if (ActorPtrMapObject.count(ActorUUID)) {
SpriteExPtr Png = dynamic_cast<SpriteEx*>(ActorPtrMapObject[ActorUUID].Get());
Png->SetAnimotionPlay(Type);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//<2F><><EFBFBD>ø߼<C3B8><DFBC><EFBFBD><EFBFBD><EFBFBD>Ani֡
static SQInteger Set_ImageEx_Animotion_Frame(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
SQInteger Frame;
sq_getinteger(v, 3, &Frame);
//<2F><>ȫ<EFBFBD><C8AB>Map<61>л<EFBFBD>ȡ<EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
if (ActorPtrMapObject.count(ActorUUID)) {
SpriteExPtr Png = dynamic_cast<SpriteEx*>(ActorPtrMapObject[ActorUUID].Get());
Png->SetAnimotionFrame(Frame);
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//<2F><><EFBFBD>ø߼<C3B8><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ
static SQInteger Set_ImageEx_Shadow(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
//SQInteger Frame;
//sq_getinteger(v, 3, &Frame);
//<2F><>ȫ<EFBFBD><C8AB>Map<61>л<EFBFBD>ȡ<EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
if (ActorPtrMapObject.count(ActorUUID)) {
SpriteExPtr Png = dynamic_cast<SpriteEx*>(ActorPtrMapObject[ActorUUID].Get());
Png->SetShadow();
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}
//<2F><><EFBFBD>ò<EFBFBD><C3B2>о<EFBFBD><D0BE><EFBFBD>
static SQInteger Set_Image_CropRect(HSQUIRRELVM v)
{
SQInteger Top = sq_gettop(v);
if (Top <= 0)
{
sq_throwerror(v, _SST("Incorrect function argument"));
return 0;
}
SQInteger ActorUUID;
sq_getinteger(v, 2, &ActorUUID);
SQFloat L;
sq_getfloat(v, 3, &L);
SQFloat U;
sq_getfloat(v, 4, &U);
SQFloat R;
sq_getfloat(v, 5, &R);
SQFloat D;
sq_getfloat(v, 6, &D);
//<2F><>ȫ<EFBFBD><C8AB>Map<61>л<EFBFBD>ȡ<EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
if (ActorPtrMapObject.count(ActorUUID)) {
SpritePtr Png = dynamic_cast<Sprite*>(ActorPtrMapObject[ActorUUID].Get());
Png->SetCropRect(Rect(Point(L,U), Point(R, D)));
sq_pushbool(v, true);
}
else {
sq_pushbool(v, false);
}
return 1;
}