修改底层渲染为OpenGL

This commit is contained in:
2025-10-23 15:21:12 +08:00
parent 1fe898e09c
commit f9a2300b5a
37 changed files with 2782 additions and 3761 deletions

View File

@@ -27,7 +27,7 @@ void Scene_Loading_UI::Enter()
RefPtr<Sprite> LoadCircleSp = new Sprite("ImagePacks2/Loading2.png");
LoadCircleSp->SetName("LoadCircle");
LoadCircleSp->SetPos(VecFPos{1280 - 60, 686 - 60});
LoadCircleSp->SetBlendMode(SDL_BLENDMODE_ADD);
LoadCircleSp->SetBlendMode(LINEARDODGE);
LoadCircleSp->SetAnchor(VecFPos{0.5f, 0.5f});
actor->AddComponent(LoadCircleSp);

View File

@@ -16,12 +16,59 @@ void Scene_MainUi::Enter()
sq_call(v, 2, SQFalse, SQTrue);
}
sq_settop(v, top);
}
void Scene_MainUi::HandleEvents(SDL_Event *e)
void Scene_MainUi::HandleEvents(SDL_Event *event)
{
Scene::HandleEvents(e);
SQInteger EventType = -1;
std::vector<SQInteger> EventData;
switch (event->type)
{
// 鼠标移动
case SDL_MOUSEMOTION:
{
EventType = 0;
EventData.push_back(event->motion.x);
EventData.push_back(event->motion.y);
break;
}
// 鼠标按键按下
case SDL_MOUSEBUTTONDOWN:
{
EventType = 1;
EventData.push_back(event->button.button);
break;
}
// 鼠标按键释放
case SDL_MOUSEBUTTONUP:
{
EventType = 2;
EventData.push_back(event->button.button);
break;
}
// 鼠标滚轮
case SDL_MOUSEWHEEL:
{
EventType = 3;
EventData.push_back(event->wheel.y);
break;
}
// 键盘按键按下
case SDL_KEYDOWN:
{
EventType = 4;
EventData.push_back(event->key.keysym.sym);
break;
}
// 键盘按键释放
case SDL_KEYUP:
{
EventType = 5;
EventData.push_back(event->key.keysym.sym);
break;
}
}
HSQUIRRELVM v = SquirrelEx::GetInstance().GetSquirrelVM();
SQInteger top = sq_gettop(v);
sq_pushroottable(v);
@@ -29,8 +76,14 @@ void Scene_MainUi::HandleEvents(SDL_Event *e)
if (SQ_SUCCEEDED(sq_get(v, -2)))
{
sq_pushroottable(v);
sq_pushinteger(v, 1);
sq_call(v, 2, SQFalse, SQTrue);
sq_pushinteger(v, EventType);
sq_newarray(v, 0);
for (SQInteger i = 0; i < EventData.size(); i++)
{
sq_pushinteger(v, EventData[i]);
sq_arrayappend(v, -2);
}
sq_call(v, 3, SQFalse, SQTrue);
}
sq_settop(v, top);
}

View File

@@ -1,7 +1,10 @@
#include "Scene_Test.h"
#include <memory>
#include <EngineCore/Game.h>
#include <EngineFrame/Component/AnimationManager.h>
#include "EngineCore/Game.h"
#include "EngineFrame/Component/AnimationManager.h"
#include "EngineFrame/Component/Text.h"
#include "EngineFrame/Component/Canvas.h"
#include "Global/Global_Game.h"
Scene_Test::Scene_Test()
{
}
@@ -13,44 +16,55 @@ Scene_Test::~Scene_Test()
void Scene_Test::Enter()
{
map = new GameMap;
map->LoadMap("map/cataclysm/town/elvengard/new_elvengard.map");
map->Enter(this);
// SetScale(VecFPos(1.2f, 1.2f));
// map = new GameMap;
// map->LoadMap("map/cataclysm/town/elvengard/new_elvengard.map");
// map->Enter(this);
RefPtr<CharacterObject> obj = new CharacterObject();
obj->SetPosition({1000, 300, 0});
obj->Construction(0);
// RefPtr<CharacterObject> obj = new CharacterObject();
// obj->SetPosition({1000, 300, 0});
// obj->Construction(0);
RefPtr<MonsterObject> monster = new MonsterObject();
monster->SetPosition({1200, 301, 0});
monster->Construction(1);
monster->SetDirection(1);
// RefPtr<MonsterObject> monster = new MonsterObject();
// monster->SetPosition({1200, 301, 0});
// monster->Construction(1);
// monster->SetDirection(1);
map->AddObject(obj);
map->AddObject(monster);
// map->AddObject(obj);
// map->AddObject(monster);
_camera = new GameMapCamera;
_camera->SetFromActor(obj.Get());
return;
// _camera = new GameMapCamera;
// _camera->SetFromActor(obj.Get());
// return;
// SDL_Log("Scene_Test::进入测试场景!");
// // SDL_Log("Scene_Test::进入测试场景!");
RefPtr<Actor> actor = new Actor;
AddChild(actor);
// RefPtr<Sprite> sprite = new Sprite("ImagePacks2/test_white_background.png");
// actor->AddComponent(sprite);
// RefPtr<Sprite> chr = new Sprite("sprite/character/swordman/equipment/avatar/skin/sm_body0000.img", 90);
RefPtr<Sprite> sprite = new Sprite("ImagePacks2/test_white_background.png");
RefPtr<Sprite> chr = new Sprite("sprite/interface2/hud/hud.img", 0);
// chr->SetPos(VecFPos{200, 100});
// chr->SetAlpha(0.5);
// chr->SetShadow();
// actor->AddComponent(chr);
actor->AddComponent(chr);
RefPtr<AnimationManager> Am = new AnimationManager;
RefPtr<Animation> ani4 = new Animation("map/cataclysm/town/hendonmyre/animation/object/gateall_02.ani");
Am->AddAnimation(ani4);
// RefPtr<Canvas> canvas = new Canvas(VecSize{1280, 720});
// actor->AddChild(canvas);
// Am->SetPos(VecFPos{200, 100});
actor->AddChild(Am);
// canvas->AddChild(chr);
// RefPtr<AnimationManager> Am = new AnimationManager;
// RefPtr<Animation> ani4 = new Animation("map/cataclysm/town/hendonmyre/animation/object/gateall_02.ani");
// Am->AddAnimation(ani4);
// // Am->SetPos(VecFPos{200, 100});
// actor->AddChild(Am);
// RefPtr<Text> text = new Text();
// text->Init("测试文本", Global_Game::GetInstance().Fonts[0], SDL_Color{255, 255, 255, 255});
// text->SetPos(VecFPos{200, 100});
// actor->AddChild(text);
// // sprite2->UnsetClipRect();