Give Player control over GameGui, unlock mouse when in menu.

master
Nicole Collings 2019-10-24 20:16:39 -07:00
parent 3a609737fe
commit 2a99b7c6c9
18 changed files with 149 additions and 133 deletions

View File

@ -26,6 +26,8 @@ zepha.register_entity("zeus:default:test", {
y = self.object.pos.y,
z = self.object.pos.z + 0.08 * math.cos(math.rad(self.object.yaw))})
self.object:int_yaw(self.object.yaw + 2)
self.object:int_yaw(math.deg(math.atan2(zepha.player.pos.x - self.object.pos.x, zepha.player.pos.z - self.object.pos.z)) + 180)
end
})

View File

@ -7,31 +7,35 @@ zepha.register_keybind("open_inventory", {
description = "Open Inventory",
default = zepha.keys.e,
on_press = function()
zepha.show_menu({
key = "form_root",
type = "rect",
size = "1920px, 1080px",
background = "#0004",
children = {{
key = "inv_root",
if zepha.player.menu_state == "" then
zepha.show_menu("inventory", {
key = "form_root",
type = "rect",
position = "202px, 138px",
size = "236px, 118px",
padding = "20px, 10px, 8px, 10px",
background = "inventory"
}, {
key = "hotwheel_root",
type = "rect",
size = "1920px, 1080px",
background = "#0004",
position = "296px, 268px",
size = "52px, 52px",
background = "inventory_wheel"
} }
});
children = {{
key = "inv_root",
type = "rect",
position = "202px, 138px",
size = "236px, 118px",
padding = "20px, 10px, 8px, 10px",
background = "inventory"
}, {
key = "hotwheel_root",
type = "rect",
position = "296px, 268px",
size = "52px, 52px",
background = "inventory_wheel"
} }
});
else
zepha.close_menu()
end
-- print(zepha.player.menu_state)
-- zepha.show_menu([[
-- rect[form_root]
-- size=1920px 1080px

View File

@ -15,8 +15,8 @@ LocalDefs::LocalDefs(const std::string& path) :
textureAtlas.loadDirectory(tex_path);
}
void LocalDefs::initLuaApi(LocalWorld &world, GameGui& gui, Player& player) {
luaApi.init(*this, world, gui, player);
void LocalDefs::initLuaApi(LocalWorld &world, Player& player) {
luaApi.init(*this, world, player);
}
LocalDefinitionAtlas &LocalDefs::defs() {

View File

@ -19,7 +19,7 @@ public:
TextureAtlas& textures();
LocalLuaParser& lua();
void initLuaApi(LocalWorld &world, GameGui& gui, Player& player);
void initLuaApi(LocalWorld &world, Player& player);
void update(double delta, bool* keys);
~LocalDefs() = default;

View File

@ -26,7 +26,7 @@ int Window::initialize() {
return 1;
}
//Version 3.2
//Version 3.3
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);

View File

@ -5,83 +5,38 @@
#include "GameGui.h"
GameGui::GameGui(glm::vec2 bufferSize, TextureAtlas& atlas) {
auto crosshair = std::make_shared<GUIRect>("crosshair");
auto crosshair = std::make_shared<GUIRect>("__crosshair");
crosshair->create({22, 22}, {}, atlas.getTextureRef("crosshair"));
crosshair->setPos({bufferSize.x / 2 - 11, bufferSize.y / 2 - 9});
add(crosshair);
auto viginette = std::make_shared<GUIRect>("viginette");
auto viginette = std::make_shared<GUIRect>("__viginette");
viginette->create(bufferSize, {}, atlas.getTextureRef("viginette"));
add(viginette);
// auto root = std::make_shared<GUIRect>("root");
// root->create(bufferSize, {}, {0, 0, 0, 0.25});
// add(root);
// auto inv_root = std::make_shared<GUIRect>("inv_root");
// inv_root->create({648, 270}, {60, 30, 24, 30}, atlas.getTextureRef("inventory"));
// inv_root->setPos({bufferSize.x / 2 - 354, bufferSize.y / 2 - 90});
// root->add(inv_root);
//
// std::array<std::string, 6> mats = {
// "zeus:materials:stick",
// "zeus:materials:rock",
// "zeus:materials:flint",
// "aurailus:basictools:flint_pickaxe",
// "aurailus:basictools:flint_hatchet",
// "aurailus:basictools:flint_shovel"
// };
//
// for (int i = 0; i < 5; i++) {
// for (int j = 0; j < 12; j++) {
// auto inv_slot = std::make_shared<GUIRect>("inv_slot_" + to_string(i) + "_" + to_string(j));
// inv_slot->create({48, 48}, {}, atlas.getTextureRef(mats[rand() % 6]));
// inv_slot->setPos({3 + j * 54, 3 + i * 54});
// inv_root->add(inv_slot);
// }
// }
//
// auto shortcuts_root = std::make_shared<GUIRect>("shortcut_root");
// shortcuts_root->create({156, 156}, {}, atlas.getTextureRef("inventory_wheel"));
// shortcuts_root->setPos({bufferSize.x / 2 - 72, bufferSize.y - 200});
// root->add(shortcuts_root);
//
// std::array<glm::vec2, 6> vec_roots = {
// glm::vec2 { 133, -26 },
// glm::vec2 { 155, 37 },
// glm::vec2 { 133, 100},
// glm::vec2 {-241, -26 },
// glm::vec2 {-263, 37 },
// glm::vec2 {-241, 100}
// };
//
// for (auto i = 0; i < 6; i++) {
// glm::vec2 vec = vec_roots[i];
//
// auto shortcut_slot = std::make_shared<GUIRect>("shortcut_slot_" + to_string(i));
// shortcut_slot->create({216, 54}, {15, 24, 15, 24}, atlas.getTextureRef("inventory_wheel_slot"));
// shortcut_slot->setPos(vec);
// shortcuts_root->add(shortcut_slot);
// }
//
// root->setVisible(false);
auto root = std::make_shared<GUIContainer>("__root");
add(root);
}
void GameGui::bufferResized(glm::vec2 bufferSize) {
get<GUIRect>("crosshair")->setPos({bufferSize.x / 2 - 11, bufferSize.y / 2 - 9});
get<GUIRect>("viginette")->setScale({bufferSize.x, bufferSize.y});
get<GUIRect>("__crosshair")->setPos({bufferSize.x / 2 - 11, bufferSize.y / 2 - 9});
get<GUIRect>("__viginette")->setScale({bufferSize.x, bufferSize.y});
}
void GameGui::setMenu(const std::string& state, std::shared_ptr<GUIComponent> component) {
menuState = state;
get<GUIContainer>("__root")->add(component);
}
void GameGui::closeMenu() {
menuState = "";
get<GUIContainer>("__root")->remove("__lua_root");
}
const std::string &GameGui::getMenuState() {
return menuState;
}
void GameGui::setVisible(bool visible) {
GUIComponent::setVisible(visible);
// get<GUIRect>("root")->setVisible(invOpen);
}
void GameGui::setInvOpen(bool open) {
// get<GUIRect>("root")->setVisible(open);
invOpen = open;
}
bool GameGui::isInvOpen() {
return invOpen;
}

View File

@ -7,7 +7,6 @@
#include "components/basic/GUIRect.h"
#include "components/basic/GUIContainer.h"
#include "../graph/drawable/DrawableGroup.h"
#include "../ClientState.h"
#include "../entity/Entity.h"
class GameGui : public GUIContainer {
@ -16,9 +15,11 @@ public:
void bufferResized(glm::vec2 bufferSize);
void setVisible(bool visible) override;
void setInvOpen(bool open);
bool isInvOpen();
bool invOpen;
void setMenu(const std::string& state, std::shared_ptr<GUIComponent> component);
void closeMenu();
const std::string& getMenuState();
std::string menuState = "";
};

View File

@ -10,22 +10,14 @@ GameScene::GameScene(ClientState& state) : Scene(state),
server(state.connection, defs),
world(defs, &playerPos, &server),
player(world, defs, state.renderer.getCamera()),
gameGui (state.renderer.getCamera().getBufferDimensions(), defs.textures()),
player(world, defs, state.renderer),
debugGui(state.renderer.getCamera().getBufferDimensions(), defs) {
state.renderer.setClearColor(148, 194, 240);
state.renderer.getWindow().lockMouse(true);
defs.initLuaApi(world, gameGui, player);
defs.initLuaApi(world, player);
world.init();
gui.push_back(&gameGui);
gui.push_back(&debugGui);
debugGui.initItemDisplays(defs);
entities.push_back(&player);
server.init(&world);
Packet r(PacketType::CONNECT_DATA_RECVD);
@ -39,15 +31,14 @@ void GameScene::update() {
Window& window = state.renderer.getWindow();
playerPos = player.getPos();
//Update Player
player.update(window.input, state.deltaTime, window.getDeltaX(), window.getDeltaY());
playerPos = player.getPos();
for (auto entity : entities) entity->update(state.deltaTime);
if (state.renderer.resized) {
debugGui.bufferResized(state.renderer.getCamera().getBufferDimensions());
gameGui.bufferResized(state.renderer.getCamera().getBufferDimensions());
state.renderer.resized = false;
}
@ -61,7 +52,7 @@ void GameScene::update() {
if (window.input.isKeyPressed(GLFW_KEY_F1)) {
hudVisible = !hudVisible;
debugGui.changeVisibilityState(hudVisible ? debugVisible ? 0 : 2 : 1);
gameGui.setVisible(hudVisible);
player.setGuiVisible(hudVisible);
}
if (window.input.isKeyPressed(GLFW_KEY_F3)) {
@ -83,20 +74,20 @@ void GameScene::draw() {
renderer.beginChunkDeferredCalls();
renderer.enableTexture(&defs.textures().getAtlasTexture());
Timer t("rendering chunks");
drawCalls = world.renderChunks(renderer);
// t.printElapsedMs();
renderer.beginEntityDeferredCalls();
for (auto entity : entities) entity->draw(renderer);
world.renderEntities(renderer);
player.draw(renderer);
renderer.endDeferredCalls();
renderer.beginGUIDrawCalls();
renderer.enableTexture(&defs.textures().getAtlasTexture());
for (auto entity : gui) entity->draw(renderer);
player.drawGUI(renderer);
debugGui.draw(renderer);
renderer.swapBuffers();
}

View File

@ -35,9 +35,7 @@ public:
LocalWorld world;
std::vector<Drawable*> entities;
std::vector<Drawable*> gui;
GameGui gameGui;
DebugGui debugGui;
int drawCalls = 0;

View File

@ -5,13 +5,18 @@
#include "Player.h"
#include "../../../util/Ray.h"
Player::Player(LocalWorld& world, LocalDefs& defs, Camera& camera) :
Player::Player(LocalWorld& world, LocalDefs& defs, Renderer& renderer) :
world(world),
camera(camera),
renderer(renderer),
defs(defs),
gameGui(renderer.getCamera().getBufferDimensions(), defs.textures()),
wireframe(WireframeEntity({}, 0.01, {1, 1, 1})) {}
void Player::update(InputManager &input, double delta, double mouseX, double mouseY) {
if (renderer.resized) {
gameGui.bufferResized(renderer.getCamera().getBufferDimensions());
//Gamescene unsets renderer.resized right after
}
posUpdate(input, delta);
viewUpdate(mouseX, mouseY);
pointerUpdate(input, delta);
@ -44,6 +49,7 @@ void Player::posUpdate(InputManager &input, double delta) {
}
}
auto& camera = renderer.getCamera();
glm::vec3 frontFlat = glm::normalize(glm::vec3(camera.getFront().x, 0, camera.getFront().z));
glm::vec3 rightFlat = glm::normalize(glm::vec3(camera.getRight().x, 0, camera.getRight().z));
@ -93,6 +99,7 @@ void Player::viewUpdate(double deltaX, double deltaY) {
if (pitch > 90.f) pitch = 90.f;
if (pitch < -90.f) pitch = -90.f;
auto& camera = renderer.getCamera();
camera.setYaw(yaw);
camera.setPitch(pitch);
camera.setPos({pos.x, pos.y + EYE_HEIGHT, pos.z});
@ -145,7 +152,7 @@ void Player::pointerUpdate(InputManager &input, double delta) {
}
if (input.isMousePressed(GLFW_MOUSE_BUTTON_RIGHT)) {
world.localSetBlock(pointedThing.pos + SelectionBox::faceToOffset(pointedThing.face),
defs.defs().blockFromStr("default:cobblestone").index);
defs.defs().blockFromStr("zeus:default:cobblestone").index);
}
}
else {
@ -229,7 +236,7 @@ glm::vec3 Player::getPos() {
void Player::setPos(glm::vec3 pos) {
this->pos = pos;
camera.setPos(pos);
this->renderer.getCamera().setPos({pos.x, pos.y + EYE_HEIGHT, pos.z});
}
glm::vec3 Player::getVel() {
@ -262,4 +269,26 @@ PointedThing& Player::getPointedThing() {
void Player::draw(Renderer &renderer) {
wireframe.draw(renderer);
}
void Player::drawGUI(Renderer &renderer) {
gameGui.draw(renderer);
}
void Player::setGuiVisible(bool hudVisible) {
gameGui.setVisible(hudVisible);
}
GameGui& Player::getGui() {
return gameGui;
}
void Player::setMenu(const std::string& state, sptr<GUIComponent> root) {
gameGui.setMenu(state, root);
renderer.getWindow().lockMouse(false);
}
void Player::closeMenu() {
gameGui.closeMenu();
renderer.getWindow().lockMouse(true);
}

View File

@ -14,6 +14,7 @@
#include "../../entity/world/BlockCrackEntity.h"
#include "../../graph/drawable/DrawableGroup.h"
#include "../../../world/block/PointedThing.h"
#include "../../hud/GameGui.h"
class Player : public Drawable {
public:
@ -21,7 +22,7 @@ public:
static constexpr float LOOK_PRECISION = 0.01f;
static constexpr float EYE_HEIGHT = 1.65f;
Player(LocalWorld& world, LocalDefs& defs, Camera& camera);
Player(LocalWorld& world, LocalDefs& defs, Renderer& renderer);
void update(InputManager &input, double delta, double mouseX, double mouseY);
@ -43,13 +44,21 @@ public:
void setPitch(float pitch);
float getPitch();
GameGui& getGui();
void setMenu(const std::string& state, sptr<GUIComponent> root);
void closeMenu();
void setGuiVisible(bool hudVisible);
void draw(Renderer& renderer) override;
void drawGUI(Renderer& renderer);
PointedThing& getPointedThing();
private:
Camera& camera;
Renderer& renderer;
LocalDefs& defs;
LocalWorld& world;
GameGui gameGui;
glm::vec3 pos {};
glm::vec3 vel {};

View File

@ -0,0 +1,19 @@
//
// Created by aurailus on 01/08/19.
//
#pragma once
#include "../../../def/LocalDefs.h"
#include "../../../game/scene/world/Player.h"
#include <sol2/sol.hpp>
namespace ClientApi {
void close_menu(sol::table &core, LocalDefs& defs, Player& player) {
core.set_function("close_menu", [&]() {
player.closeMenu();
});
}
}

View File

@ -136,11 +136,11 @@ void processElement(LocalDefs& defs, sol::table& element, std::shared_ptr<GUICom
}
namespace ClientApi {
void show_menu(sol::table &core, LocalDefs& defs, GameGui& gui) {
void show_menu(sol::table &core, LocalDefs& defs, Player& player) {
core.set_function("show_menu", [&](sol::table gui_root) {
auto root = std::make_shared<GUIContainer>("root");
gui.add(root);
core.set_function("show_menu", [&](std::string state, sol::table gui_root) {
auto root = std::make_shared<GUIContainer>("__lua_root");
player.setMenu(state, root);
processElement(defs, gui_root, static_pointer_cast<GUIComponent>(root));
});

View File

@ -41,4 +41,8 @@ void LuaPlayer::set_look_pitch(float rot) {
float LuaPlayer::get_look_pitch() {
return player.getPitch();
}
}
std::string LuaPlayer::get_menu_state() {
return player.getGui().getMenuState();
}

View File

@ -26,4 +26,6 @@ public:
void set_look_pitch(float rot);
float get_look_pitch();
std::string get_menu_state();
};

View File

@ -26,7 +26,9 @@ namespace ClientApi {
"block_pos", sol::property(&LuaPlayer::get_block_pos, &LuaPlayer::set_pos),
"vel", sol::property(&LuaPlayer::get_vel, &LuaPlayer::set_vel),
"look_yaw", sol::property(&LuaPlayer::get_look_yaw, &LuaPlayer::set_look_yaw),
"look_yaw", sol::property(&LuaPlayer::get_look_pitch, &LuaPlayer::set_look_pitch)
"look_yaw", sol::property(&LuaPlayer::get_look_pitch, &LuaPlayer::set_look_pitch),
"menu_state", sol::property(&LuaPlayer::get_menu_state)
);
}
}

View File

@ -8,7 +8,6 @@
#include "LocalRegisterKeybinds.h"
#include "../../def/LocalDefs.h"
#include "../../game/hud/GameGui.h"
#include "../api/type/LuaPlayer.h"
#include "../../game/scene/world/Player.h"
@ -34,11 +33,12 @@
#include "../api/modules/cRemoveEntity.h"
#include "../api/modules/cShowMenu.h"
#include "../api/modules/cCloseMenu.h"
#include "../api/modules/cRegisterKeybind.h"
#include "../api/functions/cUpdateEntities.h"
void LocalLuaParser::init(LocalDefs& defs, LocalWorld& world, GameGui& gui, Player& player) {
void LocalLuaParser::init(LocalDefs& defs, LocalWorld& world, Player& player) {
//Load Base Libraries
lua.open_libraries(sol::lib::base, sol::lib::string, sol::lib::math, sol::lib::table);
@ -46,7 +46,7 @@ void LocalLuaParser::init(LocalDefs& defs, LocalWorld& world, GameGui& gui, Play
// lua_atpanic(lua, sol::c_call<decltype(&LuaParser::override_panic), &LuaParser::override_panic>);
//Load Modules
loadModules(defs, world, gui, player);
loadModules(defs, world, player);
//Load Mods
loadMods();
@ -55,7 +55,7 @@ void LocalLuaParser::init(LocalDefs& defs, LocalWorld& world, GameGui& gui, Play
registerDefinitions(defs);
}
void LocalLuaParser::loadModules(LocalDefs &defs, LocalWorld &world, GameGui& gui, Player& player) {
void LocalLuaParser::loadModules(LocalDefs &defs, LocalWorld &world, Player& player) {
//Create Zepha Table
core = lua.create_table();
lua["zepha"] = core;
@ -86,7 +86,8 @@ void LocalLuaParser::loadModules(LocalDefs &defs, LocalWorld &world, GameGui& gu
ClientApi::add_entity(lua, core, defs, world);
ClientApi::remove_entity(lua, core, defs, world);
ClientApi::show_menu(core, defs, gui);
ClientApi::show_menu(core, defs, player);
ClientApi::close_menu(core, defs, player);
ClientApi::register_keybind(lua, core);
ClientApi::update_entities(lua);

View File

@ -11,14 +11,13 @@
class LocalDefs;
class LocalWorld;
class GameGui;
class Player;
class LocalLuaParser : public LuaParser {
public:
void init(LocalDefs& defs, LocalWorld& world, GameGui& gui, Player& player);
void init(LocalDefs& defs, LocalWorld& world, Player& player);
void loadModules(LocalDefs& defs, LocalWorld& world, GameGui& gui, Player& player);
void loadModules(LocalDefs& defs, LocalWorld& world, Player& player);
void loadMods();
void registerDefinitions(LocalDefs &defs);