summaryrefslogblamecommitdiffstats
path: root/src/GameState.hpp
blob: cd39a48b8ecc6304a6c5077f8064b823da5ac402 (plain) (tree)
1
2
3
4
5
6
7
8
9

            
                 

                 

                         
 
                     
                    
                     
 
             

             





































                                         
                 




                                 
 
                              
 







                                          
 
                                 
 
                                                   
 
                        
 
                         
 
                         
 
                      






                                                                        
                                                  
 
                              



























                                                     
  
#pragma once

#include <memory>
#include <string>
#include <vector>

#include <glm/mat4x4.hpp>

#include "Vector.hpp"
#include "World.hpp"
#include "Window.hpp"

class Packet;
class Entity;

struct TimeStatus {
	double interpolatedTimeOfDay = 0;
	long long worldAge = 0;
	long long timeOfDay = 0;
	bool doDaylightCycle = true;
};

struct GameStatus {
	std::string levelType;
	Vector spawnPosition;
	int gamemode = 0;
	int dimension = 0;
	unsigned char difficulty = 0;
	unsigned char maxPlayers = 0;
	bool isGameStarted = false;
	bool reducedDebugInfo = false;	
};

struct PlayerStatus {
	std::string uid;
	std::string name;
	float flyingSpeed = 0;
	float fovModifier = 0;
	float health = 0;
	int eid = 0;
	bool invulnerable = false;
	bool flying = false;
	bool allowFlying = false;
	bool creativeMode = false;
};

struct SelectionStatus {
	VectorF raycastHit;
	Vector selectedBlock;
	float distanceToSelectedBlock;
	bool isBlockSelected;
};

class GameState {
	Entity* player = nullptr;

	World world;
	
	TimeStatus timeStatus;

	GameStatus gameStatus;

	PlayerStatus playerStatus;
	
	SelectionStatus selectionStatus;
	
	Window playerInventory;

	std::vector<Window> openedWindows;
public:

    void Update(float deltaTime);

    void UpdatePacket(std::shared_ptr<Packet> ptr);

    void StartDigging();

    void FinishDigging();

    void CancelDigging();

    void PlaceBlock();

	enum MoveType {
		FORWARD, BACKWARD, LEFT, RIGHT, JUMP
	};

    void HandleMovement(GameState::MoveType direction, float deltaTime);

    void HandleRotation(double yaw, double pitch);

    glm::mat4 GetViewMatrix();

	inline Entity *GetPlayer() {
		return player;
	}

	inline World &GetWorld() {
		return world;
	}

	inline TimeStatus GetTimeStatus() {
		return timeStatus;
	}

	inline GameStatus GetGameStatus() {
		return gameStatus;
	}

	inline PlayerStatus GetPlayerStatus() {
		return playerStatus;
	}

	inline SelectionStatus GetSelectionStatus() {
		return selectionStatus;
	}

	inline Window &GetInventory() {
		return playerInventory;
	}
};