Merge branch 'whoahq:master' into master

This commit is contained in:
VDm 2023-05-13 21:07:17 +03:00 committed by GitHub
commit 746a2c20e9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 95 additions and 40 deletions

View File

@ -3,6 +3,7 @@
static int32_t s_active; static int32_t s_active;
static int32_t s_consoleAccessEnabled; static int32_t s_consoleAccessEnabled;
static KEY s_consoleKey = KEY_TILDE; static KEY s_consoleKey = KEY_TILDE;
static CONSOLERESIZESTATE s_consoleResizeState = CS_NONE;
int32_t ConsoleAccessGetEnabled() { int32_t ConsoleAccessGetEnabled() {
return s_consoleAccessEnabled; return s_consoleAccessEnabled;
@ -20,6 +21,10 @@ KEY ConsoleGetHotKey() {
return s_consoleKey; return s_consoleKey;
} }
CONSOLERESIZESTATE ConsoleGetResizeState() {
return s_consoleResizeState;
}
void ConsoleSetActive(int32_t active) { void ConsoleSetActive(int32_t active) {
s_active = active; s_active = active;
} }
@ -27,3 +32,7 @@ void ConsoleSetActive(int32_t active) {
void ConsoleSetHotKey(KEY hotkey) { void ConsoleSetHotKey(KEY hotkey) {
s_consoleKey = hotkey; s_consoleKey = hotkey;
} }
void ConsoleSetResizeState(CONSOLERESIZESTATE state) {
s_consoleResizeState = state;
}

View File

@ -1,6 +1,7 @@
#ifndef CONSOLE_CONSOLE_HPP #ifndef CONSOLE_CONSOLE_HPP
#define CONSOLE_CONSOLE_HPP #define CONSOLE_CONSOLE_HPP
#include "console/Types.hpp"
#include "event/Types.hpp" #include "event/Types.hpp"
#include <cstdint> #include <cstdint>
@ -12,8 +13,12 @@ int32_t ConsoleGetActive();
KEY ConsoleGetHotKey(); KEY ConsoleGetHotKey();
CONSOLERESIZESTATE ConsoleGetResizeState();
void ConsoleSetActive(int32_t active); void ConsoleSetActive(int32_t active);
void ConsoleSetHotKey(KEY hotkey); void ConsoleSetHotKey(KEY hotkey);
void ConsoleSetResizeState(CONSOLERESIZESTATE state);
#endif // ifndef CONSOLE_CONSOLE_HPP #endif // ifndef CONSOLE_CONSOLE_HPP

View File

@ -1,4 +1,6 @@
#include "console/Handlers.hpp" #include "console/Handlers.hpp"
#include "console/Console.hpp"
#include "console/Screen.hpp"
#include "event/Event.hpp" #include "event/Event.hpp"
#include <cstdint> #include <cstdint>
@ -10,13 +12,33 @@ int32_t OnChar(const EVENT_DATA_CHAR* data, void* param) {
} }
int32_t OnIdle(const EVENT_DATA_IDLE* data, void* param) { int32_t OnIdle(const EVENT_DATA_IDLE* data, void* param) {
// TODO // TODO repeat buffer logic
ConsoleScreenAnimate(data->elapsedSec);
return 1; return 1;
} }
int32_t OnKeyDown(const EVENT_DATA_KEY* data, void* param) { int32_t OnKeyDown(const EVENT_DATA_KEY* data, void* param) {
// TODO if (data->key == ConsoleGetHotKey() && ConsoleAccessGetEnabled()) {
// Toggle the console on/off if the console hotkey is pressed down
// and the console access is enabled for the client
ConsoleSetActive(!ConsoleGetActive());
// Reset the highlight when toggled off
if (!ConsoleGetActive()) {
// TODO ResetHighlight();
}
return 0;
}
if (EventIsKeyDown(ConsoleGetHotKey()) || !ConsoleGetActive()) {
return 1; return 1;
}
// TODO
return 0;
} }
int32_t OnKeyDownRepeat(const EVENT_DATA_KEY* data, void* param) { int32_t OnKeyDownRepeat(const EVENT_DATA_KEY* data, void* param) {

View File

@ -1,4 +1,5 @@
#include "console/Screen.hpp" #include "console/Screen.hpp"
#include "console/Console.hpp"
#include "console/Handlers.hpp" #include "console/Handlers.hpp"
#include "console/Types.hpp" #include "console/Types.hpp"
#include "gx/Buffer.hpp" #include "gx/Buffer.hpp"
@ -11,11 +12,14 @@
#include "gx/Screen.hpp" #include "gx/Screen.hpp"
#include <storm/String.hpp> #include <storm/String.hpp>
#include <tempest/Rect.hpp> #include <tempest/Rect.hpp>
#include <algorithm>
static CGxStringBatch* s_batch; static CGxStringBatch* s_batch;
static float s_caretpixwidth; static float s_caretpixwidth;
static float s_caretpixheight; static float s_caretpixheight;
static float s_consoleLines = 10.0f;
static float s_fontHeight = 0.02f; static float s_fontHeight = 0.02f;
static float s_consoleHeight = s_consoleLines * s_fontHeight;
static char s_fontName[STORM_MAX_PATH]; static char s_fontName[STORM_MAX_PATH];
static int32_t s_highlightState; static int32_t s_highlightState;
static HLAYER s_layerBackground; static HLAYER s_layerBackground;
@ -83,6 +87,29 @@ void PaintText(void* param, const RECTF* rect, const RECTF* visible, float elaps
// TODO // TODO
} }
void ConsoleScreenAnimate(float elapsedSec) {
auto finalPos = ConsoleGetActive() ? std::min(1.0f - s_consoleHeight, 1.0f) : 1.0f;
finalPos = std::max(finalPos, 0.0f);
if (s_rect.bottom == finalPos) {
return;
}
auto currentPos = finalPos;
if (ConsoleGetResizeState() == CS_NONE) {
auto direction = s_rect.bottom <= finalPos ? 1.0f : -1.0f;
currentPos = s_rect.bottom + direction * elapsedSec * 5.0f;
currentPos = ConsoleGetActive() ? std::max(currentPos, finalPos) : std::min(currentPos, finalPos);
}
s_rect.bottom = currentPos;
ScrnLayerSetRect(s_layerBackground, &s_rect);
ScrnLayerSetRect(s_layerText, &s_rect);
}
void ConsoleScreenInitialize(const char* title) { void ConsoleScreenInitialize(const char* title) {
CRect windowSize; CRect windowSize;
GxCapsWindowSize(windowSize); GxCapsWindowSize(windowSize);

View File

@ -1,6 +1,8 @@
#ifndef CONSOLE_SCREEN_HPP #ifndef CONSOLE_SCREEN_HPP
#define CONSOLE_SCREEN_HPP #define CONSOLE_SCREEN_HPP
void ConsoleScreenAnimate(float elapsedSec);
void ConsoleScreenInitialize(const char* title); void ConsoleScreenInitialize(const char* title);
#endif #endif

View File

@ -14,4 +14,10 @@ enum COLOR_T {
NUM_COLORTYPES, NUM_COLORTYPES,
}; };
enum CONSOLERESIZESTATE {
CS_NONE,
CS_STRETCH,
NUM_CONSOLERESIZESTATES,
};
#endif #endif

View File

@ -8,7 +8,7 @@ const CGxStateBom& CGxStateBom::operator=(int32_t value) {
} }
const CGxStateBom& CGxStateBom::operator=(uint32_t value) { const CGxStateBom& CGxStateBom::operator=(uint32_t value) {
this->m_data.i[0] = value; this->m_data.u[0] = value;
return *this; return *this;
} }
@ -86,7 +86,7 @@ bool CGxStateBom::operator!=(CGxStateBom& value) {
CGxStateBom::operator CImVector() const { CGxStateBom::operator CImVector() const {
CImVector color; CImVector color;
color.value = this->m_data.i[0]; color.value = this->m_data.u[0];
return color; return color;
} }
@ -99,7 +99,7 @@ CGxStateBom::operator int32_t() const {
} }
CGxStateBom::operator uint32_t() const { CGxStateBom::operator uint32_t() const {
return this->m_data.i[0]; return this->m_data.u[0];
} }
CGxStateBom::operator void*() const { CGxStateBom::operator void*() const {

View File

@ -13,6 +13,14 @@ void CScriptObject::RegisterScriptMethods(lua_State* L) {
FrameScript_Object::FillScriptMethodTable(L, ScriptObjectMethods, NUM_SCRIPT_OBJECT_SCRIPT_METHODS); FrameScript_Object::FillScriptMethodTable(L, ScriptObjectMethods, NUM_SCRIPT_OBJECT_SCRIPT_METHODS);
} }
int32_t CScriptObject::GetObjectType() {
if (!CScriptObject::s_objectType) {
CScriptObject::s_objectType = ++FrameScript_Object::s_objectTypes;
}
return CScriptObject::s_objectType;
}
CScriptObject* CScriptObject::GetScriptObjectByName(const char* name, int32_t type) { CScriptObject* CScriptObject::GetScriptObjectByName(const char* name, int32_t type) {
lua_State* L = FrameScript_GetContext(); lua_State* L = FrameScript_GetContext();

View File

@ -15,6 +15,7 @@ class CScriptObject : public FrameScript_Object {
static const char* s_objectTypeName; static const char* s_objectTypeName;
// Static functions // Static functions
static int32_t GetObjectType();
static void RegisterScriptMethods(lua_State* L); static void RegisterScriptMethods(lua_State* L);
static CScriptObject* GetScriptObjectByName(const char* name, int32_t type); static CScriptObject* GetScriptObjectByName(const char* name, int32_t type);

View File

@ -4,13 +4,8 @@
#include <cstdint> #include <cstdint>
int32_t CScriptObject_GetObjectType(lua_State* L) { int32_t CScriptObject_GetObjectType(lua_State* L) {
if (!CScriptObject::s_objectType) { auto object = static_cast<CScriptObject*>(FrameScript_GetObjectThis(L, CScriptObject::GetObjectType()));
CScriptObject::s_objectType = ++FrameScript_Object::s_objectTypes; auto type = object->GetObjectTypeName();
}
CScriptObject* object = (CScriptObject*)FrameScript_GetObjectThis(L, CScriptObject::s_objectType);
const char* type = object->GetObjectTypeName();
lua_pushstring(L, type); lua_pushstring(L, type);
@ -18,24 +13,14 @@ int32_t CScriptObject_GetObjectType(lua_State* L) {
} }
int32_t CScriptObject_IsObjectType(lua_State* L) { int32_t CScriptObject_IsObjectType(lua_State* L) {
if (!CScriptObject::s_objectType) { auto object = static_cast<CScriptObject*>(FrameScript_GetObjectThis(L, CScriptObject::GetObjectType()));
CScriptObject::s_objectType = ++FrameScript_Object::s_objectTypes;
}
CScriptObject* object = (CScriptObject*)FrameScript_GetObjectThis(L, CScriptObject::s_objectType);
if (!lua_isstring(L, 2)) { if (!lua_isstring(L, 2)) {
const char* name = object->GetName(); auto name = object->GetDisplayName();
return luaL_error(L, "Usage: %s:IsObjectType(\"type\")", name);
if (!name) {
name = "<unnamed>";
} }
luaL_error(L, "Usage: %s:IsObjectType(\"type\")", name); auto type = lua_tolstring(L, 2, nullptr);
return 0;
}
const char* type = lua_tolstring(L, 2, 0);
if (object->IsA(type)) { if (object->IsA(type)) {
lua_pushnumber(L, 1.0); lua_pushnumber(L, 1.0);
@ -47,13 +32,8 @@ int32_t CScriptObject_IsObjectType(lua_State* L) {
} }
int32_t CScriptObject_GetName(lua_State* L) { int32_t CScriptObject_GetName(lua_State* L) {
if (!CScriptObject::s_objectType) { auto object = static_cast<CScriptObject*>(FrameScript_GetObjectThis(L, CScriptObject::GetObjectType()));
CScriptObject::s_objectType = ++FrameScript_Object::s_objectTypes; auto name = object->GetName();
}
CScriptObject* object = (CScriptObject*)FrameScript_GetObjectThis(L, CScriptObject::s_objectType);
char* name = object->GetName();
if (name && *name) { if (name && *name) {
lua_pushstring(L, name); lua_pushstring(L, name);
@ -65,17 +45,12 @@ int32_t CScriptObject_GetName(lua_State* L) {
} }
int32_t CScriptObject_GetParent(lua_State* L) { int32_t CScriptObject_GetParent(lua_State* L) {
if (!CScriptObject::s_objectType) { auto object = static_cast<CScriptObject*>(FrameScript_GetObjectThis(L, CScriptObject::GetObjectType()));
CScriptObject::s_objectType = ++FrameScript_Object::s_objectTypes;
}
CScriptObject* object = (CScriptObject*)FrameScript_GetObjectThis(L, CScriptObject::s_objectType);
CScriptObject* parent = object->GetScriptObjectParent(); CScriptObject* parent = object->GetScriptObjectParent();
if (parent) { if (parent) {
if (!parent->lua_registered) { if (!parent->lua_registered) {
parent->RegisterScriptObject(0); parent->RegisterScriptObject(nullptr);
} }
lua_rawgeti(L, LUA_REGISTRYINDEX, parent->lua_objectRef); lua_rawgeti(L, LUA_REGISTRYINDEX, parent->lua_objectRef);