bulletadd
This commit is contained in:
@@ -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;
|
||||
|
Reference in New Issue
Block a user