mirror of
https://github.com/thunderbrewhq/thunderbrew
synced 2025-12-08 10:25:59 +03:00
Compare commits
4 Commits
b1694c2897
...
6c5c560dc7
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6c5c560dc7 | ||
|
|
982aedbc02 | ||
|
|
d8780335f7 | ||
|
|
0e4ef3aa29 |
@ -14,6 +14,7 @@
|
||||
|
||||
#include <bc/Memory.hpp>
|
||||
#include <tempest/Matrix.hpp>
|
||||
#include <common/Time.hpp>
|
||||
|
||||
|
||||
CGWorldFrame* CGWorldFrame::s_currentWorldFrame = nullptr;
|
||||
@ -118,7 +119,17 @@ int32_t CGWorldFrame::OnLayerKeyDown(const CKeyEvent& evt) {
|
||||
|
||||
this->m_camera->SetFacing(yaw, pitch, roll);
|
||||
|
||||
return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
int32_t CGWorldFrame::OnLayerKeyDownRepeat(const CKeyEvent& evt) {
|
||||
if (CSimpleFrame::OnLayerKeyDownRepeat(evt)) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
this->OnLayerKeyDown(evt);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
CSimpleFrame* CGWorldFrame::Create(CSimpleFrame* parent) {
|
||||
@ -166,7 +177,7 @@ void CGWorldFrame::OnWorldRender() {
|
||||
GxRsSet(GxRs_Multisample, 1);
|
||||
|
||||
if (true) {
|
||||
CImVector clearColor = { 0, 0, 0, 0xFF };
|
||||
CImVector clearColor = { 0x80, 0x80, 0x80, 0xFF };
|
||||
GxSceneClear(3, clearColor);
|
||||
}
|
||||
|
||||
@ -187,7 +198,11 @@ void CGWorldFrame::OnWorldRender() {
|
||||
|
||||
CShaderEffect::UpdateProjMatrix();
|
||||
|
||||
CWorld::Render(C3Vector(), 0.0f);
|
||||
static auto s_time = 0;
|
||||
|
||||
float elapsed = static_cast<float>(OsGetAsyncTimeMs() - s_time) / 1000.0f;
|
||||
s_time = OsGetAsyncTimeMs();
|
||||
CWorld::Render(C3Vector(), elapsed);
|
||||
|
||||
if (CWorldScene::s_m2Scene) {
|
||||
CWorldScene::s_m2Scene->Draw(M2PASS_0);
|
||||
|
||||
@ -12,6 +12,7 @@ class CGWorldFrame : public CSimpleFrame {
|
||||
|
||||
virtual void OnFrameRender(CRenderBatch* batch, uint32_t layer);
|
||||
virtual int32_t OnLayerKeyDown(const CKeyEvent& evt);
|
||||
virtual int32_t OnLayerKeyDownRepeat(const CKeyEvent& evt);
|
||||
|
||||
static CSimpleFrame* Create(CSimpleFrame* parent);
|
||||
static void RenderWorld(void* param);
|
||||
|
||||
@ -1015,7 +1015,7 @@ void CGxDeviceD3d::ICursorClip(int32_t a1) {
|
||||
if (a1) {
|
||||
this->m_hwCursorNeedsUpdate = 1;
|
||||
|
||||
if (this->m_format.window) {
|
||||
if (this->m_format.window == 0) {
|
||||
RECT windowRect;
|
||||
GetWindowRect(this->m_hwnd, &windowRect);
|
||||
ClipCursor(&windowRect);
|
||||
|
||||
@ -891,6 +891,23 @@ int32_t CSimpleEditBox::OnLayerKeyDown(const CKeyEvent& evt) {
|
||||
}
|
||||
}
|
||||
|
||||
int32_t CSimpleEditBox::OnLayerKeyDownRepeat(const CKeyEvent& evt) {
|
||||
if (!this->m_visible) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!CSimpleEditBox::s_currentFocus && this->m_autoFocus) {
|
||||
CSimpleEditBox::SetKeyboardFocus(this);
|
||||
return this->OnLayerKeyDown(evt);
|
||||
}
|
||||
|
||||
if (this == CSimpleEditBox::s_currentFocus) {
|
||||
return this->OnLayerKeyDown(evt);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t CSimpleEditBox::OnLayerMouseDown(const CMouseEvent& evt, const char* btn) {
|
||||
int32_t eaten = CSimpleFrame::OnLayerMouseDown(evt, btn);
|
||||
|
||||
|
||||
@ -72,6 +72,7 @@ class CSimpleEditBox : public CSimpleFrame, CSimpleFontedFrame {
|
||||
virtual void OnFrameSizeChanged(float width, float height);
|
||||
virtual int32_t OnLayerChar(const CCharEvent& evt);
|
||||
virtual int32_t OnLayerKeyDown(const CKeyEvent& evt);
|
||||
virtual int32_t OnLayerKeyDownRepeat(const CKeyEvent& evt);
|
||||
virtual int32_t OnLayerMouseDown(const CMouseEvent& evt, const char* btn);
|
||||
virtual int32_t OnLayerMouseUp(const CMouseEvent& evt, const char* btn);
|
||||
virtual void FontUpdated(CSimpleFontedFrameFont* font, int32_t a3);
|
||||
|
||||
@ -1091,6 +1091,10 @@ int32_t CSimpleFrame::OnLayerKeyUp(const CKeyEvent& evt) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
int32_t CSimpleFrame::OnLayerKeyDownRepeat(const CKeyEvent& evt) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t CSimpleFrame::OnLayerMouseDown(const CMouseEvent& evt, const char* btn) {
|
||||
if (!btn) {
|
||||
if (this->m_lookForDrag & evt.button) {
|
||||
|
||||
@ -100,6 +100,7 @@ class CSimpleFrame : public CScriptRegion {
|
||||
virtual int32_t OnLayerChar(const CCharEvent& evt);
|
||||
virtual int32_t OnLayerKeyDown(const CKeyEvent& evt);
|
||||
virtual int32_t OnLayerKeyUp(const CKeyEvent& evt);
|
||||
virtual int32_t OnLayerKeyDownRepeat(const CKeyEvent& evt);
|
||||
virtual int32_t OnLayerMouseDown(const CMouseEvent& evt, const char* btn);
|
||||
virtual int32_t OnLayerMouseUp(const CMouseEvent& evt, const char* btn);
|
||||
virtual void PostLoadXML(XMLNode* node, CStatus* status);
|
||||
|
||||
@ -124,9 +124,25 @@ int32_t CSimpleTop::OnKeyDown(const EVENT_DATA_KEY* pKeyData, void* param) {
|
||||
return eaten == 0;
|
||||
}
|
||||
|
||||
int32_t CSimpleTop::OnKeyDownRepeat(const void* a1, void* a2) {
|
||||
// TODO
|
||||
return 0;
|
||||
int32_t CSimpleTop::OnKeyDownRepeat(const EVENT_DATA_KEY* pKeyData, void* param) {
|
||||
CSimpleTop* top = static_cast<CSimpleTop*>(param);
|
||||
CSimpleTop::m_eventTime = pKeyData->time;
|
||||
|
||||
int32_t eaten = 0;
|
||||
|
||||
CSimpleFrame* frame = top->m_keydownCapture[pKeyData->key];
|
||||
|
||||
if (frame) {
|
||||
CKeyEvent keyEvent;
|
||||
keyEvent = *pKeyData;
|
||||
keyEvent.id = 0x40060065;
|
||||
|
||||
frame->OnLayerKeyDownRepeat(keyEvent);
|
||||
|
||||
eaten = 1;
|
||||
}
|
||||
|
||||
return eaten == 0;
|
||||
}
|
||||
|
||||
int32_t CSimpleTop::OnKeyUp(const EVENT_DATA_KEY* pKeyData, void* param) {
|
||||
|
||||
@ -36,7 +36,7 @@ class CSimpleTop : public CLayoutFrame {
|
||||
static int32_t OnFocusChanged(const void* a1, void* a2);
|
||||
static int32_t OnIme(const void* a1, void* a2);
|
||||
static int32_t OnKeyDown(const EVENT_DATA_KEY* pKeyData, void* param);
|
||||
static int32_t OnKeyDownRepeat(const void* a1, void* a2);
|
||||
static int32_t OnKeyDownRepeat(const EVENT_DATA_KEY* pKeyData, void* param);
|
||||
static int32_t OnKeyUp(const EVENT_DATA_KEY* pKeyData, void* param);
|
||||
static int32_t OnMouseDown(const EVENT_DATA_MOUSE* pMouseData, void* param);
|
||||
static int32_t OnMouseMove(const EVENT_DATA_MOUSE* pMouseData, void* param);
|
||||
|
||||
@ -17,14 +17,42 @@
|
||||
|
||||
|
||||
CM2Scene* CWorldScene::s_m2Scene;
|
||||
HTEXTURE CWorldScene::s_defaultTexture;
|
||||
HTEXTURE CWorldScene::s_defaultBlendTexture;
|
||||
|
||||
CM2Model* g_models[10] = {};
|
||||
|
||||
void CWorldSceneLightingCallback(CM2Model* model, CM2Lighting* lighting, void* userArg) {
|
||||
lighting->AddAmbient({ 1.0f, 1.0f, 1.0f });
|
||||
lighting->AddDiffuse({ 1.0f, 1.0f, 1.0f }, { 1.0f, 0.0f, 0.0f });
|
||||
lighting->AddSpecular({ 0.0f, 0.0f, 0.0f });
|
||||
}
|
||||
|
||||
void CWorldScene::Initialize() {
|
||||
// TODO
|
||||
CWorldScene::s_m2Scene = M2CreateScene();
|
||||
auto model = CWorldScene::s_m2Scene->CreateModel("Spells\\ErrorCube.mdx", 0);
|
||||
model->SetAnimating(1);
|
||||
model->SetVisible(1);
|
||||
g_models[0] = CWorldScene::s_m2Scene->CreateModel(R"(World\LORDAERON\Arathi\PassiveDoodads\Trees\ArathiStump01.m2)", 0);
|
||||
g_models[0]->SetWorldTransform(C3Vector(0.0f, 1.0f, 0.0f), 180.0f, 0.1f);
|
||||
|
||||
g_models[1] = CWorldScene::s_m2Scene->CreateModel(R"(World\NoDXT\Detail\ApkBus01.m2)", 0);
|
||||
g_models[1]->SetWorldTransform(C3Vector(0.0f, 1.5f, 0.0f), 180.0f, 1.0f);
|
||||
|
||||
g_models[2] = CWorldScene::s_m2Scene->CreateModel(R"(Creature\BloodElfGuard\BloodElfMale_Guard.m2)", 0);
|
||||
g_models[2]->SetWorldTransform(C3Vector(0.0f), 180.0f, 1.0f);
|
||||
|
||||
g_models[3] = CWorldScene::s_m2Scene->CreateModel(R"(World\AZEROTH\ELWYNN\PASSIVEDOODADS\Trees\ElwynnTree01\ElwynnPine01.m2)", 0);
|
||||
g_models[3]->SetWorldTransform(C3Vector(0.0f, -1.0f, 0.0f), 180.0f, 1.0f);
|
||||
|
||||
for (size_t i = 0; i < 10; ++i) {
|
||||
if (!g_models[i])
|
||||
continue;
|
||||
|
||||
g_models[i]->SetBoneSequence(0xFFFFFFFF, 0, 0xFFFFFFFF, 0, 1.0f, 1, 1);
|
||||
g_models[i]->SetLightingCallback(&CWorldSceneLightingCallback, nullptr);
|
||||
}
|
||||
|
||||
CWorldScene::s_defaultTexture = TextureCreateSolid({ 0x80, 0x80, 0x80, 0xFF });
|
||||
CWorldScene::s_defaultBlendTexture = TextureCreateSolid({ 0, 0, 0, 0xFF });
|
||||
}
|
||||
|
||||
void CWorldScene::Render(const C3Vector& cameraPos, float time) {
|
||||
@ -37,12 +65,25 @@ void CWorldScene::Render(const C3Vector& cameraPos, float time) {
|
||||
|
||||
|
||||
if (CWorldScene::s_m2Scene) {
|
||||
for (size_t i = 0; i < 10; ++i) {
|
||||
if (!g_models[i])
|
||||
continue;
|
||||
g_models[i]->SetAnimating(1);
|
||||
g_models[i]->SetVisible(1);
|
||||
}
|
||||
|
||||
CWorldScene::s_m2Scene->m_flags |= 1u;
|
||||
CWorldScene::s_m2Scene->AdvanceTime(static_cast<uint32_t>(time * 1000.0f));
|
||||
CWorldScene::s_m2Scene->Animate(cameraPos);
|
||||
CWorldScene::s_m2Scene->m_flags &= ~1u;
|
||||
}
|
||||
|
||||
// sub_6FDA20();
|
||||
// sub_7BB570();
|
||||
|
||||
CShaderEffect::UpdateProjMatrix();
|
||||
// CWorldScene::RenderSetFog();
|
||||
|
||||
DayNight::Update();
|
||||
DayNight::RenderSky();
|
||||
|
||||
|
||||
@ -4,11 +4,16 @@
|
||||
#include <cstdint>
|
||||
#include <tempest/Vector.hpp>
|
||||
|
||||
#include "gx/Texture.hpp"
|
||||
|
||||
class CM2Scene;
|
||||
|
||||
class CWorldScene {
|
||||
public:
|
||||
static CM2Scene* s_m2Scene;
|
||||
static HTEXTURE s_defaultTexture;
|
||||
static HTEXTURE s_defaultBlendTexture;
|
||||
|
||||
|
||||
static void Initialize();
|
||||
static void Render(const C3Vector& cameraPos, float time);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user