219 lines
5.6 KiB
C
219 lines
5.6 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><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
static SQInteger Create_Canvas(HSQUIRRELVM v)
|
|||
|
|
{
|
|||
|
|
SQInteger Top = sq_gettop(v);
|
|||
|
|
if (Top <= 0)
|
|||
|
|
{
|
|||
|
|
sq_throwerror(v, _SST("Incorrect function argument"));
|
|||
|
|
return 0;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
SQFloat X;
|
|||
|
|
sq_getfloat(v, 2, &X);
|
|||
|
|
SQFloat Y;
|
|||
|
|
sq_getfloat(v, 3, &Y);
|
|||
|
|
|
|||
|
|
CanvasPtr _Canvas = new Canvas(PixelSize(X, Y));
|
|||
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΨһID
|
|||
|
|
uint64_t UUID = _Canvas->GetObjectID();
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Map<61><70><EFBFBD><EFBFBD>
|
|||
|
|
ActorPtrMapObject[UUID] = _Canvas;
|
|||
|
|
|
|||
|
|
sq_pushinteger(v, UUID);
|
|||
|
|
|
|||
|
|
return 1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>Ⱦ
|
|||
|
|
static SQInteger Canvas_BeginDraw(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);
|
|||
|
|
|
|||
|
|
if (ActorPtrMapObject.count(ActorUUID)) {
|
|||
|
|
CanvasPtr _Canvas = dynamic_cast<Canvas*>(ActorPtrMapObject[ActorUUID].Get());
|
|||
|
|
CanvasRenderContextPtr _CanvasRenderContextPtr = _Canvas->GetContext2D();
|
|||
|
|
_CanvasRenderContextPtr->SetTextAntialiasMode(TextAntialiasMode::None);
|
|||
|
|
_CanvasRenderContextPtr->BeginDraw();
|
|||
|
|
sq_pushbool(v, true);
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
sq_pushbool(v, false);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱦ
|
|||
|
|
static SQInteger Canvas_EndDraw(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);
|
|||
|
|
|
|||
|
|
if (ActorPtrMapObject.count(ActorUUID)) {
|
|||
|
|
CanvasPtr _Canvas = dynamic_cast<Canvas*>(ActorPtrMapObject[ActorUUID].Get());
|
|||
|
|
CanvasRenderContextPtr _CanvasRenderContextPtr = _Canvas->GetContext2D();
|
|||
|
|
_CanvasRenderContextPtr->EndDraw();
|
|||
|
|
sq_pushbool(v, true);
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
sq_pushbool(v, false);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return 1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
static SQInteger Canvas_DrawTexture(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* OutPutBuffer;
|
|||
|
|
sq_getstring(v, 3, &OutPutBuffer);
|
|||
|
|
|
|||
|
|
SQInteger gFrame;
|
|||
|
|
sq_getinteger(v, 4, &gFrame);
|
|||
|
|
|
|||
|
|
SQFloat X;
|
|||
|
|
sq_getfloat(v, 5, &X);
|
|||
|
|
SQFloat Y;
|
|||
|
|
sq_getfloat(v, 6, &Y);
|
|||
|
|
|
|||
|
|
if (ActorPtrMapObject.count(ActorUUID)) {
|
|||
|
|
CanvasPtr _Canvas = dynamic_cast<Canvas*>(ActorPtrMapObject[ActorUUID].Get());
|
|||
|
|
|
|||
|
|
CanvasRenderContextPtr _CanvasRenderContextPtr = _Canvas->GetContext2D();
|
|||
|
|
|
|||
|
|
//ֻ<><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (Top == 6) {
|
|||
|
|
Vec2 POS = Vec2(X, Y);
|
|||
|
|
|
|||
|
|
TexturePtr t = SquirrelClassEx::GetTexturePtrByImg((char*)OutPutBuffer, gFrame);
|
|||
|
|
_CanvasRenderContextPtr->DrawTexture(t, POS);
|
|||
|
|
}
|
|||
|
|
else if (Top == 8) {
|
|||
|
|
SQFloat XSize;
|
|||
|
|
sq_getfloat(v, 7, &XSize);
|
|||
|
|
SQFloat YSize;
|
|||
|
|
sq_getfloat(v, 8, &YSize);
|
|||
|
|
|
|||
|
|
Vec2 POS = Vec2(X, Y);
|
|||
|
|
Vec2 Size = Vec2(X + XSize, Y + YSize);
|
|||
|
|
|
|||
|
|
TexturePtr t = SquirrelClassEx::GetTexturePtrByImg((char*)OutPutBuffer, gFrame);
|
|||
|
|
_CanvasRenderContextPtr->DrawTexture(t, POS, Size);
|
|||
|
|
}
|
|||
|
|
sq_pushbool(v, true);
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
sq_pushbool(v, false);
|
|||
|
|
}
|
|||
|
|
return 1;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
static SQInteger Canvas_DrawText(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);
|
|||
|
|
|
|||
|
|
//<2F>õ<EFBFBD>Squirrel<65>ַ<EFBFBD><D6B7><EFBFBD> <20><><EFBFBD><EFBFBD>·<EFBFBD><C2B7>Key
|
|||
|
|
const SQChar* OutPutBuffer;
|
|||
|
|
sq_getstring(v, 3, &OutPutBuffer);
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>New<65><77>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
char* OutPutTextbuf = SquirrelClassEx::SquirrelU2W((char*)OutPutBuffer);
|
|||
|
|
std::string OutPutText = OutPutTextbuf;
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>New<65><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
|
delete[]OutPutTextbuf;
|
|||
|
|
|
|||
|
|
//ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD>崴<EFBFBD><E5B4B4><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>ʽ
|
|||
|
|
if (Top == 7) {
|
|||
|
|
//<2F>õ<EFBFBD>Squirrel<65>ַ<EFBFBD><D6B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
const SQChar* TextStringBuffer;
|
|||
|
|
sq_getstring(v, 4, &TextStringBuffer);
|
|||
|
|
//<2F>˲<EFBFBD><CBB2><EFBFBD><EFBFBD><EFBFBD>New<65><77>һ<EFBFBD><D2BB><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
char* TextStringbuf = SquirrelClassEx::SquirrelU2W((char*)TextStringBuffer);
|
|||
|
|
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
std::string TextString = TextStringbuf;
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>New<65><77><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
|
delete[]TextStringbuf;
|
|||
|
|
|
|||
|
|
SQInteger FontColor;
|
|||
|
|
sq_getinteger(v, 5, &FontColor);
|
|||
|
|
|
|||
|
|
SQFloat Xpos;
|
|||
|
|
sq_getfloat(v, 6, &Xpos);
|
|||
|
|
|
|||
|
|
SQFloat Ypos;
|
|||
|
|
sq_getfloat(v, 7, &Ypos);
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><>ȫ<EFBFBD><C8AB>Map<61>л<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
if (ActorPtrMapObject.count(ActorUUID)) {
|
|||
|
|
CanvasPtr _Canvas = dynamic_cast<Canvas*>(ActorPtrMapObject[ActorUUID].Get());
|
|||
|
|
CanvasRenderContextPtr _CanvasRenderContextPtr = _Canvas->GetContext2D();
|
|||
|
|
TextStyle TsP = TextStyle(FontRecObject[OutPutText]);
|
|||
|
|
TsP.alignment = TextAlign::Center;
|
|||
|
|
/*
|
|||
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD><D4BD><EFBFBD><EFBFBD><EFBFBD>ʽ
|
|||
|
|
LinearGradientStyle fill_style = LinearGradientStyle(
|
|||
|
|
Point(_Canvas->GetWidth() / 3, 0.0f), // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>
|
|||
|
|
Point(_Canvas->GetWidth() * 2 / 3, _Canvas->GetHeight()), // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʽ<EFBFBD>յ<EFBFBD>
|
|||
|
|
{ GradientStop(0.0f, Color::Yellow), GradientStop(1.0f, Color::Green) }
|
|||
|
|
);
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
|
|||
|
|
BrushPtr fill_brush = new Brush(FontColor);
|
|||
|
|
_CanvasRenderContextPtr->SetFillBrush(fill_brush);
|
|||
|
|
_CanvasRenderContextPtr->DrawTextLayout(TextString, TsP, Point(Xpos, Ypos));
|
|||
|
|
|
|||
|
|
sq_pushbool(v, true);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
else {
|
|||
|
|
sq_pushbool(v, false);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
return 1;
|
|||
|
|
}
|