Compare commits
	
		
			21 Commits
		
	
	
		
			thehell_af
			...
			L-CSplash
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | f8680a318a | ||
|  | f4d4f1eca0 | ||
|  | 793da52871 | ||
|  | 18a5d98c57 | ||
|  | 81240c6f70 | ||
|  | f1ddd67655 | ||
|  | a054a7bff1 | ||
|  | b712c950c6 | ||
|  | 9cbf20ba21 | ||
|  | 3f774d7c2e | ||
|  | f2095f6e5b | ||
|  | 93062e49e2 | ||
|  | c85f7df15e | ||
|  | 6668127f15 | ||
|  | 54c25e6f78 | ||
|  | 0d948e3a28 | ||
|  | b97890fff3 | ||
|  | cddc59d6cf | ||
|  | 965e78309e | ||
|  | 0452920697 | ||
|  | 8be8852596 | 
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -373,3 +373,8 @@ FodyWeavers.xsd | |||||||
| /x64/Release/SQCSim2023.exe | /x64/Release/SQCSim2023.exe | ||||||
| /x64/Debug/SQCSim2023.exe | /x64/Debug/SQCSim2023.exe | ||||||
| /x64/Debug/SQCSim2021.pdb | /x64/Debug/SQCSim2021.pdb | ||||||
|  | /SQCSim-srv/cmake/* | ||||||
|  | !/SQCSim-srv/cmake/CMakeLists.txt | ||||||
|  | /SQCSim2021/cmake/* | ||||||
|  | !/SQCSim2021/cmake/CMakeLists.txt | ||||||
|  | /SQCSim2021/SQCSim-client | ||||||
|   | |||||||
| @@ -7,8 +7,9 @@ Bullet::Bullet(Vector3f pos, Vector3f dir, uint64_t tid): m_startpos(pos), m_cur | |||||||
|  |  | ||||||
| Bullet::~Bullet() {} | Bullet::~Bullet() {} | ||||||
|  |  | ||||||
| bool Bullet::Update(World* world, float elapsedtime) { | bool Bullet::Update(World* world, float elapsedtime, int perframe) { | ||||||
| 	for (int x = 0; x < 1000; ++x) { | 	int max = 100 / perframe; | ||||||
|  | 	for (int x = 0; x < max; ++x) { | ||||||
| 		m_currentpos += m_velocity * elapsedtime; | 		m_currentpos += m_velocity * elapsedtime; | ||||||
|  |  | ||||||
| 		if (!world->ChunkAt(m_currentpos)) | 		if (!world->ChunkAt(m_currentpos)) | ||||||
| @@ -30,10 +31,14 @@ void Bullet::Transpose(int& x, int& z) { | |||||||
| 	m_startpos.z -= z * CHUNK_SIZE_Z; | 	m_startpos.z -= z * CHUNK_SIZE_Z; | ||||||
| } | } | ||||||
|  |  | ||||||
| Vector3f Bullet::getPos() { | Vector3f Bullet::getPos() const { | ||||||
| 	return m_currentpos; | 	return m_currentpos; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | Vector3f Bullet::getVel() const { | ||||||
|  | 	return m_velocity; | ||||||
|  | } | ||||||
|  |  | ||||||
| uint64_t Bullet::getTeamID(){ | uint64_t Bullet::getTeamID(){ | ||||||
| 	return m_tid; | 	return m_tid; | ||||||
| } | } | ||||||
|   | |||||||
| @@ -12,9 +12,10 @@ public: | |||||||
| 	Bullet(Vector3f pos, Vector3f dir, uint64_t tid); | 	Bullet(Vector3f pos, Vector3f dir, uint64_t tid); | ||||||
| 	~Bullet(); | 	~Bullet(); | ||||||
|  |  | ||||||
| 	bool Update(World* world, float elapsedtime); | 	bool Update(World* world, float elapsedtime, int perframe); | ||||||
| 	void Transpose(int& x, int& z); | 	void Transpose(int& x, int& z); | ||||||
| 	Vector3f getPos(); | 	Vector3f getPos() const; | ||||||
|  | 	Vector3f getVel() const; | ||||||
| 	uint64_t getTeamID(); | 	uint64_t getTeamID(); | ||||||
|  |  | ||||||
| private: | private: | ||||||
|   | |||||||
| @@ -53,6 +53,7 @@ typedef uint64_t Timestamp; | |||||||
| #include <sys/socket.h> | #include <sys/socket.h> | ||||||
| #include <arpa/inet.h> | #include <arpa/inet.h> | ||||||
| #include <netinet/in.h> | #include <netinet/in.h> | ||||||
|  | #include <cstring> | ||||||
|  |  | ||||||
| #define SOCKET int | #define SOCKET int | ||||||
| #define INVALID_SOCKET -1 | #define INVALID_SOCKET -1 | ||||||
|   | |||||||
| @@ -130,7 +130,7 @@ void World::GetScope(unsigned int& x, unsigned int& y) { | |||||||
| 	y = m_center[1]; | 	y = m_center[1]; | ||||||
| } | } | ||||||
|  |  | ||||||
| void World::Update(Bullet* bullets[MAX_BULLETS], Vector3f& player_pos, BlockInfo* blockinfo[BTYPE_LAST]) { | void World::Update(Bullet* bullets[MAX_BULLETS], const Vector3f& player_pos, BlockInfo* blockinfo[BTYPE_LAST]) { | ||||||
| 	UpdateWorld(player_pos, blockinfo); | 	UpdateWorld(player_pos, blockinfo); | ||||||
| 	//TransposeWorld(player_pos, bullets); | 	//TransposeWorld(player_pos, bullets); | ||||||
| } | } | ||||||
| @@ -407,4 +407,4 @@ void World::UpdateWorld(const Vector3f& player, BlockInfo* blockinfo[BTYPE_LAST] | |||||||
| 	}*/ | 	}*/ | ||||||
| } | } | ||||||
|  |  | ||||||
| int World::GettbDeleted() const { return m_tbDeleted.size(); } | int World::GettbDeleted() const { return m_tbDeleted.size(); } | ||||||
|   | |||||||
| @@ -30,7 +30,7 @@ public: | |||||||
| 	BlockType BlockAt(float x, float y, float z, BlockType defaultBlockType = BTYPE_AIR) const; | 	BlockType BlockAt(float x, float y, float z, BlockType defaultBlockType = BTYPE_AIR) const; | ||||||
| 	BlockType BlockAt(const Vector3f& pos, BlockType defaultBlockType = BTYPE_AIR) const; | 	BlockType BlockAt(const Vector3f& pos, BlockType defaultBlockType = BTYPE_AIR) const; | ||||||
|  |  | ||||||
| 	void Update(Bullet* bullets[MAX_BULLETS], Vector3f& player_pos, BlockInfo* blockinfo[BTYPE_LAST]); | 	void Update(Bullet* bullets[MAX_BULLETS], const Vector3f& player_pos, BlockInfo* blockinfo[BTYPE_LAST]); | ||||||
|  |  | ||||||
| 	void GetScope(unsigned int& x, unsigned int& y); | 	void GetScope(unsigned int& x, unsigned int& y); | ||||||
|  |  | ||||||
|   | |||||||
							
								
								
									
										30
									
								
								SQCSim-srv/cmake/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								SQCSim-srv/cmake/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | |||||||
