Merge branch 'master' into SQC-18_Mecanique_de_combat

This commit is contained in:
Jonathan Trottier 2023-10-30 12:38:42 -04:00
commit ada9330588
32 changed files with 931 additions and 299 deletions

5
.gitignore vendored
View File

@ -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

View File

@ -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;
}

View File

@ -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:

View File

@ -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

View File

@ -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);
}

View File

@ -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);

View 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)

View File

@ -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;
}

View File

@ -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);

View File

@ -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) {

View File

@ -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);

View 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}
)

View File

@ -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__

View File

View File

@ -0,0 +1 @@

File diff suppressed because it is too large Load Diff

View File

@ -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();
@ -36,7 +38,7 @@ public:
virtual void MouseReleaseEvent(const MOUSE_BUTTON &button, int x, int y);
private:
float GetScale() const;
std::pair<float, float> GetScale() const;
int GetFps(float elapsedTime) const;
int GetCountdown(float elapsedTime);
@ -49,11 +51,13 @@ private:
void DisplayNotification(std::string message);
void ProcessNotificationQueue();
void DisplayCrosshair();
void DisplayPovGun();
void DisplayCurrentItem();
void DisplayHud(int timer);
void DisplayInfo(float elapsedTime, BlockType bloc);
void DisplaySingleOrMultiplayerMenu();
void DrawHud(float elapsedTime, BlockType bloc);
void PrintText(float x, float y, float scale, const std::string& t);
void PrintText(float x, float y, const std::string& t, float charSizeMultiplier = 1.0f);
Connector m_conn;
Shader m_shader01;
@ -63,23 +67,40 @@ private:
World m_world = World();
WorldRenderer m_wrenderer = WorldRenderer();
Texture m_textureSkybox;
Texture m_textureFont;
Texture m_textureCrosshair;
Texture m_textureFont;
Texture m_textureGun;
Texture m_texturePovGun;
Texture m_textureSkybox;
Texture m_textureSoloMultiMenu;
Texture m_textureTitle;
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;
@ -94,6 +115,7 @@ private:
bool m_displayHud = true;
bool m_displayInfo = false;
bool m_resetcountdown = false;
bool m_soloMultiChoiceMade = true;
bool m_stopcountdown = false;
bool m_keyK = false;
@ -108,6 +130,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 = "";
};

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 KiB

View File

@ -7,7 +7,7 @@ void main()
texel = texture2D(tex,gl_TexCoord[0].st);
texel *= light;
texel.a = 255;
texel.a = 255.;
gl_FragColor = texel;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -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));

View File

@ -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();

View File

@ -8,30 +8,30 @@ void Skybox::Init(float size){
int count = 0;
VertexBuffer::VertexData* vd = new VertexBuffer::VertexData[24];
vd[count++] = VertexBuffer::VertexData(size, -size, size, 1.f, 1.f, 1.f, 0.f, .5f);
vd[count++] = VertexBuffer::VertexData(-size, -size, size, 1.f, 1.f, 1.f, .25f, .5f);
vd[count++] = VertexBuffer::VertexData(-size, size, size, 1.f, 1.f, 1.f, .25f, .75f);
vd[count++] = VertexBuffer::VertexData(size, size, size, 1.f, 1.f, 1.f, 0.f, .75f);
vd[count++] = VertexBuffer::VertexData(size, -size, size, 1.f, 1.f, 1.f, 0.f, .5f);
vd[count++] = VertexBuffer::VertexData(-size, -size, size, 1.f, 1.f, 1.f, .25f, .5f);
vd[count++] = VertexBuffer::VertexData(-size, -size, -size, 1.f, 1.f, 1.f, .5f, .5f);
vd[count++] = VertexBuffer::VertexData(-size, size, -size, 1.f, 1.f, 1.f, .5f, .75f);
vd[count++] = VertexBuffer::VertexData(-size, size, size, 1.f, 1.f, 1.f, .25f, .75f);
vd[count++] = VertexBuffer::VertexData(-size, -size, size, 1.f, 1.f, 1.f, .25f, .5f);
vd[count++] = VertexBuffer::VertexData(-size, -size, -size, 1.f, 1.f, 1.f, .5f, .5f);
vd[count++] = VertexBuffer::VertexData(size, -size, -size, 1.f, 1.f, 1.f, .75f, .5f);
vd[count++] = VertexBuffer::VertexData(size, size, -size, 1.f, 1.f, 1.f, .75f, .75f);
vd[count++] = VertexBuffer::VertexData(-size, size, -size, 1.f, 1.f, 1.f, .5f, .75f);
vd[count++] = VertexBuffer::VertexData(-size, -size, -size, 1.f, 1.f, 1.f, .5f, .5f);
vd[count++] = VertexBuffer::VertexData(size, -size, -size, 1.f, 1.f, 1.f, .75f, .5f);
vd[count++] = VertexBuffer::VertexData(size, -size, size, 1.f, 1.f, 1.f, 1.f, .5f);
vd[count++] = VertexBuffer::VertexData(size, size, size, 1.f, 1.f, 1.f, 1.f, .75f);
vd[count++] = VertexBuffer::VertexData(size, size, -size, 1.f, 1.f, 1.f, .75f, .75f);
vd[count++] = VertexBuffer::VertexData(size, -size, -size, 1.f, 1.f, 1.f, .75f, .5f);
vd[count++] = VertexBuffer::VertexData(size, size, -size, 1.f, 1.f, 1.f, .25f, 1.f);
vd[count++] = VertexBuffer::VertexData(size, size, size, 1.f, 1.f, 1.f, .5f, 1.f);
vd[count++] = VertexBuffer::VertexData(-size, size, size, 1.f, 1.f, 1.f, .5f, .75f);
vd[count++] = VertexBuffer::VertexData(-size, size, -size, 1.f, 1.f, 1.f, .25f, .75f);
vd[count++] = VertexBuffer::VertexData(size, size, size, 1.f, 1.f, 1.f, .25f, 1.f);
vd[count++] = VertexBuffer::VertexData(-size, size, size, 1.f, 1.f, 1.f, .25f, .75f);
vd[count++] = VertexBuffer::VertexData(-size, size, -size, 1.f, 1.f, 1.f, .5f, .75f);
vd[count++] = VertexBuffer::VertexData(size, size, -size, 1.f, 1.f, 1.f, .5f, 1.f);
vd[count++] = VertexBuffer::VertexData(-size, -size, size, 1.f, 1.f, 1.f, .5f, .25f);
vd[count++] = VertexBuffer::VertexData(size, -size, size, 1.f, 1.f, 1.f, .75f, .25f);

View File

@ -211,3 +211,4 @@ void WorldRenderer::UpdateWorld(World* origin, const Vector3f& player, BlockInfo
}
}
}