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/Debug/SQCSim2023.exe | ||||
| /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() {} | ||||
|  | ||||
| bool Bullet::Update(World* world, float elapsedtime) { | ||||
| 	for (int x = 0; x < 1000; ++x) { | ||||
| bool Bullet::Update(World* world, float elapsedtime, int perframe) { | ||||
| 	int max = 100 / perframe; | ||||
| 	for (int x = 0; x < max; ++x) { | ||||
| 		m_currentpos += m_velocity * elapsedtime; | ||||
|  | ||||
| 		if (!world->ChunkAt(m_currentpos)) | ||||
| @@ -30,10 +31,14 @@ void Bullet::Transpose(int& x, int& z) { | ||||
| 	m_startpos.z -= z * CHUNK_SIZE_Z; | ||||
| } | ||||
|  | ||||
| Vector3f Bullet::getPos() { | ||||
| Vector3f Bullet::getPos() const { | ||||
| 	return m_currentpos; | ||||
| } | ||||
|  | ||||
| Vector3f Bullet::getVel() const { | ||||
| 	return m_velocity; | ||||
| } | ||||
|  | ||||
| uint64_t Bullet::getTeamID(){ | ||||
| 	return m_tid; | ||||
| } | ||||
|   | ||||
| @@ -12,9 +12,10 @@ public: | ||||
| 	Bullet(Vector3f pos, Vector3f dir, uint64_t tid); | ||||
| 	~Bullet(); | ||||
|  | ||||
| 	bool Update(World* world, float elapsedtime); | ||||
| 	bool Update(World* world, float elapsedtime, int perframe); | ||||
| 	void Transpose(int& x, int& z); | ||||
| 	Vector3f getPos(); | ||||
| 	Vector3f getPos() const; | ||||
| 	Vector3f getVel() const; | ||||
| 	uint64_t getTeamID(); | ||||
|  | ||||
| private: | ||||
|   | ||||
| @@ -53,6 +53,7 @@ typedef uint64_t Timestamp; | ||||
| #include <sys/socket.h> | ||||
| #include <arpa/inet.h> | ||||
| #include <netinet/in.h> | ||||
| #include <cstring> | ||||
|  | ||||
| #define SOCKET int | ||||
| #define INVALID_SOCKET -1 | ||||
|   | ||||
| @@ -130,7 +130,7 @@ void World::GetScope(unsigned int& x, unsigned int& y) { | ||||
| 	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); | ||||
| 	//TransposeWorld(player_pos, bullets); | ||||
| } | ||||
|   | ||||
| @@ -30,7 +30,7 @@ public: | ||||
| 	BlockType BlockAt(float x, float y, float z, 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); | ||||
|  | ||||
|   | ||||
							
								
								
									
										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) | ||||
| @@ -85,7 +85,7 @@ int Server::Ready() { | ||||
|  | ||||
| 	while (!readystart) { | ||||
| 		sockaddr_in sockad; | ||||
| 		int addrlen = sizeof(sockad); | ||||
| 		unsigned int addrlen = sizeof(sockad); | ||||
| 		SOCKET sock = accept(m_sock_tcp, (sockaddr*)&sockad, &addrlen); | ||||
|  | ||||
| 		if (sock < 0) | ||||
| @@ -140,7 +140,7 @@ void Server::Run() { | ||||
| 	Log("Partie en cours...", false, false); | ||||
| } | ||||
|  | ||||
| inline std::string Server::Timestamp() { | ||||
| inline std::string Server::LogTimestamp() { | ||||
| 	time_t rawtime; | ||||
| 	struct tm timeinfo; | ||||
| 	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) { | ||||
| 	switch (m_log) { | ||||
| 	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; | ||||
| 	case LOG_DEST::CONSOLE: | ||||
| 	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; | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -35,7 +35,7 @@ private: | ||||
|  | ||||
| 	World* m_world = nullptr; | ||||
|  | ||||
| 	std::string Timestamp(); | ||||
| 	std::string LogTimestamp(); | ||||
| 	void Log(std::string str, bool is_error, bool is_fatal); | ||||
| 	void buildIdList(size_t size); | ||||
|  | ||||
|   | ||||
| @@ -2,17 +2,17 @@ | ||||
|  | ||||
| Audio::Audio() { | ||||
| 	m_engine = irrklang::createIrrKlangDevice(); | ||||
| 	m_engine->setDopplerEffectParameters(1); | ||||
| 	m_engine->setRolloffFactor(1); | ||||
| 	m_engine->setDefault3DSoundMinDistance(1); | ||||
| 	m_engine->setDopplerEffectParameters(10); | ||||
| 	m_engine->setRolloffFactor(2); | ||||
| 	m_engine->setDefault3DSoundMinDistance(.1); | ||||
| 	m_engine->setDefault3DSoundMaxDistance(1000); | ||||
| } | ||||
|  | ||||
| Audio::Audio(const char * music) { | ||||
| 	m_engine = irrklang::createIrrKlangDevice(); | ||||
| 	m_engine->setDopplerEffectParameters(1); | ||||
| 	m_engine->setRolloffFactor(1); | ||||
| 	m_engine->setDefault3DSoundMinDistance(1); | ||||
| 	m_engine->setRolloffFactor(2); | ||||
| 	m_engine->setDefault3DSoundMinDistance(.1); | ||||
| 	m_engine->setDefault3DSoundMaxDistance(1000); | ||||
| 	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)); | ||||
| } | ||||
|  | ||||
| void Audio::Create3DAudioObj(irrklang::ISound* sound, const char* name, Vector3f pos, Vector3f vel, float volume = 1) { | ||||
| 	sound = m_engine->play3D(name, irrklang::vec3df(pos.x, pos.y, pos.z), false, false, true, irrklang::ESM_NO_STREAMING, true); | ||||
| 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), 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->setVolume(volume); | ||||
| 	return sound; | ||||
| } | ||||
|  | ||||
| void Audio::Render3DAudioObj(irrklang::ISound* sound, Vector3f& pos, Vector3f& vel, float volume = 1) { | ||||
|   | ||||
| @@ -1,24 +1,30 @@ | ||||
| #ifndef AUDIO_H__ | ||||
| #define AUDIO_H__ | ||||
|  | ||||
| #ifdef _WIN32 | ||||
| #include <irrKlang.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 "define.h" | ||||
|  | ||||
| class Audio { | ||||
| private: | ||||
| 	irrklang::ISoundEngine* m_engine; | ||||
| 	irrklang::ISound* m_music; | ||||
|  | ||||
| public: | ||||
| 	Audio(); | ||||
| 	Audio(const char* music); | ||||
| 	~Audio(); | ||||
| 	irrklang::ISoundEngine* m_engine; | ||||
|  | ||||
| 	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); | ||||
|  | ||||
|   | ||||
							
								
								
									
										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 <chrono> | ||||
| #include <iomanip> | ||||
| #include <GL/glew.h> | ||||
| #include <SFML/Window.hpp> | ||||
| #include <SFML/Graphics.hpp> | ||||
| #include "../SQCSim-common/define.h" | ||||
|  | ||||
| #ifdef _WIN32 | ||||
| #include <GL/glew.h> | ||||
| #include <gl/GL.h> | ||||
| #include <gl/GLU.h> | ||||
| #else | ||||
| #include <GL/gl.h> | ||||
| #include <GL/glu.h> | ||||
| #include <climits> | ||||
| #endif | ||||
|  | ||||
| #define NETWORK_TEST false | ||||
| #define SRV_ADDR "127.0.0.1" | ||||
| #define COUNTDOWN 300 | ||||
|  | ||||
| #define BASE_WIDTH 1920 | ||||
| #define BASE_HEIGHT 1080 | ||||
| #define BULLET_UPDATES_PER_FRAME 20 | ||||
|  | ||||
| #define BASE_WIDTH 640 | ||||
| #define BASE_HEIGHT 480 | ||||
|  | ||||
|  | ||||
| #define TEXTURE_PATH        "./media/textures/" | ||||
| #define SHADER_PATH		    "./media/shaders/" | ||||
| #define AUDIO_PATH			"./media/audio/" | ||||
| #define CHUNK_PATH			"./media/chunks/" | ||||
| #define MENU_ITEM_PATH		"./media/menu_items/" | ||||
|  | ||||
| #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(); | ||||
| } | ||||
|  | ||||
| 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() { | ||||
|  | ||||
|  | ||||
| 	GLenum glewErr = glewInit(); | ||||
| 	if (glewErr != GLEW_OK) { | ||||
| 		std::cerr << " ERREUR GLEW : " << glewGetErrorString(glewErr) << std::endl; | ||||
| @@ -53,6 +299,7 @@ void Engine::Init() { | ||||
| 	glDisable(GL_BLEND); | ||||
| 	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | ||||
| 	glBlendEquation(GL_FUNC_SUBTRACT); | ||||
| 	 | ||||
| 	//  | ||||
| 	// Objet de skybox avec sa propre texture et son propre shader! | ||||
| 	m_skybox.Init(0.2f); | ||||
| @@ -61,22 +308,24 @@ void Engine::Init() { | ||||
| 	//m_audio.ToggleMusicState(); | ||||
|  | ||||
| 	// 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_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; | ||||
| 	std::string playname = "La Chienne <20> Jacques"; | ||||
| 	if (NETWORK_TEST) { // Test connexion r<>seau. | ||||
| 	std::string playname = "La Chienne <20> Jacques"; | ||||
| 	if (NETWORK_TEST) { // Test connexion r<>seau. | ||||
| 		if (!m_conn.Init()) { | ||||
| 			if (!m_conn.Connect(SRV_ADDR, playname)) { | ||||
| 				// setup jeu en r<>seau. | ||||
| 				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; | ||||
| 				// setup jeu en r<>seau. | ||||
| 				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; | ||||
| 				seed = m_conn.getSeed(); | ||||
| 			} | ||||
| 			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); | ||||
| @@ -84,6 +333,8 @@ void Engine::Init() { | ||||
| 	// Init Chunks | ||||
| 	m_world.GetChunks().Reset(nullptr); | ||||
|  | ||||
| 	 | ||||
|  | ||||
| 	// Gestion de souris. | ||||
| 	CenterMouse(); | ||||
| 	HideCursor(); | ||||
| @@ -95,8 +346,14 @@ void Engine::LoadResource() { | ||||
| 	LoadTexture(m_skybox.GetTexture(), TEXTURE_PATH "skybox.png", true); | ||||
| 	LoadTexture(m_textureCrosshair, TEXTURE_PATH "cross.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 texIceIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "metal2.png"); | ||||
| 	TextureAtlas::TextureIndex texGrassIndex = m_textureAtlas.AddTexture(TEXTURE_PATH "grass.png"); | ||||
| @@ -188,8 +445,6 @@ void Engine::ProcessNotificationQueue() { | ||||
| 		glMatrixMode(GL_MODELVIEW); | ||||
| 		glPushMatrix(); | ||||
| 		 | ||||
| 		 | ||||
| 		 | ||||
| 		PrintText(xOffset, y, scale, it->message); | ||||
|  | ||||
| 		glBlendFunc(GL_CONSTANT_COLOR, GL_ONE_MINUS_CONSTANT_COLOR); | ||||
| @@ -236,6 +491,7 @@ void Engine::DisplayCrosshair() { | ||||
| void Engine::DisplayCurrentItem() { | ||||
| } | ||||
|  | ||||
|  | ||||
| void Engine::DisplayHud(int timer) { | ||||
| 	glBindTexture(GL_TEXTURE_2D, 0); | ||||
| 	glLoadIdentity(); | ||||
| @@ -249,7 +505,7 @@ void Engine::DisplayHud(int timer) { | ||||
| 	float playerHp = m_player.GetHP(); | ||||
| 	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); | ||||
| 	glBegin(GL_QUADS); | ||||
| 		glVertex2f(fPosX, fPosY - fBarHeight);				// Bas-Gauche | ||||
| @@ -258,7 +514,7 @@ void Engine::DisplayHud(int timer) { | ||||
| 		glVertex2f(fPosX, fPosY);							// Haut-Gauche | ||||
| 	glEnd(); | ||||
|  | ||||
| 	//TODO: Associer avec m<>chanique de vie du joueur | ||||
| 	//TODO: Associer avec m<>chanique de vie du joueur | ||||
|  | ||||
| 	// Barre HP | ||||
| 	glColor3f(0.0f * facteurOmbrage, 1.0f * facteurOmbrage, 0.0f * facteurOmbrage); | ||||
| @@ -269,7 +525,7 @@ void Engine::DisplayHud(int timer) { | ||||
| 		glVertex2f(fPosX, fPosY);										// Haut-Gauche | ||||
| 	glEnd(); | ||||
|  | ||||
| 	// Barre <20>quip | ||||
| 	// Barre <20>quip | ||||
| 	glEnable(GL_BLEND); | ||||
| 	glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | ||||
| 	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); | ||||
| 	glEnd(); | ||||
|  | ||||
| 	glDisable(GL_BLEND); | ||||
| 	//glDisable(GL_BLEND); | ||||
|  | ||||
| 	// Username | ||||
| 	glEnable(GL_BLEND); | ||||
| @@ -327,7 +583,7 @@ void Engine::DisplayInfo(float elapsedTime, BlockType bloc) { | ||||
| 	ss << " To-Be-Deleted Chunks : " << m_world.GettbDeleted(); | ||||
| 	PrintText(x, Height() - (Height() / 10.7), scale, 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()); | ||||
| 	ss.str(""); | ||||
| 	ss << " Direction : " << m_player.GetDirection(); | ||||
| @@ -352,6 +608,7 @@ void Engine::DrawHud(float elapsedTime, BlockType bloc) { | ||||
|  | ||||
| 	glBlendFunc(GL_SRC_ALPHA, GL_ONE); | ||||
| 	glBlendEquation(GL_FUNC_ADD); | ||||
| 	glEnable(GL_BLEND); | ||||
|  | ||||
| 	glMatrixMode(GL_PROJECTION); | ||||
| 	glPushMatrix(); | ||||
| @@ -443,6 +700,16 @@ int Engine::GetCountdown(float elapsedTime) { | ||||
| } | ||||
|  | ||||
| void Engine::Render(float elapsedTime) { | ||||
| 	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | ||||
|  | ||||
| 	m_time_SplashScreen += elapsedTime; | ||||
| 	if(m_time_SplashScreen < 2) | ||||
| 	DrawSplachScreen(); | ||||
| 	else if (m_gamestate == GameState::PLAY) | ||||
| 	{ | ||||
| 		HideCursor(); | ||||
| 		CenterMouse(); //D<>placement de centermouse dans l'action de jouer | ||||
|  | ||||
| 		//static float gameTime = elapsedTime; | ||||
| 		static irrklang::ISound* step; // Pour les sons de pas. | ||||
| 		static float pollTime = 0; | ||||
| @@ -457,7 +724,6 @@ void Engine::Render(float elapsedTime) { | ||||
| 		Transformation all; | ||||
| 		Transformation skybox; | ||||
| 		Vector3f vstep; | ||||
| 	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | ||||
|  | ||||
| 		// Transformations initiales | ||||
| 		glMatrixMode(GL_MODELVIEW); | ||||
| @@ -474,16 +740,16 @@ void Engine::Render(float elapsedTime) { | ||||
| 				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); | ||||
| 				m_audio.Create3DAudioObj(step, AUDIO_PATH "step.wav", vstep, m_player.GetVelocity(), false,.8f); | ||||
| 				leftright = !leftright; | ||||
| 				break; | ||||
| 			case Player::Sound::FALL: | ||||
| 			m_audio.Create3DAudioObj(step, AUDIO_PATH "hit.wav", m_player.GetPosition(), m_player.GetVelocity(), 1.f); | ||||
| 				m_audio.Create3DAudioObj(step, AUDIO_PATH "hit.wav", m_player.GetPosition(), m_player.GetVelocity(), false,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) | ||||
| 			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; | ||||
| 		} | ||||
|  | ||||
| @@ -495,7 +761,7 @@ void Engine::Render(float elapsedTime) { | ||||
| 		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. | ||||
| 		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) { | ||||
| @@ -507,28 +773,31 @@ void Engine::Render(float elapsedTime) { | ||||
| 						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. | ||||
| 					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()); | ||||
| 					} | ||||
| 			bulletTime = .1f; | ||||
| 			m_audio.Create3DAudioObj(m_powpow, AUDIO_PATH "windowsaccount.wav", m_player.GetPOV(), m_player.GetDirection() * 10, .5f); | ||||
| 			if (m_flash) { // Coupe le rendering et affiche un frame blanc, pour simuler un flash. | ||||
| 				glClearColor(.8f, .8f, .8f, 1.f); | ||||
| 				glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); | ||||
| 				glClearColor(0.f, 0.f, 0.f, 1.f); | ||||
| 				return; | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
| 	else if (m_mouseR) | ||||
| 		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)) { | ||||
| 	for (int x = 0; x < MAX_BULLETS; ++x) { // Array de bullets en jeu. | ||||
| 		if (m_bullets[x]) { | ||||
| 			for (int b = 0; b < BULLET_UPDATES_PER_FRAME; ++b) | ||||
| 				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());			 | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 		m_wrenderer.RenderWorld(&m_world, m_renderCount, m_player.GetPosition(), m_player.GetDirection(), all, m_shader01, m_textureAtlas); | ||||
| @@ -542,13 +811,21 @@ void Engine::Render(float elapsedTime) { | ||||
|  | ||||
| 		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(), 1.f); | ||||
| 			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) { | ||||
| @@ -574,14 +851,15 @@ void Engine::KeyPressEvent(unsigned char key) { | ||||
| 		} | ||||
| 		break; | ||||
| 	case 36: // ESC - Quitter | ||||
| 		Stop(); | ||||
| 		m_gamestate = GameState::MAIN_MENU; | ||||
| 		//Stop(); | ||||
| 		break; | ||||
| 	case 57: // Space - Sauter | ||||
| 		if (!m_keySpace) { | ||||
| 			m_keySpace = true; | ||||
| 		} | ||||
| 		break; | ||||
| 	case 94: // F10 - Plein <20>cran | ||||
| 	case 94: // F10 - Plein <20>cran | ||||
| 		IsFullscreen() ? SetFullscreen(false) : SetFullscreen(true); | ||||
| 		//SetFullscreen(!IsFullscreen()); | ||||
| 		break; | ||||
| @@ -591,7 +869,7 @@ void Engine::KeyPressEvent(unsigned char key) { | ||||
| 		break; | ||||
| 	case 10: // K - Debugging DisplayNotification() | ||||
| 		m_keyK = true; | ||||
| 		m_messageNotification = "notifications systeme peuvent <20>tre affich<63>"; | ||||
| 		m_messageNotification = "notifications systeme peuvent <20>tre affich<63>"; | ||||
| 		break; | ||||
| 	case 11: // L - Debugging DisplayNotification() | ||||
| 		m_keyL = true; | ||||
| @@ -604,6 +882,8 @@ void Engine::KeyPressEvent(unsigned char key) { | ||||
| 		break; | ||||
| 	case 8: // I - Ignorer | ||||
| 		break; | ||||
| 	case 15: // P - Ignorer | ||||
| 		break; | ||||
| 	case 17: // R - Ignorer | ||||
| 		break; | ||||
| 	case 19: // T - Ignorer | ||||
| @@ -653,6 +933,17 @@ void Engine::KeyReleaseEvent(unsigned char key) { | ||||
| 	case 12: // M - Toggle music | ||||
| 		m_audio.ToggleMusicState(); | ||||
| 		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 | ||||
| 		m_isSkybox = !m_isSkybox; | ||||
| 		break; | ||||
| @@ -683,18 +974,22 @@ void Engine::MouseMoveEvent(int x, int y) { | ||||
| 	m_player.TurnLeftRight(x - (Width() / 2)); | ||||
| 	m_player.TurnTopBottom(y - (Height() / 2)); | ||||
|  | ||||
| 	// 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 | ||||
| 	// dans une boucle infinie o<> l'appel <20> CenterMouse g<>n<EFBFBD>re un | ||||
| 	// 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 | ||||
| 	// dans une boucle infinie o<> l'appel <20> CenterMouse g<>n<EFBFBD>re un | ||||
| 	// MouseMoveEvent, qui rapelle CenterMouse qui rapelle un autre | ||||
| 	// MouseMoveEvent, etc | ||||
| 	if (x == (Width() / 2) && y == (Height() / 2)) | ||||
| 		return; | ||||
|  | ||||
| 	CenterMouse(); | ||||
| } | ||||
|  | ||||
| void Engine::MousePressEvent(const MOUSE_BUTTON& button, int x, int y) { | ||||
| 	m_mousemx = x; | ||||
| 	m_mousemy = y; | ||||
|  | ||||
| 	if (m_gamestate == GameState::PLAY) | ||||
| 	{ | ||||
| 		switch (button) { | ||||
| 		case MOUSE_BUTTON_LEFT: | ||||
| 			m_mouseL = true; | ||||
| @@ -713,6 +1008,14 @@ void Engine::MousePressEvent(const MOUSE_BUTTON& button, int x, int y) { | ||||
| 			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; | ||||
| 	} | ||||
| } | ||||
|  | ||||
| void Engine::MouseReleaseEvent(const MOUSE_BUTTON& button, int x, int y) { | ||||
|   | ||||
| @@ -24,6 +24,8 @@ class Engine : public OpenglContext { | ||||
| public: | ||||
|     Engine(); | ||||
|     virtual ~Engine(); | ||||
|     virtual void DrawMenu(); | ||||
|     virtual void DrawSplachScreen(); | ||||
|     virtual void Init(); | ||||
|     virtual void DeInit(); | ||||
|     virtual void LoadResource(); | ||||
| @@ -70,15 +72,29 @@ private: | ||||
|     Skybox m_skybox; | ||||
|     Audio m_audio = Audio(AUDIO_PATH "start.wav"); | ||||
|  | ||||
|     irrklang::ISound* m_powpow; | ||||
|     irrklang::ISound* m_scream; | ||||
|     irrklang::ISound* m_powpow, | ||||
|         * m_scream; | ||||
|     irrklang::ISound *m_whoosh[MAX_BULLETS]; | ||||
|  | ||||
|     Player m_player = Player(Vector3f(.5f, CHUNK_SIZE_Y + 1.8f, .5f)); | ||||
|      | ||||
|     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_time = 0; | ||||
|     float m_time_SplashScreen = 0; | ||||
|     float m_Width = 0; | ||||
|     float m_Height = 0; | ||||
|  | ||||
|     int m_renderCount = 0; | ||||
|     int m_countdown = COUNTDOWN; | ||||
| @@ -105,6 +121,9 @@ private: | ||||
|     bool m_mouseC = false; | ||||
|     bool m_mouseWU = false; | ||||
|     bool m_mouseWD = false; | ||||
|     //Pour trouver ou est la souris | ||||
|     float m_mousemx = 0; | ||||
|     float m_mousemy = 0; | ||||
|  | ||||
|     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 *= light; | ||||
|    texel.a = 255; | ||||
|    texel.a = 255.; | ||||
|     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) | ||||
| { | ||||
|     m_title = title; | ||||
| @@ -22,12 +23,13 @@ bool OpenglContext::Start(const std::string& title, int width, int height, bool | ||||
|  | ||||
|     while (m_app.isOpen()) | ||||
|     { | ||||
|  | ||||
|             clock.restart(); | ||||
|  | ||||
|             sf::Event Event; | ||||
|             while (m_app.pollEvent(Event)) | ||||
|             { | ||||
|             switch(Event.type) | ||||
|                 switch (Event.type) | ||||
|                 { | ||||
|                 case sf::Event::Closed: | ||||
|                     m_app.close(); | ||||
| @@ -51,7 +53,7 @@ bool OpenglContext::Start(const std::string& title, int width, int height, bool | ||||
|                     MouseReleaseEvent(ConvertMouseButton(Event.mouseButton.button), Event.mouseButton.x, Event.mouseButton.y); | ||||
|                     break; | ||||
|                 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); | ||||
|                     else | ||||
|                         MousePressEvent(MOUSE_BUTTON_WHEEL_DOWN, Event.mouseButton.x, Event.mouseButton.y); | ||||
| @@ -68,7 +70,7 @@ bool OpenglContext::Start(const std::string& title, int width, int height, bool | ||||
|  | ||||
|             // Handle ourself frame rate limit, sf::Window::setFramerateLimit doesn't seems to work | ||||
|             float waitTime = (1.f / m_maxFps) - m_lastFrameTime; | ||||
|         if(waitTime > 0) | ||||
|             if (waitTime > 0) | ||||
|             { | ||||
|                 sf::sleep(sf::seconds(waitTime)); | ||||
|  | ||||
|   | ||||
| @@ -4,6 +4,7 @@ | ||||
| #include <string> | ||||
| #include <SFML/Window.hpp> | ||||
| #include "define.h" | ||||
| #include "texture.h" | ||||
|  | ||||
| // Documentation de SFML: http://www.sfml-dev.org/documentation/index-fr.php | ||||
| class OpenglContext | ||||
| @@ -31,7 +32,6 @@ public: | ||||
|     virtual void MousePressEvent(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 Stop(); | ||||
|  | ||||
|   | ||||
| @@ -211,3 +211,4 @@ void WorldRenderer::UpdateWorld(World* origin, const Vector3f& player, BlockInfo | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user