|  | cmake_minimum_required(VERSION 3.18.4) | ||||||
|  |  | ||||||
|  | project(SQCSim-Server VERSION 0.1) | ||||||
|  |  | ||||||
|  | add_compile_options("-Wno-narrowing") | ||||||
|  | set(CMAKE_CXX_STANDARD 17) | ||||||
|  | set(CMAKE_STANDARD_REQUIRED True) | ||||||
|  |  | ||||||
|  | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../out") | ||||||
|  |  | ||||||
|  | set(SQCSIM_COMMON_DIR "../../SQCSim-common/") | ||||||
|  |  | ||||||
|  | add_library(SQCSim-common | ||||||
|  | 			"${SQCSIM_COMMON_DIR}blockinfo.cpp" | ||||||
|  | 			"${SQCSIM_COMMON_DIR}bullet.cpp" | ||||||
|  | 			"${SQCSIM_COMMON_DIR}chunk.cpp" | ||||||
|  | 			"${SQCSIM_COMMON_DIR}netprotocol.cpp" | ||||||
|  | 			"${SQCSIM_COMMON_DIR}opensimplex.cpp" | ||||||
|  | 			"${SQCSIM_COMMON_DIR}player.cpp" | ||||||
|  | 			"${SQCSIM_COMMON_DIR}transformation.cpp" | ||||||
|  | 			"${SQCSIM_COMMON_DIR}world.cpp" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | add_executable(SQCSim-server | ||||||
|  | 			"../connection.cpp" | ||||||
|  | 			"../server.cpp" | ||||||
|  | 			"../main.cpp" | ||||||
|  | 			) | ||||||
|  |  | ||||||
|  | target_link_libraries(SQCSim-server PUBLIC SQCSim-common) | ||||||
| @@ -14,4 +14,4 @@ | |||||||
| typedef unsigned char LogDest; | typedef unsigned char LogDest; | ||||||
| enum LOG_DEST { CONSOLE, LOGFILE, LOG_LAST }; | enum LOG_DEST { CONSOLE, LOGFILE, LOG_LAST }; | ||||||
|  |  | ||||||
| #endif | #endif | ||||||
|   | |||||||
| @@ -85,7 +85,7 @@ int Server::Ready() { | |||||||
|  |  | ||||||
| 	while (!readystart) { | 	while (!readystart) { | ||||||
| 		sockaddr_in sockad; | 		sockaddr_in sockad; | ||||||
| 		int addrlen = sizeof(sockad); | 		unsigned int addrlen = sizeof(sockad); | ||||||
| 		SOCKET sock = accept(m_sock_tcp, (sockaddr*)&sockad, &addrlen); | 		SOCKET sock = accept(m_sock_tcp, (sockaddr*)&sockad, &addrlen); | ||||||
|  |  | ||||||
| 		if (sock < 0) | 		if (sock < 0) | ||||||
| @@ -140,7 +140,7 @@ void Server::Run() { | |||||||
| 	Log("Partie en cours...", false, false); | 	Log("Partie en cours...", false, false); | ||||||
| } | } | ||||||
|  |  | ||||||
| inline std::string Server::Timestamp() { | inline std::string Server::LogTimestamp() { | ||||||
| 	time_t rawtime; | 	time_t rawtime; | ||||||
| 	struct tm timeinfo; | 	struct tm timeinfo; | ||||||
| 	char buffer[80]; | 	char buffer[80]; | ||||||
| @@ -162,11 +162,11 @@ inline std::string Server::Timestamp() { | |||||||
| void Server::Log(std::string str, bool is_error = false, bool is_fatal = false) { | void Server::Log(std::string str, bool is_error = false, bool is_fatal = false) { | ||||||
| 	switch (m_log) { | 	switch (m_log) { | ||||||
| 	case LOG_DEST::LOGFILE: | 	case LOG_DEST::LOGFILE: | ||||||
| 		m_logfile << Timestamp() << (is_fatal ? "FATAL " : "") << (is_error ? "ERROR " : "") << str << std::endl; | 		m_logfile << LogTimestamp() << (is_fatal ? "FATAL " : "") << (is_error ? "ERROR " : "") << str << std::endl; | ||||||
| 		break; | 		break; | ||||||
| 	case LOG_DEST::CONSOLE: | 	case LOG_DEST::CONSOLE: | ||||||
| 	default: | 	default: | ||||||
| 		std::cout << Timestamp() << (is_fatal ? "FATAL " : "") << (is_error ? "ERROR " : "") << str << std::endl; | 		std::cout << LogTimestamp() << (is_fatal ? "FATAL " : "") << (is_error ? "ERROR " : "") << str << std::endl; | ||||||
| 		break; | 		break; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|   | |||||||
| @@ -35,7 +35,7 @@ private: | |||||||
|  |  | ||||||
| 	World* m_world = nullptr; | 	World* m_world = nullptr; | ||||||
|  |  | ||||||
| 	std::string Timestamp(); | 	std::string LogTimestamp(); | ||||||
| 	void Log(std::string str, bool is_error, bool is_fatal); | 	void Log(std::string str, bool is_error, bool is_fatal); | ||||||
| 	void buildIdList(size_t size); | 	void buildIdList(size_t size); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,17 +2,17 @@ | |||||||
|  |  | ||||||
| Audio::Audio() { | Audio::Audio() { | ||||||
| 	m_engine = irrklang::createIrrKlangDevice(); | 	m_engine = irrklang::createIrrKlangDevice(); | ||||||
| 	m_engine->setDopplerEffectParameters(1); | 	m_engine->setDopplerEffectParameters(10); | ||||||
| 	m_engine->setRolloffFactor(1); | 	m_engine->setRolloffFactor(2); | ||||||
| 	m_engine->setDefault3DSoundMinDistance(1); | 	m_engine->setDefault3DSoundMinDistance(.1); | ||||||
| 	m_engine->setDefault3DSoundMaxDistance(1000); | 	m_engine->setDefault3DSoundMaxDistance(1000); | ||||||
| } | } | ||||||
|  |  | ||||||
| Audio::Audio(const char * music) { | Audio::Audio(const char * music) { | ||||||
| 	m_engine = irrklang::createIrrKlangDevice(); | 	m_engine = irrklang::createIrrKlangDevice(); | ||||||
| 	m_engine->setDopplerEffectParameters(1); | 	m_engine->setDopplerEffectParameters(1); | ||||||
| 	m_engine->setRolloffFactor(1); | 	m_engine->setRolloffFactor(2); | ||||||
| 	m_engine->setDefault3DSoundMinDistance(1); | 	m_engine->setDefault3DSoundMinDistance(.1); | ||||||
| 	m_engine->setDefault3DSoundMaxDistance(1000); | 	m_engine->setDefault3DSoundMaxDistance(1000); | ||||||
| 	m_music = m_engine->play2D(music, false, true, true, irrklang::ESM_STREAMING); | 	m_music = m_engine->play2D(music, false, true, true, irrklang::ESM_STREAMING); | ||||||
| } | } | ||||||
| @@ -28,10 +28,11 @@ void Audio::Update3DAudio(Vector3f pos, Vector3f dir, Vector3f vel) { | |||||||
| 								  irrklang::vec3df(vel.x, vel.y, vel.z)); | 								  irrklang::vec3df(vel.x, vel.y, vel.z)); | ||||||
| } | } | ||||||
|  |  | ||||||
| void Audio::Create3DAudioObj(irrklang::ISound* sound, const char* name, Vector3f pos, Vector3f vel, float volume = 1) { | irrklang::ISound* Audio::Create3DAudioObj(irrklang::ISound* sound, const char* name, Vector3f pos, Vector3f vel, bool is_looped = false, float volume = 1) { | ||||||
| 	sound = m_engine->play3D(name, irrklang::vec3df(pos.x, pos.y, pos.z), false, false, true, irrklang::ESM_NO_STREAMING, true); | 	sound = m_engine->play3D(name, irrklang::vec3df(pos.x, pos.y, pos.z), is_looped, false, true, is_looped? irrklang::ESM_STREAMING: irrklang::ESM_NO_STREAMING, true); | ||||||
| 	sound->setVelocity(irrklang::vec3df(vel.x, vel.y, vel.z)); | 	sound->setVelocity(irrklang::vec3df(vel.x, vel.y, vel.z)); | ||||||
| 	sound->setVolume(volume); | 	sound->setVolume(volume); | ||||||
|  | 	return sound; | ||||||
| } | } | ||||||
|  |  | ||||||
| void Audio::Render3DAudioObj(irrklang::ISound* sound, Vector3f& pos, Vector3f& vel, float volume = 1) { | void Audio::Render3DAudioObj(irrklang::ISound* sound, Vector3f& pos, Vector3f& vel, float volume = 1) { | ||||||
|   | |||||||
| @@ -1,24 +1,30 @@ | |||||||
| #ifndef AUDIO_H__ | #ifndef AUDIO_H__ | ||||||
| #define AUDIO_H__ | #define AUDIO_H__ | ||||||
|  |  | ||||||
|  | #ifdef _WIN32 | ||||||
| #include <irrKlang.h> | #include <irrKlang.h> | ||||||
| #include <ik_ISoundSource.h> | #include <ik_ISoundSource.h> | ||||||
|  | #else | ||||||
|  | #include "./external/irrKlang-64bit-1.6.0/include/irrKlang.h" | ||||||
|  | #include "./external/irrKlang-64bit-1.6.0/include/ik_ISoundSource.h" | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #include "../SQCSim-common/vector3.h" | #include "../SQCSim-common/vector3.h" | ||||||
| #include "define.h" | #include "define.h" | ||||||
|  |  | ||||||
| class Audio { | class Audio { | ||||||
| private: | private: | ||||||
| 	irrklang::ISoundEngine* m_engine; |  | ||||||
| 	irrklang::ISound* m_music; | 	irrklang::ISound* m_music; | ||||||
|  |  | ||||||
| public: | public: | ||||||
| 	Audio(); | 	Audio(); | ||||||
| 	Audio(const char* music); | 	Audio(const char* music); | ||||||
| 	~Audio(); | 	~Audio(); | ||||||
|  | 	irrklang::ISoundEngine* m_engine; | ||||||
|  |  | ||||||
| 	void Update3DAudio(Vector3f pos, Vector3f dir, Vector3f speed); | 	void Update3DAudio(Vector3f pos, Vector3f dir, Vector3f speed); | ||||||
|  |  | ||||||
| 	void Create3DAudioObj(irrklang::ISound* sound, const char* name, Vector3f pos, Vector3f vel, float volume); | 	irrklang::ISound* Create3DAudioObj(irrklang::ISound* sound, const char* name, Vector3f pos, Vector3f vel, bool is_looped, float volume); | ||||||
|  |  | ||||||
| 	void Render3DAudioObj(irrklang::ISound* sound, Vector3f& pos, Vector3f& vel, float volume); | 	void Render3DAudioObj(irrklang::ISound* sound, Vector3f& pos, Vector3f& vel, float volume); | ||||||
|  |  | ||||||
| @@ -29,4 +35,4 @@ public: | |||||||
| 	void PauseEngine(); | 	void PauseEngine(); | ||||||
| }; | }; | ||||||
|  |  | ||||||
| #endif // AUDIO_H__ | #endif // AUDIO_H__ | ||||||
|   | |||||||
							
								
								
									
										68
									
								
								SQCSim2021/cmake/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										68
									
								
								SQCSim2021/cmake/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,68 @@ | |||||||
|  | cmake_minimum_required(VERSION 3.18.4) | ||||||
|  |  | ||||||
|  | project(SQCSim-Client VERSION 0.8) | ||||||
|  |  | ||||||
|  | set(CMAKE_CXX_STANDARD 17) | ||||||
|  | set(CMAKE_STANDARD_REQUIRED True) | ||||||
|  |  | ||||||
|  | set(CMAKE_BUILD_DIRECTORY "./build") | ||||||
|  | set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../") | ||||||
|  |  | ||||||
|  | set(SQCSIM_COMMON_DIR "../../SQCSim-common/") | ||||||
|  | set(SQCSIM_EXTERN_DIR "../external/") | ||||||
|  |  | ||||||
|  | find_package(SFML COMPONENTS system window graphics REQUIRED) | ||||||
|  | find_package(DevIL REQUIRED) | ||||||
|  | find_package(OpenGL REQUIRED) | ||||||
|  | find_package(GLEW REQUIRED) | ||||||
|  |  | ||||||
|  | find_library(IRRKLANG_LIBRARY | ||||||
|  | 	NAMES libIrrKlang.so | ||||||
|  | 	PATHS "${SQCSIM_EXTERN_DIR}/irrKlang-64bit-1.6.0/lib/linux-gcc-64/") | ||||||
|  |  | ||||||
|  | include_directories( | ||||||
|  | 	${SQCSIM_EXTERN_DIR}/irrKlang-64bit-1.6.0/include/ | ||||||
|  | 			${SFML_INCLUDE_DIRS} | ||||||
|  | 			${IL_INCLUDE_DIR} | ||||||
|  | 			) | ||||||
|  |  | ||||||
|  |  | ||||||
|  | add_library(SQCSim-common | ||||||
|  | 			"${SQCSIM_COMMON_DIR}blockinfo.cpp" | ||||||
|  | 			"${SQCSIM_COMMON_DIR}bullet.cpp" | ||||||
|  | 			"${SQCSIM_COMMON_DIR}chunk.cpp" | ||||||
|  | 			"${SQCSIM_COMMON_DIR}netprotocol.cpp" | ||||||
|  | 			"${SQCSIM_COMMON_DIR}opensimplex.cpp" | ||||||
|  | 			"${SQCSIM_COMMON_DIR}player.cpp" | ||||||
|  | 			"${SQCSIM_COMMON_DIR}transformation.cpp" | ||||||
|  | 			"${SQCSIM_COMMON_DIR}world.cpp" | ||||||
|  | ) | ||||||
|  |  | ||||||
|  | add_executable(SQCSim-client | ||||||
|  | 			"../audio.cpp" | ||||||
|  | 			"../connector.cpp" | ||||||
|  | 			"../engine.cpp" | ||||||
|  | 			"../mesh.cpp" | ||||||
|  | 			"../openglcontext.cpp" | ||||||
|  | 			"../shader.cpp" | ||||||
|  | 			"../skybox.cpp" | ||||||
|  | 			"../texture.cpp" | ||||||
|  | 			"../textureatlas.cpp" | ||||||
|  | 			"../tool.cpp" | ||||||
|  | 			"../vertexbuffer.cpp" | ||||||
|  | 			"../worldrenderer.cpp" | ||||||
|  | 			"../main.cpp" | ||||||
|  | 			) | ||||||
|  |  | ||||||
|  | target_link_libraries(SQCSim-client PUBLIC SQCSim-common | ||||||
|  | 			${IRRKLANG_LIBRARY} | ||||||
|  | 			sfml-system | ||||||
|  | 			sfml-window | ||||||
|  | 			sfml-graphics | ||||||
|  | 			GL | ||||||
|  | 			GLU | ||||||
|  | 			GLEW | ||||||
|  | 			${IL_LIBRARIES} | ||||||
|  | 			${ILU_LIBRARIES} | ||||||
|  | 			) | ||||||
|  |  | ||||||
| @@ -6,26 +6,34 @@ | |||||||
| #include <iostream> | #include <iostream> | ||||||
| #include <chrono> | #include <chrono> | ||||||
| #include <iomanip> | #include <iomanip> | ||||||
|  | #include <GL/glew.h> | ||||||
| #include <SFML/Window.hpp> | #include <SFML/Window.hpp> | ||||||
| #include <SFML/Graphics.hpp> | #include <SFML/Graphics.hpp> | ||||||
| #include "../SQCSim-common/define.h" | #include "../SQCSim-common/define.h" | ||||||
|  |  | ||||||
| #ifdef _WIN32 | #ifdef _WIN32 | ||||||
| #include <GL/glew.h> |  | ||||||
| #include <gl/GL.h> | #include <gl/GL.h> | ||||||
| #include <gl/GLU.h> | #include <gl/GLU.h> | ||||||
|  | #else | ||||||
|  | #include <GL/gl.h> | ||||||
|  | #include <GL/glu.h> | ||||||
|  | #include <climits> | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| #define NETWORK_TEST false | #define NETWORK_TEST false | ||||||
| #define SRV_ADDR "127.0.0.1" | #define SRV_ADDR "127.0.0.1" | ||||||
| #define COUNTDOWN 300 | #define COUNTDOWN 300 | ||||||
|  |  | ||||||
| #define BASE_WIDTH 1920 | #define BULLET_UPDATES_PER_FRAME 20 | ||||||
| #define BASE_HEIGHT 1080 |  | ||||||
|  | #define BASE_WIDTH 640 | ||||||
|  | #define BASE_HEIGHT 480 | ||||||
|  |  | ||||||
|  |  | ||||||
| #define TEXTURE_PATH        "./media/textures/" | #define TEXTURE_PATH        "./media/textures/" | ||||||
| #define SHADER_PATH		    "./media/shaders/" | #define SHADER_PATH		    "./media/shaders/" | ||||||
| #define AUDIO_PATH			"./media/audio/" | #define AUDIO_PATH			"./media/audio/" | ||||||
| #define CHUNK_PATH			"./media/chunks/" | #define CHUNK_PATH			"./media/chunks/" | ||||||
|  | #define MENU_ITEM_PATH		"./media/menu_items/" | ||||||
|  |  | ||||||
| #endif // DEFINE_H__ | #endif // DEFINE_H__ | ||||||
|   | |||||||
							
								
								
									
										0
									
								
								SQCSim2021/docs/analyse_preliminaire.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								SQCSim2021/docs/analyse_preliminaire.md
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										1
									
								
								SQCSim2021/docs/analyse_serveur.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								SQCSim2021/docs/analyse_serveur.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | |||||||
|  |  | ||||||
| @@ -28,7 +28,253 @@ Engine::~Engine() { | |||||||
| 				m_world.GetChunks().Get(x, y)->~Chunk(); | 				m_world.GetChunks().Get(x, y)->~Chunk(); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void Engine::DrawSplachScreen() | ||||||
|  | { | ||||||
|  | 	glDisable(GL_LIGHTING); | ||||||
|  | 	glDisable(GL_DEPTH_TEST); | ||||||
|  | 	glDisable(GL_STENCIL_TEST); | ||||||
|  |  | ||||||
|  | 	// Définir la matrice de projection en mode orthographique | ||||||
|  | 	glMatrixMode(GL_PROJECTION); | ||||||
|  | 	glPushMatrix(); | ||||||
|  | 	glLoadIdentity(); | ||||||
|  | 	glOrtho(-Width() / 2, Width() / 2, -Height() / 2, Height() / 2, -1, 1); | ||||||
|  |  | ||||||
|  | 	// Définir la matrice de modèle-vue | ||||||
|  | 	glMatrixMode(GL_MODELVIEW); | ||||||
|  | 	glPushMatrix(); | ||||||
|  | 	glLoadIdentity(); | ||||||
|  |  | ||||||
|  | 	// L'image sera centrée autour de l'origine (0, 0, 0) | ||||||
|  | 	int imageWidth = Width(); // Remplacez par la largeur de votre image | ||||||
|  | 	int imageHeight = Height(); // Remplacez par la hauteur de votre image | ||||||
|  |  | ||||||
|  | 	// Texture | ||||||
|  | 	SplachScreenTexture.Bind(); | ||||||
|  |  | ||||||
|  | 	// Dessiner un quadrilatère centré | ||||||
|  | 	glBegin(GL_QUADS); | ||||||
|  | 	glTexCoord2f(0, 0); | ||||||
|  | 	glVertex2i(-imageWidth / 2, -imageHeight / 2); | ||||||
|  | 	glTexCoord2f(1, 0); | ||||||
|  | 	glVertex2i(imageWidth / 2, -imageHeight / 2); | ||||||
|  | 	glTexCoord2f(1, 1); | ||||||
|  | 	glVertex2i(imageWidth / 2, imageHeight / 2); | ||||||
|  | 	glTexCoord2f(0, 1); | ||||||
|  | 	glVertex2i(-imageWidth / 2, imageHeight / 2); | ||||||
|  | 	glEnd(); | ||||||
|  |  | ||||||
|  | 	// Activer la transparence | ||||||
|  | 	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | ||||||
|  | 	glBlendEquation(GL_FUNC_ADD); | ||||||
|  | 	glEnable(GL_BLEND); | ||||||
|  |  | ||||||
|  | 	// Restaurer les matrices précédentes | ||||||
|  | 	glMatrixMode(GL_PROJECTION); | ||||||
|  | 	glPopMatrix(); | ||||||
|  | 	glMatrixMode(GL_MODELVIEW); | ||||||
|  | 	glPopMatrix(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | void Engine::DrawMenu() | ||||||
|  | { | ||||||
|  | 	static const int sTitle = 400; | ||||||
|  | 	static const int sButton = 225; | ||||||
|  |  | ||||||
|  | 	glDisable(GL_LIGHTING); | ||||||
|  | 	 | ||||||
|  |  | ||||||
|  | 	glDisable(GL_DEPTH_TEST); | ||||||
|  | 	glDisable(GL_STENCIL_TEST); | ||||||
|  | 	glMatrixMode(GL_PROJECTION); | ||||||
|  | 	glPushMatrix(); | ||||||
|  | 	glLoadIdentity(); | ||||||
|  | 	glOrtho(0, Width(), 0, Height(), -1, 1); | ||||||
|  | 	glMatrixMode(GL_MODELVIEW); | ||||||
|  | 	glPushMatrix(); | ||||||
|  |  | ||||||
|  | 	MenuBGTexture.Bind(); | ||||||
|  | 	glLoadIdentity(); | ||||||
|  | 	glBegin(GL_QUADS); | ||||||
|  | 	glTexCoord2f(0, 0); | ||||||
|  | 	glVertex2i(0, 0); | ||||||
|  | 	glTexCoord2f(1, 0); | ||||||
|  | 	glVertex2i(800, 0); | ||||||
|  | 	glTexCoord2f(1, 1); | ||||||
|  | 	glVertex2i(800, 600); | ||||||
|  | 	glTexCoord2f(0, 1); | ||||||
|  | 	glVertex2i(0, 600); | ||||||
|  | 	glEnd(); | ||||||
|  |  | ||||||
|  | 	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | ||||||
|  | 	glBlendEquation(GL_FUNC_ADD); | ||||||
|  | 	glEnable(GL_BLEND); | ||||||
|  |  | ||||||
|  | 	if (m_gamestate != GameState::OPTIONS) | ||||||
|  | 	{ | ||||||
|  | 		MenuTitleTexture.Bind(); | ||||||
|  | 		glTranslated(200, 300, 0); | ||||||
|  | 		glBegin(GL_QUADS); | ||||||
|  | 		glTexCoord2f(0, 0); | ||||||
|  | 		glVertex2i(0, 200); | ||||||
|  | 		glTexCoord2f(1, 0); | ||||||
|  | 		glVertex2i(sTitle, 200); | ||||||
|  | 		glTexCoord2f(1, 1); | ||||||
|  | 		glVertex2i(sTitle, 300); | ||||||
|  | 		glTexCoord2f(0, 1); | ||||||
|  | 		glVertex2i(0, 300); | ||||||
|  | 		glEnd(); | ||||||
|  |  | ||||||
|  | 		MenuStartTexture.Bind(); | ||||||
|  | 		glTranslated(80, -225, 0); | ||||||
|  | 		glBegin(GL_QUADS); | ||||||
|  | 		glTexCoord2f(0, 0); | ||||||
|  | 		glVertex2i(0, 100); | ||||||
|  | 		glTexCoord2f(1, 0); | ||||||
|  | 		glVertex2i(sButton, 100); | ||||||
|  | 		glTexCoord2f(1, 1); | ||||||
|  | 		glVertex2i(sButton, 200); | ||||||
|  | 		glTexCoord2f(0, 1); | ||||||
|  | 		glVertex2i(0, 200); | ||||||
|  | 		glEnd(); | ||||||
|  |  | ||||||
|  | 		/*MenuResumeTexture.Bind(); | ||||||
|  | 		glTranslated(0, -100, 0); | ||||||
|  | 		glBegin(GL_QUADS); | ||||||
|  | 		glTexCoord2f(0, 0); | ||||||
|  | 		glVertex2i(0, 125); | ||||||
|  | 		glTexCoord2f(1, 0); | ||||||
|  | 		glVertex2i(sButton, 125); | ||||||
|  | 		glTexCoord2f(1, 1); | ||||||
|  | 		glVertex2i(sButton, 200); | ||||||
|  | 		glTexCoord2f(0, 1); | ||||||
|  | 		glVertex2i(0, 200); | ||||||
|  | 		glEnd();*/ | ||||||
|  |  | ||||||
|  | 		/*MenuOptionsTexture.Bind(); | ||||||
|  | 		glTranslated(0, -100, 0); | ||||||
|  | 		glBegin(GL_QUADS); | ||||||
|  | 		glTexCoord2f(0, 0); | ||||||
|  | 		glVertex2i(0, 125); | ||||||
|  | 		glTexCoord2f(1, 0); | ||||||
|  | 		glVertex2i(sButton, 125); | ||||||
|  | 		glTexCoord2f(1, 1); | ||||||
|  | 		glVertex2i(sButton, 200); | ||||||
|  | 		glTexCoord2f(0, 1); | ||||||
|  | 		glVertex2i(0, 200); | ||||||
|  | 		glEnd();*/ | ||||||
|  |  | ||||||
|  | 		MenuQuitTexture.Bind(); | ||||||
|  | 		glTranslated(0, -100, 0); | ||||||
|  | 		glBegin(GL_QUADS); | ||||||
|  | 		glTexCoord2f(0, 0); | ||||||
|  | 		glVertex2i(0, 100); | ||||||
|  | 		glTexCoord2f(1, 0); | ||||||
|  | 		glVertex2i(sButton, 100); | ||||||
|  | 		glTexCoord2f(1, 1); | ||||||
|  | 		glVertex2i(sButton, 200); | ||||||
|  | 		glTexCoord2f(0, 1); | ||||||
|  | 		glVertex2i(0, 200); | ||||||
|  | 		glEnd(); | ||||||
|  |  | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		/*MenuOptionsTexture.Bind(); | ||||||
|  | 		glTranslated(200, 0, 0); | ||||||
|  | 		glBegin(GL_QUADS); | ||||||
|  | 		glTexCoord2f(0, 0); | ||||||
|  | 		glVertex2i(0, 0); | ||||||
|  | 		glTexCoord2f(1, 0); | ||||||
|  | 		glVertex2i(sTitle, 0); | ||||||
|  | 		glTexCoord2f(1, 1); | ||||||
|  | 		glVertex2i(sTitle, 200); | ||||||
|  | 		glTexCoord2f(0, 1); | ||||||
|  | 		glVertex2i(0, 200); | ||||||
|  | 		glEnd(); | ||||||
|  |  | ||||||
|  | 		WireFrameTexture.Bind(); | ||||||
|  | 		glTranslated(0, 300, 0); | ||||||
|  | 		glBegin(GL_QUADS); | ||||||
|  | 		glTexCoord2f(0, 0); | ||||||
|  | 		glVertex2i(0, 125); | ||||||
|  | 		glTexCoord2f(1, 0); | ||||||
|  | 		glVertex2i(sButton, 125); | ||||||
|  | 		glTexCoord2f(1, 1); | ||||||
|  | 		glVertex2i(sButton, 200); | ||||||
|  | 		glTexCoord2f(0, 1); | ||||||
|  | 		glVertex2i(0, 200); | ||||||
|  | 		glEnd(); | ||||||
|  |  | ||||||
|  | 		OnOffBtnTexture.Bind(); | ||||||
|  | 		glTranslated(200, 0, 0); | ||||||
|  | 		glBegin(GL_QUADS); | ||||||
|  | 		glTexCoord2f(0, 0); | ||||||
|  | 		glVertex2i(0, 125); | ||||||
|  | 		glTexCoord2f(1, 0); | ||||||
|  | 		glVertex2i(sButton, 125); | ||||||
|  | 		glTexCoord2f(1, 1); | ||||||
|  | 		glVertex2i(sButton, 200); | ||||||
|  | 		glTexCoord2f(0, 1); | ||||||
|  | 		glVertex2i(0, 200); | ||||||
|  | 		glEnd(); | ||||||
|  | 		glTranslated(-400, -300, 0); | ||||||
|  |  | ||||||
|  | 		MusicTexture.Bind(); | ||||||
|  | 		glTranslated(200, 200, 0); | ||||||
|  | 		glBegin(GL_QUADS); | ||||||
|  | 		glTexCoord2f(0, 0); | ||||||
|  | 		glVertex2i(0, 125); | ||||||
|  | 		glTexCoord2f(1, 0); | ||||||
|  | 		glVertex2i(sButton, 125); | ||||||
|  | 		glTexCoord2f(1, 1); | ||||||
|  | 		glVertex2i(sButton, 200); | ||||||
|  | 		glTexCoord2f(0, 1); | ||||||
|  | 		glVertex2i(0, 200); | ||||||
|  | 		glEnd(); | ||||||
|  |  | ||||||
|  | 		OnOffBtnTexture.Bind(); | ||||||
|  | 		glTranslated(200, 0, 0); | ||||||
|  | 		glBegin(GL_QUADS); | ||||||
|  | 		glTexCoord2f(0, 0); | ||||||
|  | 		glVertex2i(0, 125); | ||||||
|  | 		glTexCoord2f(1, 0); | ||||||
|  | 		glVertex2i(sButton, 125); | ||||||
|  | 		glTexCoord2f(1, 1); | ||||||
|  | 		glVertex2i(sButton, 200); | ||||||
|  | 		glTexCoord2f(0, 1); | ||||||
|  | 		glVertex2i(0, 200); | ||||||
|  | 		glEnd(); | ||||||
|  |  | ||||||
|  | 		BackBtnTexture.Bind(); | ||||||
|  | 		glTranslated(-375, 175, 0); | ||||||
|  | 		glBegin(GL_QUADS); | ||||||
|  | 		glTexCoord2f(0, 0); | ||||||
|  | 		glVertex2i(0, 140); | ||||||
|  | 		glTexCoord2f(1, 0); | ||||||
|  | 		glVertex2i(sButton, 140); | ||||||
|  | 		glTexCoord2f(1, 1); | ||||||
|  | 		glVertex2i(sButton, 200); | ||||||
|  | 		glTexCoord2f(0, 1); | ||||||
|  | 		glVertex2i(0, 200); | ||||||
|  | 		glEnd();*/ | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	//glEnable(GL_LIGHTING); | ||||||
|  | 	glDisable(GL_BLEND); | ||||||
|  | 	glEnable(GL_DEPTH_TEST); | ||||||
|  | 	glMatrixMode(GL_PROJECTION); | ||||||
|  | 	glPopMatrix(); | ||||||
|  | 	glMatrixMode(GL_MODELVIEW); | ||||||
|  | 	glPopMatrix(); | ||||||
|  | 	ShowCursor(); | ||||||
|  | } | ||||||
|  |  | ||||||
| void Engine::Init() { | void Engine::Init() { | ||||||
|  |  | ||||||
|  |  | ||||||
| 	GLenum glewErr = glewInit(); | 	GLenum glewErr = glewInit(); | ||||||
| 	if (glewErr != GLEW_OK) { | 	if (glewErr != GLEW_OK) { | ||||||
| 		std::cerr << " ERREUR GLEW : " << glewGetErrorString(glewErr) << std::endl; | 		std::cerr << " ERREUR GLEW : " << glewGetErrorString(glewErr) << std::endl; | ||||||
| @@ -53,6 +299,7 @@ void Engine::Init() { | |||||||
| 	glDisable(GL_BLEND); | 	glDisable(GL_BLEND); | ||||||
| 	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | 	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | ||||||
| 	glBlendEquation(GL_FUNC_SUBTRACT); | 	glBlendEquation(GL_FUNC_SUBTRACT); | ||||||
|  | 	 | ||||||
| 	//  | 	//  | ||||||
| 	// Objet de skybox avec sa propre texture et son propre shader! | 	// Objet de skybox avec sa propre texture et son propre shader! | ||||||
| 	m_skybox.Init(0.2f); | 	m_skybox.Init(0.2f); | ||||||
| @@ -61,22 +308,24 @@ void Engine::Init() { | |||||||
| 	//m_audio.ToggleMusicState(); | 	//m_audio.ToggleMusicState(); | ||||||
|  |  | ||||||
| 	// Array pour les balles. | 	// Array pour les balles. | ||||||
| 	for (int x = 0; x < MAX_BULLETS; ++x) | 	for (int x = 0; x < MAX_BULLETS; ++x) { | ||||||
| 		m_bullets[x] = nullptr; | 		m_bullets[x] = nullptr; | ||||||
|  | 		m_whoosh[x] = nullptr; // = m_audio.m_engine.m_audio.m_engine->addSoundSourceFromFile(AUDIO_PATH "noise.ogg", irrklang::ESM_AUTO_DETECT, false); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	uint64_t seed = SEED; | 	uint64_t seed = SEED; | ||||||
| 	std::string playname = "La Chienne <20> Jacques"; | 	std::string playname = "La Chienne <20> Jacques"; | ||||||
| 	if (NETWORK_TEST) { // Test connexion r<>seau. | 	if (NETWORK_TEST) { // Test connexion r<>seau. | ||||||
| 		if (!m_conn.Init()) { | 		if (!m_conn.Init()) { | ||||||
| 			if (!m_conn.Connect(SRV_ADDR, playname)) { | 			if (!m_conn.Connect(SRV_ADDR, playname)) { | ||||||
| 				// setup jeu en r<>seau. | 				// setup jeu en r<>seau. | ||||||
| 				std::cout << "ID re<72>u du serveur: " << std::to_string(m_conn.getId()) << "!" << std::endl; | 				std::cout << "ID re<72>u du serveur: " << std::to_string(m_conn.getId()) << "!" << std::endl; | ||||||
| 				std::cout << "Seed re<72>u du serveur: " << std::to_string(m_conn.getSeed()) << "!" << std::endl; | 				std::cout << "Seed re<72>u du serveur: " << std::to_string(m_conn.getSeed()) << "!" << std::endl; | ||||||
| 				seed = m_conn.getSeed(); | 				seed = m_conn.getSeed(); | ||||||
| 			} | 			} | ||||||
| 			else std::cout << "Erreur de connexion." << std::endl; | 			else std::cout << "Erreur de connexion." << std::endl; | ||||||
| 		} | 		} | ||||||
| 		else std::cout << "Erreur de cr<63>ation de socket." << std::endl; | 		else std::cout << "Erreur de cr<63>ation de socket." << std::endl; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	m_world.SetSeed(seed); | 	m_world.SetSeed(seed); | ||||||
| @@ -84,6 +333,8 @@ void Engine::Init() { | |||||||
| 	// Init Chunks | 	// Init Chunks | ||||||
| 	m_world.GetChunks().Reset(nullptr); | 	m_world.GetChunks().Reset(nullptr); | ||||||
|  |  | ||||||
|  | 	 | ||||||
|  |  | ||||||
| 	// Gestion de souris. | 	// Gestion de souris. | ||||||
| 	CenterMouse(); | 	CenterMouse(); | ||||||
| 	HideCursor(); | 	HideCursor(); | ||||||
| @@ -95,8 +346,14 @@ void Engine::LoadResource() { | |||||||
| 	LoadTexture(m_skybox.GetTexture(), TEXTURE_PATH "skybox.png", true); | 	LoadTexture(m_skybox.GetTexture(), TEXTURE_PATH "skybox.png", true); | ||||||
| 	LoadTexture(m_textureCrosshair, TEXTURE_PATH "cross.bmp", true); | 	LoadTexture(m_textureCrosshair, TEXTURE_PATH "cross.bmp", true); | ||||||
| 	LoadTexture(m_textureFont, TEXTURE_PATH "font.bmp", true); | 	LoadTexture(m_textureFont, TEXTURE_PATH "font.bmp", true); | ||||||
| 	LoadTexture(m_textureGun, TEXTURE_PATH "gun01.png", false); | 	LoadTexture(m_textureGun, TEXTURE_PATH "gun01.png", true); | ||||||
|  |  | ||||||
|  | 	LoadTexture(MenuTitleTexture, MENU_ITEM_PATH "test.png"); | ||||||
|  | 	LoadTexture(MenuBGTexture, MENU_ITEM_PATH "test.png"); | ||||||
|  | 	LoadTexture(SplachScreenTexture, TEXTURE_PATH "sc2.png"); | ||||||
|  | 	LoadTexture(MenuQuitTexture, MENU_ITEM_PATH "BasicQuit.png"); | ||||||
|  | 	LoadTexture(MenuOptionsTexture, MENU_ITEM_PATH "test.png"); | ||||||
|  | 	LoadTexture(MenuStartTexture, MENU_ITEM_PATH "BasicPlay.png"); | ||||||
| 	TextureAtlas::TextureIndex texDirtIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "metal3.png"); | 	TextureAtlas::TextureIndex texDirtIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "metal3.png"); | ||||||
| 	TextureAtlas::TextureIndex texIceIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "metal2.png"); | 	TextureAtlas::TextureIndex texIceIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "metal2.png"); | ||||||
| 	TextureAtlas::TextureIndex texGrassIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "grass.png"); | 	TextureAtlas::TextureIndex texGrassIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "grass.png"); | ||||||
| @@ -188,8 +445,6 @@ void Engine::ProcessNotificationQueue() { | |||||||
| 		glMatrixMode(GL_MODELVIEW); | 		glMatrixMode(GL_MODELVIEW); | ||||||
| 		glPushMatrix(); | 		glPushMatrix(); | ||||||
| 		 | 		 | ||||||
| 		 |  | ||||||
| 		 |  | ||||||
| 		PrintText(xOffset, y, scale, it->message); | 		PrintText(xOffset, y, scale, it->message); | ||||||
|  |  | ||||||
| 		glBlendFunc(GL_CONSTANT_COLOR, GL_ONE_MINUS_CONSTANT_COLOR); | 		glBlendFunc(GL_CONSTANT_COLOR, GL_ONE_MINUS_CONSTANT_COLOR); | ||||||
| @@ -236,6 +491,7 @@ void Engine::DisplayCrosshair() { | |||||||
| void Engine::DisplayCurrentItem() { | void Engine::DisplayCurrentItem() { | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| void Engine::DisplayHud(int timer) { | void Engine::DisplayHud(int timer) { | ||||||
| 	glBindTexture(GL_TEXTURE_2D, 0); | 	glBindTexture(GL_TEXTURE_2D, 0); | ||||||
| 	glLoadIdentity(); | 	glLoadIdentity(); | ||||||
| @@ -249,7 +505,7 @@ void Engine::DisplayHud(int timer) { | |||||||
| 	float playerHp = m_player.GetHP(); | 	float playerHp = m_player.GetHP(); | ||||||
| 	float facteurOmbrage = m_displayInfo ? 0.5f : 1.0f; | 	float facteurOmbrage = m_displayInfo ? 0.5f : 1.0f; | ||||||
|  |  | ||||||
| 	// Arri<72>re-plan (Barre HP) | 	// Arri<72>re-plan (Barre HP) | ||||||
| 	glColor3f(1.0f * facteurOmbrage, 1.0f * facteurOmbrage, 1.0f * facteurOmbrage); | 	glColor3f(1.0f * facteurOmbrage, 1.0f * facteurOmbrage, 1.0f * facteurOmbrage); | ||||||
| 	glBegin(GL_QUADS); | 	glBegin(GL_QUADS); | ||||||
| 		glVertex2f(fPosX, fPosY - fBarHeight);				// Bas-Gauche | 		glVertex2f(fPosX, fPosY - fBarHeight);				// Bas-Gauche | ||||||
| @@ -258,7 +514,7 @@ void Engine::DisplayHud(int timer) { | |||||||
| 		glVertex2f(fPosX, fPosY);							// Haut-Gauche | 		glVertex2f(fPosX, fPosY);							// Haut-Gauche | ||||||
| 	glEnd(); | 	glEnd(); | ||||||
|  |  | ||||||
| 	//TODO: Associer avec m<>chanique de vie du joueur | 	//TODO: Associer avec m<>chanique de vie du joueur | ||||||
|  |  | ||||||
| 	// Barre HP | 	// Barre HP | ||||||
| 	glColor3f(0.0f * facteurOmbrage, 1.0f * facteurOmbrage, 0.0f * facteurOmbrage); | 	glColor3f(0.0f * facteurOmbrage, 1.0f * facteurOmbrage, 0.0f * facteurOmbrage); | ||||||
| @@ -269,7 +525,7 @@ void Engine::DisplayHud(int timer) { | |||||||
| 		glVertex2f(fPosX, fPosY);										// Haut-Gauche | 		glVertex2f(fPosX, fPosY);										// Haut-Gauche | ||||||
| 	glEnd(); | 	glEnd(); | ||||||
|  |  | ||||||
| 	// Barre <20>quip | 	// Barre <20>quip | ||||||
| 	glEnable(GL_BLEND); | 	glEnable(GL_BLEND); | ||||||
| 	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | 	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | ||||||
| 	glColor3f(1.0f * facteurOmbrage, 1.0f * facteurOmbrage, 1.0f * facteurOmbrage); | 	glColor3f(1.0f * facteurOmbrage, 1.0f * facteurOmbrage, 1.0f * facteurOmbrage); | ||||||
| @@ -290,7 +546,7 @@ void Engine::DisplayHud(int timer) { | |||||||
| 	glTexCoord2f(1, 1); glVertex2i(0, itemHeight); | 	glTexCoord2f(1, 1); glVertex2i(0, itemHeight); | ||||||
| 	glEnd(); | 	glEnd(); | ||||||
|  |  | ||||||
| 	glDisable(GL_BLEND); | 	//glDisable(GL_BLEND); | ||||||
|  |  | ||||||
| 	// Username | 	// Username | ||||||
| 	glEnable(GL_BLEND); | 	glEnable(GL_BLEND); | ||||||
| @@ -327,7 +583,7 @@ void Engine::DisplayInfo(float elapsedTime, BlockType bloc) { | |||||||
| 	ss << " To-Be-Deleted Chunks : " << m_world.GettbDeleted(); | 	ss << " To-Be-Deleted Chunks : " << m_world.GettbDeleted(); | ||||||
| 	PrintText(x, Height() - (Height() / 10.7), scale, ss.str()); | 	PrintText(x, Height() - (Height() / 10.7), scale, ss.str()); | ||||||
| 	ss.str(""); | 	ss.str(""); | ||||||
| 	ss << " Velocity  : " << m_player.GetVelocity(); // IMPORTANT : on utilise l <20> operateur << pour afficher la position | 	ss << " Velocity  : " << m_player.GetVelocity(); // IMPORTANT : on utilise l <20> operateur << pour afficher la position | ||||||
| 	PrintText(x, Height() / 48, scale, ss.str()); | 	PrintText(x, Height() / 48, scale, ss.str()); | ||||||
| 	ss.str(""); | 	ss.str(""); | ||||||
| 	ss << " Direction : " << m_player.GetDirection(); | 	ss << " Direction : " << m_player.GetDirection(); | ||||||
| @@ -352,6 +608,7 @@ void Engine::DrawHud(float elapsedTime, BlockType bloc) { | |||||||
|  |  | ||||||
| 	glBlendFunc(GL_SRC_ALPHA, GL_ONE); | 	glBlendFunc(GL_SRC_ALPHA, GL_ONE); | ||||||
| 	glBlendEquation(GL_FUNC_ADD); | 	glBlendEquation(GL_FUNC_ADD); | ||||||
|  | 	glEnable(GL_BLEND); | ||||||
|  |  | ||||||
| 	glMatrixMode(GL_PROJECTION); | 	glMatrixMode(GL_PROJECTION); | ||||||
| 	glPushMatrix(); | 	glPushMatrix(); | ||||||
| @@ -443,112 +700,132 @@ int Engine::GetCountdown(float elapsedTime) { | |||||||
| } | } | ||||||
|  |  | ||||||
| void Engine::Render(float elapsedTime) { | void Engine::Render(float elapsedTime) { | ||||||
| 	//static float gameTime = elapsedTime; |  | ||||||
| 	static irrklang::ISound* step; // Pour les sons de pas. |  | ||||||
| 	static float pollTime = 0; |  | ||||||
| 	static float bulletTime = 0; |  | ||||||
| 	static BlockType bloc = 1; |  | ||||||
|  |  | ||||||
| 	if (elapsedTime > 0.1f) return; |  | ||||||
|  |  | ||||||
| 	//gameTime += elapsedTime; |  | ||||||
| 	pollTime += elapsedTime; |  | ||||||
|  |  | ||||||
| 	Transformation all; |  | ||||||
| 	Transformation skybox; |  | ||||||
| 	Vector3f vstep; |  | ||||||
| 	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | 	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | ||||||
|  |  | ||||||
| 	// Transformations initiales | 	m_time_SplashScreen += elapsedTime; | ||||||
| 	glMatrixMode(GL_MODELVIEW); | 	if(m_time_SplashScreen < 2) | ||||||
| 	glLoadIdentity(); | 	DrawSplachScreen(); | ||||||
|  | 	else if (m_gamestate == GameState::PLAY) | ||||||
|  | 	{ | ||||||
|  | 		HideCursor(); | ||||||
|  | 		CenterMouse(); //D<>placement de centermouse dans l'action de jouer | ||||||
|  |  | ||||||
| 	if (bulletTime > 0.f) bulletTime -= elapsedTime; | 		//static float gameTime = elapsedTime; | ||||||
| 	if (bulletTime < 0.f) bulletTime = 0.f; | 		static irrklang::ISound* step; // Pour les sons de pas. | ||||||
|  | 		static float pollTime = 0; | ||||||
|  | 		static float bulletTime = 0; | ||||||
|  | 		static BlockType bloc = 1; | ||||||
|  |  | ||||||
| 	static bool leftright = false; | 		if (elapsedTime > 0.1f) return; | ||||||
| 	if (pollTime >= .005f) { |  | ||||||
| 		Player::Sound snd = m_player.ApplyPhysics(m_player.GetInput(m_keyW, m_keyS, m_keyA, m_keyD, m_keySpace, (bloc == BTYPE_LAST && bulletTime <= 0.f && m_mouseL), elapsedTime), &m_world, elapsedTime); |  | ||||||
| 		switch (snd) { |  | ||||||
| 		case Player::Sound::STEP: |  | ||||||
| 			if (leftright) |  | ||||||
| 				vstep = Vector3f(m_player.GetPosition().x + m_player.GetDirection().z, m_player.GetPosition().y - 1.7f, m_player.GetPosition().z + m_player.GetDirection().x); |  | ||||||
| 			else vstep = Vector3f(m_player.GetPosition().x - m_player.GetDirection().z, m_player.GetPosition().y - 1.7f, m_player.GetPosition().z - m_player.GetDirection().x); |  | ||||||
| 			m_audio.Create3DAudioObj(step, AUDIO_PATH "step.wav", vstep, m_player.GetVelocity(), .8f); |  | ||||||
| 			leftright = !leftright; |  | ||||||
| 			break; |  | ||||||
| 		case Player::Sound::FALL: |  | ||||||
| 			m_audio.Create3DAudioObj(step, AUDIO_PATH "hit.wav", m_player.GetPosition(), m_player.GetVelocity(), 1.f); |  | ||||||
| 			break; |  | ||||||
| 		default: break; |  | ||||||
| 		} |  | ||||||
| 		m_audio.Update3DAudio(m_player.GetPOV(), m_player.GetDirection(), m_player.GetVelocity()); // Ajustement du positionnement 3D avec les coordonn<6E>es du joueur et |  | ||||||
| 		// son vecteur de v<>locit<69> (pour l'effet Doppler) |  | ||||||
| 		pollTime = 0; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	m_player.ApplyTransformation(all); | 		//gameTime += elapsedTime; | ||||||
|  | 		pollTime += elapsedTime; | ||||||
|  |  | ||||||
| 	m_player.ApplyTransformation(skybox, false); // Version d'ApplyTransformation qui ne tient compte que de la rotation  | 		Transformation all; | ||||||
| 	// (donc l'objet ne bouge pas relativement au joueur, ce qui est pratique pour une skybox!). | 		Transformation skybox; | ||||||
|  | 		Vector3f vstep; | ||||||
|  |  | ||||||
| 	if (m_mouseWU) bloc++; | 		// Transformations initiales | ||||||
| 	else if (m_mouseWD) bloc--; | 		glMatrixMode(GL_MODELVIEW); | ||||||
| 	if (bloc == BTYPE_LAST + 1) bloc = BTYPE_AIR + 1; | 		glLoadIdentity(); | ||||||
| 	else if (bloc == BTYPE_AIR) bloc = BTYPE_LAST; // La selection de BTYPE_LAST <20>quipe l'arme. |  | ||||||
| 	m_mouseWU = m_mouseWD = false; |  | ||||||
|  |  | ||||||
| 	if (m_mouseL) { | 		if (bulletTime > 0.f) bulletTime -= elapsedTime; | ||||||
| 		if (bloc != BTYPE_LAST) | 		if (bulletTime < 0.f) bulletTime = 0.f; | ||||||
| 			m_world.ChangeBlockAtCursor(bloc, m_player.GetPosition(), m_player.GetDirection(), m_block); |  | ||||||
| 		else if (bulletTime <= 0.f) { | 		static bool leftright = false; | ||||||
| 			for (int x = 0; x < MAX_BULLETS; ++x)  // Ajouter une balle dans l'array (aussi connu sous le nom de "faire pow pow"). | 		if (pollTime >= .005f) { | ||||||
| 				if (!m_bullets[x]) { | 			Player::Sound snd = m_player.ApplyPhysics(m_player.GetInput(m_keyW, m_keyS, m_keyA, m_keyD, m_keySpace, (bloc == BTYPE_LAST && bulletTime <= 0.f && m_mouseL), elapsedTime), &m_world, elapsedTime); | ||||||
| 					m_bullets[x] = new Bullet(m_player.GetPOV() + m_player.GetDirection(), m_player.GetDirection()); | 			switch (snd) { | ||||||
| 					break; | 			case Player::Sound::STEP: | ||||||
| 				} | 				if (leftright) | ||||||
| 				else if (x == MAX_BULLETS - 1) { // S'il y a pas d'espace dans l'array, prendre la place de la premi<6D>re balle de l'array. | 					vstep = Vector3f(m_player.GetPosition().x + m_player.GetDirection().z, m_player.GetPosition().y - 1.7f, m_player.GetPosition().z + m_player.GetDirection().x); | ||||||
| 					m_bullets[0]->~Bullet(); | 				else vstep = Vector3f(m_player.GetPosition().x - m_player.GetDirection().z, m_player.GetPosition().y - 1.7f, m_player.GetPosition().z - m_player.GetDirection().x); | ||||||
| 					m_bullets[0] = new Bullet(m_player.GetPOV() + m_player.GetDirection(), m_player.GetDirection()); | 				m_audio.Create3DAudioObj(step, AUDIO_PATH "step.wav", vstep, m_player.GetVelocity(), false,.8f); | ||||||
| 				} | 				leftright = !leftright; | ||||||
| 			bulletTime = .1f; | 				break; | ||||||
| 			m_audio.Create3DAudioObj(m_powpow, AUDIO_PATH "windowsaccount.wav", m_player.GetPOV(), m_player.GetDirection() * 10, .5f); | 			case Player::Sound::FALL: | ||||||
| 			if (m_flash) { // Coupe le rendering et affiche un frame blanc, pour simuler un flash. | 				m_audio.Create3DAudioObj(step, AUDIO_PATH "hit.wav", m_player.GetPosition(), m_player.GetVelocity(), false,1.f); | ||||||
| 				glClearColor(.8f, .8f, .8f, 1.f); | 				break; | ||||||
| 				glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | 			default: break; | ||||||
| 				glClearColor(0.f, 0.f, 0.f, 1.f); |  | ||||||
| 				return; |  | ||||||
| 			} | 			} | ||||||
|  | 			m_audio.Update3DAudio(m_player.GetPOV(), m_player.GetDirection(), m_player.GetVelocity()); // Ajustement du positionnement 3D avec les coordonn<6E>es du joueur et | ||||||
|  | 			// son vecteur de v<>locit<69> (pour l'effet Doppler) | ||||||
|  | 			pollTime = 0; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		m_player.ApplyTransformation(all); | ||||||
|  |  | ||||||
|  | 		m_player.ApplyTransformation(skybox, false); // Version d'ApplyTransformation qui ne tient compte que de la rotation  | ||||||
|  | 		// (donc l'objet ne bouge pas relativement au joueur, ce qui est pratique pour une skybox!). | ||||||
|  |  | ||||||
|  | 		if (m_mouseWU) bloc++; | ||||||
|  | 		else if (m_mouseWD) bloc--; | ||||||
|  | 		if (bloc == BTYPE_LAST + 1) bloc = BTYPE_AIR + 1; | ||||||
|  | 		else if (bloc == BTYPE_AIR) bloc = BTYPE_LAST; // La selection de BTYPE_LAST <20>quipe l'arme. | ||||||
|  | 		m_mouseWU = m_mouseWD = false; | ||||||
|  |  | ||||||
|  | 		if (m_mouseL) { | ||||||
|  | 			if (bloc != BTYPE_LAST) | ||||||
|  | 				m_world.ChangeBlockAtCursor(bloc, m_player.GetPosition(), m_player.GetDirection(), m_block); | ||||||
|  | 			else if (bulletTime <= 0.f) { | ||||||
|  | 				for (int x = 0; x < MAX_BULLETS; ++x)  // Ajouter une balle dans l'array (aussi connu sous le nom de "faire pow pow"). | ||||||
|  | 					if (!m_bullets[x]) { | ||||||
|  | 						m_bullets[x] = new Bullet(m_player.GetPOV() + m_player.GetDirection(), m_player.GetDirection()); | ||||||
|  | 						break; | ||||||
|  | 					} | ||||||
|  | 					else if (x == MAX_BULLETS - 1) { // S'il y a pas d'espace dans l'array, prendre la place de la premi<6D>re balle de l'array. | ||||||
|  | 						m_bullets[0]->~Bullet(); | ||||||
|  | 						m_bullets[0] = new Bullet(m_player.GetPOV() + m_player.GetDirection(), m_player.GetDirection()); | ||||||
|  | 					} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	else if (m_mouseR) | 	else if (m_mouseR) | ||||||
| 		m_world.ChangeBlockAtCursor(BTYPE_AIR, m_player.GetPosition(), m_player.GetDirection(), m_block); | 		m_world.ChangeBlockAtCursor(BTYPE_AIR, m_player.GetPosition(), m_player.GetDirection(), m_block); | ||||||
|  |  | ||||||
| 	for (int x = 0; x < MAX_BULLETS; ++x) // Array de bullets en jeu. |  | ||||||
| 		if (m_bullets[x]) |  | ||||||
| 			if (m_bullets[x]->Update(&m_world, elapsedTime)) { |  | ||||||
| 				m_bullets[x]->~Bullet(); |  | ||||||
| 				m_bullets[x] = nullptr; |  | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 	m_wrenderer.RenderWorld(&m_world, m_renderCount, m_player.GetPosition(), m_player.GetDirection(), all, m_shader01, m_textureAtlas); |  | ||||||
| 	m_world.Update(m_bullets, m_player.GetPosition(), m_blockinfo); |  | ||||||
| 	m_wrenderer.UpdateWorld(&m_world, m_player.GetPosition(), m_blockinfo); |  | ||||||
|  |  | ||||||
| 	if (m_isSkybox) m_skybox.Render(skybox); |  | ||||||
|  |  | ||||||
| 	ProcessNotificationQueue(); |  | ||||||
| 	DrawHud(elapsedTime, bloc); |  | ||||||
| 	 | 	 | ||||||
| 	static bool fell = false; | 	for (int x = 0; x < MAX_BULLETS; ++x) { // Array de bullets en jeu. | ||||||
| 	if (m_player.GetPosition().y < 1.7f && !fell) { | 		if (m_bullets[x]) { | ||||||
| 		m_audio.Create3DAudioObj(m_scream, AUDIO_PATH "scream.wav", m_player.GetPOV(), m_player.GetVelocity(), 1.f); | 			for (int b = 0; b < BULLET_UPDATES_PER_FRAME; ++b) | ||||||
| 		fell = true; | 				if (m_bullets[x]->Update(&m_world, elapsedTime, BULLET_UPDATES_PER_FRAME)) { | ||||||
|  | 					m_bullets[x]->~Bullet(); | ||||||
|  | 					if (m_whoosh[x]) | ||||||
|  | 						m_whoosh[x]->drop(); | ||||||
|  | 					m_bullets[x] = nullptr; | ||||||
|  | 					m_whoosh[x] = nullptr; | ||||||
|  | 					break; | ||||||
|  | 				} | ||||||
|  | 				else if (!m_whoosh[x]) { | ||||||
|  | 					m_whoosh[x] = m_audio.Create3DAudioObj(m_whoosh[x], AUDIO_PATH "noise.wav", m_bullets[x]->getPos(), m_bullets[x]->getVel(), true, (m_bullets[x]->getPos() - m_player.GetPosition()).Length()); | ||||||
|  | 				} | ||||||
|  | 				else m_audio.Render3DAudioObj(m_whoosh[x], m_bullets[x]->getPos(), m_bullets[x]->getVel(), 5 - (m_bullets[x]->getPos() - m_player.GetPosition()).Length());			 | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
| 	else if (m_player.GetPosition().y < -20.f) { |  | ||||||
| 		m_player = Player(Vector3f(.5f, CHUNK_SIZE_Y + 1.8f, .5f)); // Respawn si le bonho- joueur tombe en bas du monde. | 		m_wrenderer.RenderWorld(&m_world, m_renderCount, m_player.GetPosition(), m_player.GetDirection(), all, m_shader01, m_textureAtlas); | ||||||
| 		fell = false; | 		m_world.Update(m_bullets, m_player.GetPosition(), m_blockinfo); | ||||||
|  | 		m_wrenderer.UpdateWorld(&m_world, m_player.GetPosition(), m_blockinfo); | ||||||
|  |  | ||||||
|  | 		if (m_isSkybox) m_skybox.Render(skybox); | ||||||
|  |  | ||||||
|  | 		ProcessNotificationQueue(); | ||||||
|  | 		DrawHud(elapsedTime, bloc); | ||||||
|  |  | ||||||
|  | 		static bool fell = false; | ||||||
|  | 		if (m_player.GetPosition().y < 1.7f && !fell) { | ||||||
|  | 			m_audio.Create3DAudioObj(m_scream, AUDIO_PATH "scream.wav", m_player.GetPOV(), m_player.GetVelocity(), false,1.f); | ||||||
|  | 			fell = true; | ||||||
|  | 		} | ||||||
|  | 		else if (m_player.GetPosition().y < -20.f) { | ||||||
|  | 			m_player = Player(Vector3f(.5f, CHUNK_SIZE_Y + 1.8f, .5f)); // Respawn si le bonho- joueur tombe en bas du monde. | ||||||
|  | 			fell = false; | ||||||
|  | 		} | ||||||
|  |  | ||||||
| 	} | 	} | ||||||
|  | 	else if (m_gamestate == GameState::MAIN_MENU || m_gamestate == GameState::OPTIONS) | ||||||
|  | 	{ | ||||||
|  | 		DrawMenu(); | ||||||
|  | 	} | ||||||
|  | 	else if (m_gamestate == GameState::QUIT) | ||||||
|  | 		Stop(); | ||||||
| } | } | ||||||
|  |  | ||||||
| void Engine::KeyPressEvent(unsigned char key) { | void Engine::KeyPressEvent(unsigned char key) { | ||||||
| @@ -574,14 +851,15 @@ void Engine::KeyPressEvent(unsigned char key) { | |||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| 	case 36: // ESC - Quitter | 	case 36: // ESC - Quitter | ||||||
| 		Stop(); | 		m_gamestate = GameState::MAIN_MENU; | ||||||
|  | 		//Stop(); | ||||||
| 		break; | 		break; | ||||||
| 	case 57: // Space - Sauter | 	case 57: // Space - Sauter | ||||||
| 		if (!m_keySpace) { | 		if (!m_keySpace) { | ||||||
| 			m_keySpace = true; | 			m_keySpace = true; | ||||||
| 		} | 		} | ||||||
| 		break; | 		break; | ||||||
| 	case 94: // F10 - Plein <20>cran | 	case 94: // F10 - Plein <20>cran | ||||||
| 		IsFullscreen() ? SetFullscreen(false) : SetFullscreen(true); | 		IsFullscreen() ? SetFullscreen(false) : SetFullscreen(true); | ||||||
| 		//SetFullscreen(!IsFullscreen()); | 		//SetFullscreen(!IsFullscreen()); | ||||||
| 		break; | 		break; | ||||||
| @@ -591,7 +869,7 @@ void Engine::KeyPressEvent(unsigned char key) { | |||||||
| 		break; | 		break; | ||||||
| 	case 10: // K - Debugging DisplayNotification() | 	case 10: // K - Debugging DisplayNotification() | ||||||
| 		m_keyK = true; | 		m_keyK = true; | ||||||
| 		m_messageNotification = "notifications systeme peuvent <20>tre affich<63>"; | 		m_messageNotification = "notifications systeme peuvent <20>tre affich<63>"; | ||||||
| 		break; | 		break; | ||||||
| 	case 11: // L - Debugging DisplayNotification() | 	case 11: // L - Debugging DisplayNotification() | ||||||
| 		m_keyL = true; | 		m_keyL = true; | ||||||
| @@ -604,6 +882,8 @@ void Engine::KeyPressEvent(unsigned char key) { | |||||||
| 		break; | 		break; | ||||||
| 	case 8: // I - Ignorer | 	case 8: // I - Ignorer | ||||||
| 		break; | 		break; | ||||||
|  | 	case 15: // P - Ignorer | ||||||
|  | 		break; | ||||||
| 	case 17: // R - Ignorer | 	case 17: // R - Ignorer | ||||||
| 		break; | 		break; | ||||||
| 	case 19: // T - Ignorer | 	case 19: // T - Ignorer | ||||||
| @@ -653,6 +933,17 @@ void Engine::KeyReleaseEvent(unsigned char key) { | |||||||
| 	case 12: // M - Toggle music | 	case 12: // M - Toggle music | ||||||
| 		m_audio.ToggleMusicState(); | 		m_audio.ToggleMusicState(); | ||||||
| 		break; | 		break; | ||||||
|  | 	case 15: | ||||||
|  | 		for (int x = 0; x < MAX_BULLETS; ++x)  // Ajouter une balle dans l'array (aussi connu sous le nom de "faire pow pow"). | ||||||
|  | 			if (!m_bullets[x]) { | ||||||
|  | 				m_bullets[x] = new Bullet(m_player.GetPOV() - Vector3f(1.f, 0.f, 1.f), Vector3f(1.f,0.f,1.f)); | ||||||
|  | 				break; | ||||||
|  | 			} | ||||||
|  | 			else if (x == MAX_BULLETS - 1) { // S'il y a pas d'espace dans l'array, prendre la place de la premi<6D>re balle de l'array. | ||||||
|  | 				m_bullets[0]->~Bullet(); | ||||||
|  | 				m_bullets[0] = new Bullet(m_player.GetPOV() - Vector3f(1.f, 0.f, 1.f), Vector3f(1.f, 0.f, 1.f)); | ||||||
|  | 			} | ||||||
|  | 		break; | ||||||
| 	case 17: // R - Toggle skybox | 	case 17: // R - Toggle skybox | ||||||
| 		m_isSkybox = !m_isSkybox; | 		m_isSkybox = !m_isSkybox; | ||||||
| 		break; | 		break; | ||||||
| @@ -683,35 +974,47 @@ void Engine::MouseMoveEvent(int x, int y) { | |||||||
| 	m_player.TurnLeftRight(x - (Width() / 2)); | 	m_player.TurnLeftRight(x - (Width() / 2)); | ||||||
| 	m_player.TurnTopBottom(y - (Height() / 2)); | 	m_player.TurnTopBottom(y - (Height() / 2)); | ||||||
|  |  | ||||||
| 	// Centrer la souris seulement si elle n'est pas d<>j<EFBFBD> centr<74>e | 	// Centrer la souris seulement si elle n'est pas d<>j<EFBFBD> centr<74>e | ||||||
| 	// Il est n<>cessaire de faire la v<>rification pour <20>viter de tomber | 	// Il est n<>cessaire de faire la v<>rification pour <20>viter de tomber | ||||||
| 	// dans une boucle infinie o<> l'appel <20> CenterMouse g<>n<EFBFBD>re un | 	// dans une boucle infinie o<> l'appel <20> CenterMouse g<>n<EFBFBD>re un | ||||||
| 	// MouseMoveEvent, qui rapelle CenterMouse qui rapelle un autre | 	// MouseMoveEvent, qui rapelle CenterMouse qui rapelle un autre | ||||||
| 	// MouseMoveEvent, etc | 	// MouseMoveEvent, etc | ||||||
| 	if (x == (Width() / 2) && y == (Height() / 2)) | 	if (x == (Width() / 2) && y == (Height() / 2)) | ||||||
| 		return; | 		return; | ||||||
|  |  | ||||||
| 	CenterMouse(); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| void Engine::MousePressEvent(const MOUSE_BUTTON& button, int x, int y) { | void Engine::MousePressEvent(const MOUSE_BUTTON& button, int x, int y) { | ||||||
| 	switch (button) { | 	m_mousemx = x; | ||||||
| 	case MOUSE_BUTTON_LEFT: | 	m_mousemy = y; | ||||||
| 		m_mouseL = true; |  | ||||||
| 		break; | 	if (m_gamestate == GameState::PLAY) | ||||||
| 	case MOUSE_BUTTON_RIGHT: | 	{ | ||||||
| 		m_mouseR = true; | 		switch (button) { | ||||||
| 		break; | 		case MOUSE_BUTTON_LEFT: | ||||||
| 	case MOUSE_BUTTON_MIDDLE: | 			m_mouseL = true; | ||||||
| 		m_mouseC = true; | 			break; | ||||||
| 		break; | 		case MOUSE_BUTTON_RIGHT: | ||||||
| 	case MOUSE_BUTTON_WHEEL_UP: | 			m_mouseR = true; | ||||||
| 		m_mouseWU = true; | 			break; | ||||||
| 		break; | 		case MOUSE_BUTTON_MIDDLE: | ||||||
| 	case MOUSE_BUTTON_WHEEL_DOWN: | 			m_mouseC = true; | ||||||
| 		m_mouseWD = true; | 			break; | ||||||
| 		break; | 		case MOUSE_BUTTON_WHEEL_UP: | ||||||
| 	case MOUSE_BUTTON_NONE: break; | 			m_mouseWU = true; | ||||||
|  | 			break; | ||||||
|  | 		case MOUSE_BUTTON_WHEEL_DOWN: | ||||||
|  | 			m_mouseWD = true; | ||||||
|  | 			break; | ||||||
|  | 		case MOUSE_BUTTON_NONE: break; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	else if (m_gamestate == GameState::MAIN_MENU) | ||||||
|  | 	{ | ||||||
|  | 		if ((m_mousemx >= 285 && m_mousemx <= 490) && (m_mousemy >= 150 && m_mousemy <= 250)) | ||||||
|  | 			m_gamestate = GameState::PLAY; | ||||||
|  | 		if ((m_mousemx >= 305 && m_mousemx <= 450) && (m_mousemy >= 300 && m_mousemy <= 400)) | ||||||
|  | 			m_gamestate = GameState::QUIT; | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -24,6 +24,8 @@ class Engine : public OpenglContext { | |||||||
| public: | public: | ||||||
|     Engine(); |     Engine(); | ||||||
|     virtual ~Engine(); |     virtual ~Engine(); | ||||||
|  |     virtual void DrawMenu(); | ||||||
|  |     virtual void DrawSplachScreen(); | ||||||
|     virtual void Init(); |     virtual void Init(); | ||||||
|     virtual void DeInit(); |     virtual void DeInit(); | ||||||
|     virtual void LoadResource(); |     virtual void LoadResource(); | ||||||
| @@ -70,15 +72,29 @@ private: | |||||||
|     Skybox m_skybox; |     Skybox m_skybox; | ||||||
|     Audio m_audio = Audio(AUDIO_PATH "start.wav"); |     Audio m_audio = Audio(AUDIO_PATH "start.wav"); | ||||||
|  |  | ||||||
|     irrklang::ISound* m_powpow; |     irrklang::ISound* m_powpow, | ||||||
|     irrklang::ISound* m_scream; |         * m_scream; | ||||||
|  |     irrklang::ISound *m_whoosh[MAX_BULLETS]; | ||||||
|  |  | ||||||
|     Player m_player = Player(Vector3f(.5f, CHUNK_SIZE_Y + 1.8f, .5f)); |     Player m_player = Player(Vector3f(.5f, CHUNK_SIZE_Y + 1.8f, .5f)); | ||||||
|      |      | ||||||
|     Bullet* m_bullets[MAX_BULLETS]; |     Bullet* m_bullets[MAX_BULLETS]; | ||||||
|  |  | ||||||
|  |     //Menu | ||||||
|  |     enum class GameState { MAIN_MENU, OPTIONS, QUIT, NEWG, PLAY }; | ||||||
|  |     GameState m_gamestate = GameState::MAIN_MENU; | ||||||
|  |     Texture MenuTitleTexture; | ||||||
|  |     Texture MenuBGTexture; | ||||||
|  |     Texture MenuStartTexture; | ||||||
|  |     Texture MenuQuitTexture; | ||||||
|  |     Texture MenuOptionsTexture; | ||||||
|  |     Texture SplachScreenTexture; | ||||||
|  |  | ||||||
|     float m_scale; |     float m_scale; | ||||||
|     float m_time = 0; |     float m_time = 0; | ||||||
|  |     float m_time_SplashScreen = 0; | ||||||
|  |     float m_Width = 0; | ||||||
|  |     float m_Height = 0; | ||||||
|  |  | ||||||
|     int m_renderCount = 0; |     int m_renderCount = 0; | ||||||
|     int m_countdown = COUNTDOWN; |     int m_countdown = COUNTDOWN; | ||||||
| @@ -105,6 +121,9 @@ private: | |||||||
|     bool m_mouseC = false; |     bool m_mouseC = false; | ||||||
|     bool m_mouseWU = false; |     bool m_mouseWU = false; | ||||||
|     bool m_mouseWD = false; |     bool m_mouseWD = false; | ||||||
|  |     //Pour trouver ou est la souris | ||||||
|  |     float m_mousemx = 0; | ||||||
|  |     float m_mousemy = 0; | ||||||
|  |  | ||||||
|     std::string m_messageNotification = ""; |     std::string m_messageNotification = ""; | ||||||
| }; | }; | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								SQCSim2021/media/audio/noise.wav
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								SQCSim2021/media/audio/noise.wav
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								SQCSim2021/media/menu_items/BasicPlay.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								SQCSim2021/media/menu_items/BasicPlay.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 7.9 KiB | 
							
								
								
									
										
											BIN
										
									
								
								SQCSim2021/media/menu_items/BasicQuit.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								SQCSim2021/media/menu_items/BasicQuit.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 8.6 KiB | 
							
								
								
									
										
											BIN
										
									
								
								SQCSim2021/media/menu_items/test.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								SQCSim2021/media/menu_items/test.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 289 KiB | 
| @@ -7,7 +7,7 @@ void main() | |||||||
|     texel = texture2D(tex,gl_TexCoord[0].st); |     texel = texture2D(tex,gl_TexCoord[0].st); | ||||||
|  |  | ||||||
|     texel *= light; |     texel *= light; | ||||||
|    texel.a = 255; |    texel.a = 255.; | ||||||
|     gl_FragColor = texel; |     gl_FragColor = texel; | ||||||
|     |     | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										
											BIN
										
									
								
								SQCSim2021/media/textures/GUN.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								SQCSim2021/media/textures/GUN.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 267 KiB | 
							
								
								
									
										
											BIN
										
									
								
								SQCSim2021/media/textures/sc2.png
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								SQCSim2021/media/textures/sc2.png
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 195 KiB | 
| @@ -9,6 +9,7 @@ OpenglContext::~OpenglContext() | |||||||
| { | { | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| bool OpenglContext::Start(const std::string& title, int width, int height, bool fullscreen) | bool OpenglContext::Start(const std::string& title, int width, int height, bool fullscreen) | ||||||
| { | { | ||||||
|     m_title = title; |     m_title = title; | ||||||
| @@ -22,13 +23,14 @@ bool OpenglContext::Start(const std::string& title, int width, int height, bool | |||||||
|  |  | ||||||
|     while (m_app.isOpen()) |     while (m_app.isOpen()) | ||||||
|     { |     { | ||||||
|         clock.restart(); |  | ||||||
|  |  | ||||||
|         sf::Event Event; |             clock.restart(); | ||||||
|         while (m_app.pollEvent(Event)) |  | ||||||
|         { |             sf::Event Event; | ||||||
|             switch(Event.type) |             while (m_app.pollEvent(Event)) | ||||||
|             { |             { | ||||||
|  |                 switch (Event.type) | ||||||
|  |                 { | ||||||
|                 case sf::Event::Closed: |                 case sf::Event::Closed: | ||||||
|                     m_app.close(); |                     m_app.close(); | ||||||
|                     break; |                     break; | ||||||
| @@ -51,29 +53,29 @@ bool OpenglContext::Start(const std::string& title, int width, int height, bool | |||||||
|                     MouseReleaseEvent(ConvertMouseButton(Event.mouseButton.button), Event.mouseButton.x, Event.mouseButton.y); |                     MouseReleaseEvent(ConvertMouseButton(Event.mouseButton.button), Event.mouseButton.x, Event.mouseButton.y); | ||||||
|                     break; |                     break; | ||||||
|                 case sf::Event::MouseWheelMoved: |                 case sf::Event::MouseWheelMoved: | ||||||
|                     if(Event.mouseWheel.delta > 0) |                     if (Event.mouseWheel.delta > 0) | ||||||
|                         MousePressEvent(MOUSE_BUTTON_WHEEL_UP, Event.mouseButton.x, Event.mouseButton.y); |                         MousePressEvent(MOUSE_BUTTON_WHEEL_UP, Event.mouseButton.x, Event.mouseButton.y); | ||||||
|                     else |                     else | ||||||
|                         MousePressEvent(MOUSE_BUTTON_WHEEL_DOWN, Event.mouseButton.x, Event.mouseButton.y); |                         MousePressEvent(MOUSE_BUTTON_WHEEL_DOWN, Event.mouseButton.x, Event.mouseButton.y); | ||||||
|                     break; |                     break; | ||||||
|                 default: break; |                 default: break; | ||||||
|  |                 } | ||||||
|             } |             } | ||||||
|         } |  | ||||||
|  |  | ||||||
|         m_app.setActive(); |             m_app.setActive(); | ||||||
|         Render(m_lastFrameTime); |             Render(m_lastFrameTime); | ||||||
|         m_app.display(); |             m_app.display(); | ||||||
|  |  | ||||||
|         m_lastFrameTime = clock.getElapsedTime().asSeconds(); |  | ||||||
|  |  | ||||||
|         // Handle ourself frame rate limit, sf::Window::setFramerateLimit doesn't seems to work |  | ||||||
|         float waitTime = (1.f / m_maxFps) - m_lastFrameTime; |  | ||||||
|         if(waitTime > 0) |  | ||||||
|         { |  | ||||||
|             sf::sleep(sf::seconds(waitTime)); |  | ||||||
|  |  | ||||||
|             m_lastFrameTime = clock.getElapsedTime().asSeconds(); |             m_lastFrameTime = clock.getElapsedTime().asSeconds(); | ||||||
|         } |  | ||||||
|  |             // Handle ourself frame rate limit, sf::Window::setFramerateLimit doesn't seems to work | ||||||
|  |             float waitTime = (1.f / m_maxFps) - m_lastFrameTime; | ||||||
|  |             if (waitTime > 0) | ||||||
|  |             { | ||||||
|  |                 sf::sleep(sf::seconds(waitTime)); | ||||||
|  |  | ||||||
|  |                 m_lastFrameTime = clock.getElapsedTime().asSeconds(); | ||||||
|  |             } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     UnloadResource(); |     UnloadResource(); | ||||||
|   | |||||||
| @@ -4,6 +4,7 @@ | |||||||
| #include <string> | #include <string> | ||||||
| #include <SFML/Window.hpp> | #include <SFML/Window.hpp> | ||||||
| #include "define.h" | #include "define.h" | ||||||
|  | #include "texture.h" | ||||||
|  |  | ||||||
| // Documentation de SFML: http://www.sfml-dev.org/documentation/index-fr.php | // Documentation de SFML: http://www.sfml-dev.org/documentation/index-fr.php | ||||||
| class OpenglContext | class OpenglContext | ||||||
| @@ -31,7 +32,6 @@ public: | |||||||
|     virtual void MousePressEvent(const MOUSE_BUTTON &button, int x, int y) = 0; |     virtual void MousePressEvent(const MOUSE_BUTTON &button, int x, int y) = 0; | ||||||
|     virtual void MouseReleaseEvent(const MOUSE_BUTTON &button, int x, int y) = 0; |     virtual void MouseReleaseEvent(const MOUSE_BUTTON &button, int x, int y) = 0; | ||||||
|  |  | ||||||
|  |  | ||||||
|     bool Start(const std::string& title, int width, int height, bool fullscreen); |     bool Start(const std::string& title, int width, int height, bool fullscreen); | ||||||
|     bool Stop(); |     bool Stop(); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -211,3 +211,4 @@ void WorldRenderer::UpdateWorld(World* origin, const Vector3f& player, BlockInfo | |||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user