diff options
author | rtk0c <[email protected]> | 2022-05-30 17:03:20 -0700 |
---|---|---|
committer | rtk0c <[email protected]> | 2022-05-30 17:03:20 -0700 |
commit | e66286ebe30afc9acc4531fc2bea29b7fb924f93 (patch) | |
tree | fa6b76554c3eb88bc8f088fbab68e20c40118ca7 /source/Player.cpp | |
parent | 366ef5a5450c6e0e680c924c3454943a9ae9814d (diff) |
Changeset: 56 Buildsystem cleanup: change to layered structure for different targets
Diffstat (limited to 'source/Player.cpp')
-rw-r--r-- | source/Player.cpp | 139 |
1 files changed, 0 insertions, 139 deletions
diff --git a/source/Player.cpp b/source/Player.cpp deleted file mode 100644 index 34c4549..0000000 --- a/source/Player.cpp +++ /dev/null @@ -1,139 +0,0 @@ -#include "Player.hpp" - -#include "AppConfig.hpp" -#include "CommonVertexIndex.hpp" -#include "ScopeGuard.hpp" -#include "Utils.hpp" - -#include <cstdio> -#include <cstdlib> - -// Keep the same number as # of fields in `struct {}` in PlayerKeyBinds -constexpr int kPlayerKeyBindCount = 4; - -// Here be dragons: this treats consecutive fiels as an array, technically UB -std::span<int> PlayerKeyBinds::GetKeyArray() { - return { &keyLeft, kPlayerKeyBindCount }; -} -std::span<bool> PlayerKeyBinds::GetKeyStatusArray() { - return { &pressedLeft, kPlayerKeyBindCount }; -} - -Player::Player(GameWorld* world, int id) - : GameObject(KD_Player, world) - , mId{ id } { - renderObject.SetMaterial(gDefaultMaterial.Get()); - renderObject.SetFormat(gVformatStandard.Get(), Tags::IT_16Bit); - renderObject.RebuildIfNecessary(); -} - -void Player::Awaken() { - LoadFromFile(); -} - -void Player::Resleep() { - SaveToFile(); -} - -void Player::Update() { - using namespace Tags; - - if (keybinds.pressedLeft) { - } - if (keybinds.pressedRight) { - } - - // TODO jump controller - - // TODO attack controller - - // TODO set default sprite to get rid of this check - if (sprite.GetDefinition()) { - int prevFrame = sprite.GetFrame(); - sprite.PlayFrame(); - int currFrame = sprite.GetFrame(); - if (prevFrame != currFrame) { - uint16_t indices[6]; - Index_U16::Assign(indices, 0); - renderObject.GetIndexBuffer()->Upload((const std::byte*)indices, IT_16Bit, std::size(indices)); - - Vertex_PTC vertices[4]; - Vertex_PTC::Assign(vertices, Rect<float>{ GetPos(), sprite.GetDefinition()->GetBoundingBox() }); - Vertex_PTC::Assign(vertices, 0.0f); - Vertex_PTC::Assign(vertices, RgbaColor(255, 255, 255)); - Vertex_PTC::Assign(vertices, sprite.GetFrameSubregion()); - renderObject.GetVertexBufferBindings().bindings[0]->Upload((const std::byte*)vertices, sizeof(vertices)); - } - } -} - -Material* Player::GetMaterial() const { - return renderObject.GetMaterial(); -} - -void Player::SetMaterial(Material* material) { - renderObject.SetMaterial(material); - renderObject.RebuildIfNecessary(); -} - -std::span<const RenderObject> Player::GetRenderObjects() const { - return { &renderObject, 1 }; -} - -void Player::HandleKeyInput(int key, int action) { - bool pressed; - if (action == GLFW_PRESS) { - pressed = true; - } else if (action == GLFW_REPEAT) { - return; - } else /* action == GLFW_RELEASE */ { - pressed = false; - } - - for (int i = 0; i < kPlayerKeyBindCount; ++i) { - int kbKey = keybinds.GetKeyArray()[i]; - bool& kbStatus = keybinds.GetKeyStatusArray()[i]; - - if (kbKey == key) { - kbStatus = pressed; - break; - } - } -} - -#pragma push_macro("PLAYERKEYBINDS_DO_IO") -#undef PLAYERKEYBINDS_DO_IO -#define PLAYERKEYBINDS_DO_IO(function, fieldPrefix) \ - function(file, "left=%d\n", fieldPrefix keybinds.keyLeft); \ - function(file, "right=%d\n", fieldPrefix keybinds.keyRight); \ - function(file, "jump=%d\n", fieldPrefix keybinds.keyJump); \ - function(file, "attack=%d\n", fieldPrefix keybinds.keyAttack); - -static FILE* OpenPlayerConfigFile(Player* player, Utils::IoMode mode) { - char path[2048]; - snprintf(path, sizeof(path), "%s/player%d.txt", AppConfig::dataDir.c_str(), player->GetId()); - - return Utils::OpenCstdioFile(path, mode); -} - -bool Player::LoadFromFile() { - auto file = OpenPlayerConfigFile(this, Utils::Read); - if (!file) return false; - DEFER { fclose(file); }; - - // TODO input validation - PLAYERKEYBINDS_DO_IO(fscanf, &); - - return true; -} - -bool Player::SaveToFile() { - auto file = OpenPlayerConfigFile(this, Utils::WriteTruncate); - if (!file) return false; - DEFER { fclose(file); }; - - PLAYERKEYBINDS_DO_IO(fprintf, ); - - return true; -} -#pragma pop_macro("PLAYERKEYBINDS_DO_IO") |