From 639d2ce889ed999ddc354979953d63701364a63e Mon Sep 17 00:00:00 2001 From: MrLetsplay Date: Mon, 16 Oct 2023 20:54:53 +0200 Subject: [PATCH] Very convincing terminal --- .clang-format | 29 +++++++++++ .clangd | 2 + .gitignore | 4 ++ .gitmodules | 3 ++ CMakeLists.txt | 69 +++++++++++++++++++++++++ dependencies/kekengine | 1 + src/haxxorizer/cpp/elements.cpp | 37 ++++++++++++++ src/haxxorizer/cpp/haxxorizer.cpp | 72 +++++++++++++++++++++++++++ src/haxxorizer/include/elements.h | 17 +++++++ src/haxxorizer/res/image/console.png | Bin 0 -> 3687 bytes toolchains/linux-mingw-windows.cmake | 20 ++++++++ 11 files changed, 254 insertions(+) create mode 100644 .clang-format create mode 100644 .clangd create mode 100644 .gitignore create mode 100644 .gitmodules create mode 100644 CMakeLists.txt create mode 160000 dependencies/kekengine create mode 100644 src/haxxorizer/cpp/elements.cpp create mode 100644 src/haxxorizer/cpp/haxxorizer.cpp create mode 100644 src/haxxorizer/include/elements.h create mode 100644 src/haxxorizer/res/image/console.png create mode 100644 toolchains/linux-mingw-windows.cmake diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..b7c077b --- /dev/null +++ b/.clang-format @@ -0,0 +1,29 @@ +Language: Cpp +BasedOnStyle: LLVM +IndentWidth: 4 +UseTab: Always +TabWidth: 4 +ColumnLimit: 0 +IndentCaseLabels: true +AllowShortIfStatementsOnASingleLine: true +FixNamespaceComments: false +SpaceBeforeParens: Never +SpaceAfterCStyleCast: true +SeparateDefinitionBlocks: Always +PackConstructorInitializers: Never +IncludeBlocks: Preserve +SpaceBeforeInheritanceColon: false +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignTrailingComments: false +AlignOperands: false +AlignEscapedNewlines: false +AlignConsecutiveMacros: false +AllowShortCaseLabelsOnASingleLine: false +SpaceBeforeCtorInitializerColon: false +SpaceBeforeAssignmentOperators: true +AllowShortLoopsOnASingleLine: true +AlignAfterOpenBracket: DontAlign +LambdaBodyIndentation: Signature +LineEnding: LF +ContinuationIndentWidth: 4 diff --git a/.clangd b/.clangd new file mode 100644 index 0000000..359a391 --- /dev/null +++ b/.clangd @@ -0,0 +1,2 @@ +CompileFlags: + Add: [-std=c++20] diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5ac3775 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +build/ +build.win/ +.vscode/ +.cache/ diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..9be7397 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "dependencies/kekengine"] + path = dependencies/kekengine + url = https://git.cringe-studios.com/mr/KekEngine.git diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..6ccb944 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,69 @@ +cmake_minimum_required(VERSION 3.13) + +project(Haxxorizer VERSION 1.0) + +option(HAXXORIZER_DEBUG "Build with debug information" OFF) + +if(UNIX) + set(HAXXORIZER_TARGET_PLATFORM Linux) +endif() +if(WIN32) + set(HAXXORIZER_TARGET_PLATFORM Windows) +endif() + +message("Debug: ${HAXXORIZER_DEBUG}") +message("Target platform: ${HAXXORIZER_TARGET_PLATFORM}") + +set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) +set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib) +set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin) + +set(HAXXORIZER_RESOURCE_DIR "${PROJECT_SOURCE_DIR}/src/haxxorizer/res") + +file(GLOB_RECURSE HAXXORIZER_SOURCE_FILES "src/haxxorizer/cpp/*.cpp") +file(GLOB_RECURSE HAXXORIZER_RESOURCE_FILES "${HAXXORIZER_RESOURCE_DIR}/*") +file(GLOB_RECURSE HAXXORIZER_RELATIVE_RESOURCE_FILES RELATIVE ${HAXXORIZER_RESOURCE_DIR} "${HAXXORIZER_RESOURCE_DIR}/*") + +if(${HAXXORIZER_DEBUG}) + add_compile_options(-Wall -g) +else() + add_compile_options(-Wall -O3) +endif() + +add_subdirectory(dependencies/kekengine) + +# haxxorizer resources +add_custom_target(haxxorizer_res ALL DEPENDS ${KEKENGINE_RESOURCE_FILES}) + +add_dependencies(haxxorizer_res kekengine_static) + +get_target_property(KEKENGINE_BINARY_DIR kekengine "RUNTIME_OUTPUT_DIRECTORY") + +add_custom_command(TARGET haxxorizer_res PRE_BUILD + BYPRODUCTS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/resources.tar + COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}" + COMMAND ${CMAKE_COMMAND} -E + copy "${KEKENGINE_BINARY_DIR}/resources.tar" "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/resources.tar" + COMMAND ${CMAKE_COMMAND} -E + chdir ${HAXXORIZER_RESOURCE_DIR} + tar rf ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/resources.tar ${HAXXORIZER_RELATIVE_RESOURCE_FILES}) + +# haxxorizer +add_executable(haxxorizer ${HAXXORIZER_SOURCE_FILES}) +add_dependencies(haxxorizer haxxorizer_res) + +target_include_directories(haxxorizer PUBLIC "src/haxxorizer/include") + +find_package(PkgConfig REQUIRED) + +pkg_check_modules(FREETYPE REQUIRED freetype2) +target_include_directories(haxxorizer PUBLIC ${FREETYPE_INCLUDE_DIRS}) + +pkg_check_modules(BULLET REQUIRED bullet) +target_include_directories(haxxorizer PUBLIC ${BULLET_INCLUDE_DIRS}) + +if(WIN32) + target_link_options(haxxorizer PUBLIC -static-libgcc -static-libstdc++ -static) +endif() + +target_link_libraries(haxxorizer PUBLIC kekengine_static) diff --git a/dependencies/kekengine b/dependencies/kekengine new file mode 160000 index 0000000..bbee789 --- /dev/null +++ b/dependencies/kekengine @@ -0,0 +1 @@ +Subproject commit bbee789593fda91071e2d06a0320c05d12b59649 diff --git a/src/haxxorizer/cpp/elements.cpp b/src/haxxorizer/cpp/elements.cpp new file mode 100644 index 0000000..4ed697a --- /dev/null +++ b/src/haxxorizer/cpp/elements.cpp @@ -0,0 +1,37 @@ +#include + +#include "color.h" +#include "elements.h" +#include "ui.h" +#include "uielements.h" +#include "utils.h" + +ConsoleElement::ConsoleElement(kek::UIValue x, kek::UIValue y, kek::UIValue w, kek::UIValue h) + : kek::RectangleElement(x, y, w, h) { + color = kek::Colors::BLACK; + + this->textElement = new kek::TextElement(x, y); + addChild(textElement); + + kek::TextElement *text = new kek::TextElement(uiPx(0), uiPh(1)); + text->textBounds = kek::TextBounds::LINE; + text->origin = kek::Origin::BOTTOM_LEFT; + text->setText("user@cringe-studios.com $ "); + addChild(text); + + this->textFieldElement = new kek::TextFieldElement(uiPx(text->getBounds().w), uiPh(1), uiPw(1) - uiPx(text->getBounds().w)); + textFieldElement->origin = kek::Origin::BOTTOM_LEFT; + textFieldElement->color = kek::Colors::BLACK; + textFieldElement->focusColor = kek::Colors::BLACK; + textFieldElement->cursor->color = kek::Colors::WHITE; + textFieldElement->textElement->color = kek::Colors::WHITE; + addChild(textFieldElement); +} + +ConsoleElement::~ConsoleElement() { + delete textElement; +} + +void ConsoleElement::setText(std::string text) { + textElement->setText(text); +} diff --git a/src/haxxorizer/cpp/haxxorizer.cpp b/src/haxxorizer/cpp/haxxorizer.cpp new file mode 100644 index 0000000..935e4af --- /dev/null +++ b/src/haxxorizer/cpp/haxxorizer.cpp @@ -0,0 +1,72 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "BulletCollision/CollisionDispatch/btCollisionObject.h" +#include "BulletCollision/CollisionShapes/btBoxShape.h" +#include "LinearMath/btVector3.h" +#include "constants.h" +#include "elements.h" +#include "engine.h" +#include "gameobject.h" +#include "input.h" +#include "internal/physics.h" +#include "kekengine.h" +#include "light.h" +#include "mesh.h" +#include "player.h" +#include "scene.h" +#include "texture.h" +#include "ui.h" +#include "uielements.h" +#include "utils.h" + +using namespace kek; + +#define CHUNK_SIZE 64 +#define CHUNK_RADIUS 2 +#define WALLS_PER_CHUNK 20 +#define WALL_HEIGHT 10 +#define LIGHT_SPACING 16 + +static ButtonElement *buttonPlay; + +void gameLoop(GLFWwindow *window, void *) {} + +void startGame() { + ConsoleElement *console = new ConsoleElement(uiPx(10), uiPx(10), uiSw(1) - uiPx(20), uiSh(1) - uiPx(20)); + console->textFieldElement->onSubmit = SubmitCallback([](std::string text, void *data) { + ConsoleElement *_console = (ConsoleElement *) data; + _console->textElement->setText(_console->textElement->getText() + "\n" + "> " + text); + _console->textFieldElement->setText(""); + UI::focusElement(_console->textFieldElement); + }, + console); + UI::addElement(console); +} + +int main() { + if(Engine::init() != KEK_SUCCESS) + return 1; + + buttonPlay = new ButtonElement(uiSw(0.5), uiSh(0.5), uiPx(500), uiPx(75)); + buttonPlay->origin = Origin::CENTER; + buttonPlay->text->setText("Play"); + buttonPlay->text->sizePixels = 50; + buttonPlay->text->color = Colors::BLACK; + buttonPlay->onClick = Callable(startGame); + + UI::addElement(buttonPlay); + Input::setCursorMode(GLFWCursorMode::FREE); + + if(Engine::start() != KEK_SUCCESS) + return 1; + + Engine::exit(); +} diff --git a/src/haxxorizer/include/elements.h b/src/haxxorizer/include/elements.h new file mode 100644 index 0000000..4de8015 --- /dev/null +++ b/src/haxxorizer/include/elements.h @@ -0,0 +1,17 @@ +#pragma once + +#include "ui.h" +#include "uielements.h" + +class ConsoleElement: public kek::RectangleElement { + + public: + kek::TextElement *textElement; + kek::TextFieldElement *textFieldElement; + + ConsoleElement(kek::UIValue x, kek::UIValue y, kek::UIValue w, kek::UIValue h); + + virtual ~ConsoleElement(); + + void setText(std::string text); +}; diff --git a/src/haxxorizer/res/image/console.png b/src/haxxorizer/res/image/console.png new file mode 100644 index 0000000000000000000000000000000000000000..2a66dce63c3dac6ddc879b7c4eca2484e673a009 GIT binary patch literal 3687 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 y@Fi12@U7j|>l8`y&BRAKtN-i|