bulletadd

This commit is contained in:
MarcEricMartel
2023-12-05 06:25:48 -05:00
parent c5700ae9fd
commit 2446b90bff
8 changed files with 304 additions and 47 deletions

View File

@@ -1362,7 +1362,7 @@ void Engine::Render(float elapsedTime) {
Sync sync;
uint64_t id = m_conn.getId();
static std::vector<char*> lsPck;
static int sync_acc = 0;
static int sync_acc = 0, cmod_acc = 0;
if (cmod)
m_chunkmod_manifest.emplace_back(cmod);
@@ -1371,6 +1371,7 @@ void Engine::Render(float elapsedTime) {
last = tstamp;
sync_acc += tstamp - last;
cmod_acc += tstamp - last;
if (sync_acc >= 1000) {
sync_acc -= 1000;
@@ -1385,6 +1386,16 @@ void Engine::Render(float elapsedTime) {
m_syncs[sync.timestamp] = sync;
}
if (cmod_acc >= 1000) {
cmod_acc -= 1000;
if (!m_chunkmod_manifest.empty()) {
ChunkMod* cmod = m_chunkmod_manifest.front();
m_chunkmod_manifest.pop_front();
m_world.ChangeBlockAtPosition(cmod->old_b_type, cmod->pos);
delete cmod;
}
}
input.sid = id;
input.direction = m_player.GetDirection();
input.timestamp = tstamp;
@@ -1401,8 +1412,7 @@ void Engine::Render(float elapsedTime) {
lsPck = recvPacks(m_conn.m_sock_udp, &m_buf);
char* prevptr = nullptr;
for (auto& pck : lsPck) { // We could make a few threads out of this.
Sync sync;
Output out;
Sync sync; Output out; ChunkMod cmod; BulletAdd bull;
if (!prevptr)
prevptr = m_buf.ptr;
uint32_t bsize = m_buf.len - (pck - prevptr);
@@ -1447,6 +1457,33 @@ void Engine::Render(float elapsedTime) {
rt->Feed(out);
}
break;
case CHUNKMOD:
if (Deserialize(&cmod, pck, &bsize)) {
if (!std::erase_if(m_chunkmod_manifest, // Efface le chunkmod du manifeste s'il est dedans et reset le countdown, sinon fait la modification.
[cmod](ChunkMod* c) {
return cmod.pos == c->pos &&
cmod.b_type == c->b_type &&
cmod.old_b_type == c->old_b_type;
}))
m_world.ChangeBlockAtPosition(cmod.b_type, cmod.pos);
else cmod_acc = 0;
}
break;
case BULLET:
if (Deserialize(&bull, pck, &bsize)) {
Bullet* bult = new Bullet(bull.pos, bull.dir, bull.id);
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] = bult;
break;
}
else if (x == MAX_BULLETS - 1) { // S'il y a pas d'espace dans l'array, prendre la place de la première balle de l'array.
m_bullets[0]->~Bullet();
m_bullets[0] = bult;
}
m_audio.Create3DAudioObj(m_powpow, AUDIO_PATH "pow.wav", bull.pos, bull.dir * 10, false, .5f);
}
break;
default:
std::cout << "packet be no good.";
break;

View File

@@ -5,6 +5,7 @@
#include <chrono>
#include <cmath>
#include <unordered_map>
#include <set>
#include "../SQCSim-common/array2d.h"
#include "../SQCSim-common/blockinfo.h"
#include "../SQCSim-common/boostinfo.h"
@@ -87,8 +88,6 @@ private:
Bullet* m_bullets[MAX_BULLETS];
//Menu
enum class GameState: uint8_t { MAIN_MENU, OPTIONS, QUIT, NEWG, PLAY, PAUSE, SINGLEMULTI };
Vector3f m_otherplayerpos = Vector3f(999, 999, 999);
World m_world = World();
@@ -172,7 +171,7 @@ private:
bool m_selectedOptAudioMainBar = false;
bool m_selectedOptAudioMusicBar = false;
bool m_selectedOptAudioSfxBar = false;
bool m_selectedOptAudioSfxBar = false;
bool m_selectedGameplaySensitivityBar = false;
bool m_damage = false;
@@ -214,7 +213,7 @@ private:
bool m_networkgame = false;
Connector m_conn;
std::vector<netprot::ChunkMod*> m_chunkmod_manifest;
std::deque<netprot::ChunkMod*> m_chunkmod_manifest;
std::chrono::high_resolution_clock::time_point m_startTime;
std::unordered_map<uint64_t, Player*> m_players;
netprot::Buffer m_buf, m_bufout;