Timer iznogoud.
This commit is contained in:
parent
9c1cd885cf
commit
c975265901
@ -3,7 +3,7 @@
|
||||
|
||||
Bullet::Bullet(Vector3f pos, Vector3f dir) : m_startpos(pos), m_currentpos(pos), m_velocity(dir) {}
|
||||
|
||||
Bullet::Bullet(Vector3f pos, Vector3f dir, uint64_t tid): m_startpos(pos), m_currentpos(pos), m_velocity(dir), m_tid(tid) {}
|
||||
Bullet::Bullet(Vector3f pos, Vector3f dir, uint64_t shooter_id): m_startpos(pos), m_currentpos(pos), m_velocity(dir), m_shooter_id(shooter_id) {}
|
||||
|
||||
Bullet::~Bullet() {}
|
||||
|
||||
@ -14,8 +14,19 @@ bool Bullet::Update(World* world, float elapsedtime, int perframe, std::unordere
|
||||
m_currentpos += m_velocity * elapsedtime;
|
||||
|
||||
for (auto& [key, player] : mapPlayer) {
|
||||
if ((m_currentpos - player->GetPosition()).Length() < .4f) {
|
||||
bool hit = false;
|
||||
if ((m_currentpos - player->GetPosition()).Length() < .6f)
|
||||
hit = true;
|
||||
if ((m_currentpos - player->GetPOV()).Length() < .2f) {
|
||||
damage *= 2; // HEADSHOT!
|
||||
hit = true;
|
||||
}
|
||||
if (hit && !player->AmIDead()) {
|
||||
player->InflictDamage(damage);
|
||||
|
||||
if (player->AmIDead())
|
||||
player->Killer = m_shooter_id;
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -56,6 +67,6 @@ Vector3f Bullet::getVel() const {
|
||||
return m_velocity;
|
||||
}
|
||||
|
||||
uint64_t Bullet::getTeamID(){
|
||||
return m_tid;
|
||||
}
|
||||
//uint64_t Bullet::getTeamID(){
|
||||
// return m_tid;
|
||||
//}
|
||||
|
@ -20,13 +20,13 @@ public:
|
||||
void Transpose(int& x, int& z);
|
||||
Vector3f getPos() const;
|
||||
Vector3f getVel() const;
|
||||
uint64_t getTeamID();
|
||||
//uint64_t getTeamID();
|
||||
|
||||
private:
|
||||
Vector3f m_startpos,
|
||||
m_currentpos,
|
||||
m_velocity;
|
||||
uint64_t m_tid = 0;
|
||||
uint64_t m_shooter_id = 0;
|
||||
|
||||
|
||||
};
|
||||
|
@ -447,7 +447,7 @@ void netprot::Serialize(BulletAdd* bull, char* buf[], uint32_t* buflen) {
|
||||
|
||||
memcpy(*buf + 1, ts8, sizeof(uint64_t));
|
||||
|
||||
uint64_t tid = bull->tid;
|
||||
uint64_t tid = bull->id;
|
||||
uint8_t tid8[sizeof(uint64_t)] = {
|
||||
(uint8_t)((tid >> 56) & 0xFF),
|
||||
(uint8_t)((tid >> 48) & 0xFF),
|
||||
@ -964,7 +964,7 @@ bool netprot::Deserialize(BulletAdd* bull, char* buf, uint32_t* buflen) {
|
||||
(uint64_t)tst[7];
|
||||
|
||||
memcpy(tst, &buf[1 + sizeof(uint64_t)], sizeof(uint64_t));
|
||||
bull->tid =
|
||||
bull->id =
|
||||
(uint64_t)tst[0] << 56 |
|
||||
(uint64_t)tst[1] << 48 |
|
||||
(uint64_t)tst[2] << 40 |
|
||||
|
@ -282,20 +282,17 @@ bool Player::AmIDead()
|
||||
}
|
||||
|
||||
|
||||
void Player::InflictDamage(float hitPoints)
|
||||
{
|
||||
|
||||
void Player::InflictDamage(float hitPoints) {
|
||||
m_hp -= hitPoints;
|
||||
|
||||
|
||||
if (AmIDead())
|
||||
{ // Quand le joueur est mort.
|
||||
|
||||
|
||||
|
||||
}
|
||||
//if (AmIDead())
|
||||
//{ // Quand le joueur est mort.
|
||||
//}
|
||||
}
|
||||
|
||||
int Player::getScore() const { return m_score; }
|
||||
|
||||
void Player::addPoint() { ++m_score; }
|
||||
|
||||
|
||||
uint64_t Player::getId() const { return id; }
|
||||
|
||||
|
@ -37,6 +37,9 @@ public:
|
||||
|
||||
bool AmIDead();
|
||||
void InflictDamage(float hitPoints);
|
||||
int getScore() const;
|
||||
void addPoint();
|
||||
uint64_t Killer = 0;
|
||||
|
||||
private:
|
||||
uint64_t getId() const;
|
||||
@ -48,6 +51,7 @@ protected:
|
||||
|
||||
std::string m_username;
|
||||
uint64_t id = 0;
|
||||
int m_score = 0;
|
||||
|
||||
float m_rotX = 0;
|
||||
float m_rotY = 0;
|
||||
|
@ -137,9 +137,19 @@ Timestamp Connection::Run(World* world) {
|
||||
in.keys.right,
|
||||
in.keys.jump, false, el), world, el);
|
||||
|
||||
if (player->GetPosition().y < -10.) {
|
||||
player->InflictDamage(9000);
|
||||
player->Killer = GetHash(true);
|
||||
}
|
||||
|
||||
out.states.jumping = in.keys.jump;
|
||||
out.states.running = player->GetVelocity().Length() > .3f;
|
||||
out.states.dead = player->AmIDead();
|
||||
|
||||
if (player->AmIDead()) {
|
||||
in.keys.shoot = false;
|
||||
in.keys.block = false;
|
||||
out.states.dead = true;
|
||||
}
|
||||
|
||||
if (in.keys.block) {
|
||||
bool block = false;
|
||||
@ -152,7 +162,7 @@ Timestamp Connection::Run(World* world) {
|
||||
}
|
||||
|
||||
if (in.keys.shoot && m_shoot_acc <= 0.) {
|
||||
Bullets.push_back(Bullet(player->GetPOV() + player->GetDirection(), player->GetDirection()));
|
||||
Bullets.emplace_back(new Bullet(player->GetPOV() + player->GetDirection(), player->GetDirection(), GetHash(true)));
|
||||
out.states.shooting = true;
|
||||
}
|
||||
|
||||
|
@ -42,8 +42,8 @@ public:
|
||||
|
||||
bool m_nsync = true;
|
||||
|
||||
std::vector<Bullet> Bullets;
|
||||
std::vector<ChunkMod> ChunkDiffs;
|
||||
std::vector<Bullet*> Bullets;
|
||||
std::vector<ChunkMod*> ChunkDiffs;
|
||||
|
||||
Timestamp GetTStamp() const;
|
||||
|
||||
|
@ -11,13 +11,20 @@
|
||||
#define ID_LIST_SIZE 127
|
||||
#define SRV_MANUAL_SETUP true
|
||||
|
||||
// @ = Dead guy, $ = Killer.
|
||||
const std::vector<std::string> DEATHMESSAGES = { "@ has gone to meet their maker.",
|
||||
"@ has bit the dust, if you know what I mean.",
|
||||
"@ has ceased to be.",
|
||||
"@ is no more.",
|
||||
"@ is like, super dead.",
|
||||
"RIP, @.",
|
||||
"Requiescat In Pace, @.",
|
||||
"So long, @, and thanks for all the lols!",
|
||||
"@ has a bad case of being dead." };
|
||||
"@ has a bad case of being dead.",
|
||||
"@ has finally seen the light!",
|
||||
"Thought @ was hot; guess what? He's not. He is dead, dead, dead.",
|
||||
"@ did not want to live forever.",
|
||||
"$ made @ die for their country.",
|
||||
"$ has become death, destroyer of @.",
|
||||
"$ did not make @ feel lucky." };
|
||||
|
||||
#endif
|
||||
|
@ -200,8 +200,8 @@ void Server::Run() {
|
||||
m_world->BuildWorld();
|
||||
|
||||
for (auto& [key, conn] : m_conns) { // Creation des instances de joueurs et premier sync.
|
||||
int x = (rand() % (CHUNK_SIZE_X * WORLD_SIZE_X - 1)) - (CHUNK_SIZE_X * WORLD_SIZE_X / 2),
|
||||
y = (rand() % (CHUNK_SIZE_Y * WORLD_SIZE_Y - 1)) - (CHUNK_SIZE_Y * WORLD_SIZE_Y / 2);
|
||||
int x = 0,// (rand() % (CHUNK_SIZE_X * WORLD_SIZE_X - 1)),// -(CHUNK_SIZE_X * WORLD_SIZE_X / 2),
|
||||
y = 0;// (rand() % (CHUNK_SIZE_Y * WORLD_SIZE_Y - 1));// -(CHUNK_SIZE_Y * WORLD_SIZE_Y / 2);
|
||||
conn->player = new Player(Vector3f(x + .5f, CHUNK_SIZE_Y + 1.8f, y + .5f));
|
||||
m_players[key] = conn->player;
|
||||
Sync sync;
|
||||
@ -270,8 +270,10 @@ void Server::Run() {
|
||||
if (conn->player->AmIDead()) {
|
||||
Chat chat;
|
||||
chat.dest_id = chat.dest_team_id = chat.src_id = 0;
|
||||
|
||||
std::string killer = m_conns.at(key)->player->GetUsername();
|
||||
|
||||
strcpy(chat.mess, getDeathMessage(conn->player->GetUsername()).c_str());
|
||||
strcpy(chat.mess, getDeathMessage(conn->player->GetUsername(), killer).c_str());
|
||||
|
||||
m_chatlog[tstamp] = chat;
|
||||
|
||||
@ -285,9 +287,10 @@ void Server::Run() {
|
||||
|
||||
for (auto& bull : conn->Bullets) {
|
||||
bullets.emplace_back(bull);
|
||||
Log("POW!", false, false);
|
||||
BulletAdd* nbul = new BulletAdd();
|
||||
nbul->pos = conn->player->GetPosition();
|
||||
nbul->dir = conn->player->GetDirection();
|
||||
nbul->pos = bull->getPos();
|
||||
nbul->dir = bull->getVel();
|
||||
nbul->id = key;
|
||||
nbul->tstamp = tstamp;
|
||||
|
||||
@ -300,10 +303,10 @@ void Server::Run() {
|
||||
|
||||
conn->sendPacks(m_sock_udp, m_conns, timer);
|
||||
}
|
||||
if (deadplayers == players - 1 || timer <= 0)
|
||||
endgame = true;
|
||||
//if (/*(deadplayers == players - 1 && deadplayers != 0) || */timer <= 0)
|
||||
//endgame = true;
|
||||
}
|
||||
|
||||
|
||||
for (auto& bull : netbull)
|
||||
for (auto& [key, conn] : m_conns)
|
||||
if (bull->id != conn->GetHash(false)) // Pour pas repitcher au joueur sa propre balle.
|
||||
@ -319,9 +322,11 @@ void Server::Run() {
|
||||
}
|
||||
}
|
||||
|
||||
for (auto& chat : chatlog)
|
||||
for (auto& [key, conn] : m_conns)
|
||||
for (auto& chat : chatlog) {
|
||||
Log(chat.mess, false, false);
|
||||
for (auto& [key, conn] : m_conns)
|
||||
sendPackTo<Chat>(m_sock_udp, &chat, &m_buf, conn->getAddr());
|
||||
}
|
||||
|
||||
for (auto& chmo : chunkdiffs) {
|
||||
for (auto& [key, conn] : m_conns)
|
||||
@ -420,13 +425,26 @@ uint64_t Server::getUniqueId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
std::string Server::getDeathMessage(std::string username) const {
|
||||
std::string Server::getDeathMessage(std::string username, std::string killer) const {
|
||||
std::string mess;
|
||||
std::string temp = DEATHMESSAGES.at(rand() % DEATHMESSAGES.size());
|
||||
size_t ind = temp.find('@');
|
||||
mess.append(temp.substr(0, ind));
|
||||
mess.append(username));
|
||||
mess.append(temp.substr(ind + 1));
|
||||
size_t indk = temp.find('$');
|
||||
|
||||
if (ind < indk) {
|
||||
mess.append(temp.substr(0, ind));
|
||||
mess.append(username);
|
||||
mess.append(temp.substr(ind + 1, indk));
|
||||
mess.append(killer);
|
||||
mess.append(temp.substr(indk + 1));
|
||||
}
|
||||
else {
|
||||
mess.append(temp.substr(0, indk));
|
||||
mess.append(killer);
|
||||
mess.append(temp.substr(indk + 1, ind));
|
||||
mess.append(username);
|
||||
mess.append(temp.substr(ind + 1));
|
||||
}
|
||||
|
||||
return mess;
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ private:
|
||||
void buildIdList(size_t size);
|
||||
|
||||
uint64_t getUniqueId();
|
||||
std::string getDeathMessage(std::string username) const;
|
||||
std::string getDeathMessage(std::string username, std::string killer) const;
|
||||
|
||||
};
|
||||
|
||||
|
@ -530,12 +530,12 @@ void Engine::DrawHud(float elapsedTime, BlockType bloc) {
|
||||
glPushMatrix();
|
||||
|
||||
int timer = GetCountdown(elapsedTime);
|
||||
for (int i = 1; i < WORLD_SIZE_X; i++) {
|
||||
/*for (int i = 1; i < WORLD_SIZE_X; i++) {
|
||||
if (timer <= COUNTDOWN - m_timerReductionChunk * i) {
|
||||
m_world.RemoveChunk(m_nbReductionChunk * i);
|
||||
m_renderer.RemoveChunk(m_nbReductionChunk * i);
|
||||
}
|
||||
}
|
||||
}*/
|
||||
if (m_keyK) {
|
||||
SystemNotification(m_messageNotification);
|
||||
m_keyK = false;
|
||||
@ -663,8 +663,8 @@ int Engine::GetCountdown(float elapsedTime) {
|
||||
m_countdown = m_time + COUNTDOWN;
|
||||
m_resetcountdown = false;
|
||||
}
|
||||
if (m_countdown < m_time)
|
||||
Stop();
|
||||
if (m_countdown < m_time) {}
|
||||
//Stop();
|
||||
if (!m_stopcountdown)
|
||||
m_time += elapsedTime;
|
||||
return m_countdown - (int)m_time;
|
||||
@ -1409,10 +1409,12 @@ void Engine::Render(float elapsedTime) {
|
||||
|
||||
sendPackTo<Input>(m_conn.m_sock_udp, &input, &m_bufout, &m_conn.m_srvsockaddr);
|
||||
|
||||
std::cout << ".";
|
||||
|
||||
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; ChunkMod cmod; BulletAdd bull;
|
||||
Sync sync; Output out; ChunkMod cmod; BulletAdd bull; Chat chat;
|
||||
if (!prevptr)
|
||||
prevptr = m_buf.ptr;
|
||||
uint32_t bsize = m_buf.len - (pck - prevptr);
|
||||
@ -1420,9 +1422,10 @@ void Engine::Render(float elapsedTime) {
|
||||
switch (getType(pck, 1)) {
|
||||
using enum PACKET_TYPE;
|
||||
case SYNC:
|
||||
std::cout << "snyc";
|
||||
if (Deserialize(&sync, pck, &bsize)) {
|
||||
if (sync.sid != m_conn.getId()) {
|
||||
std::cout << "syncsid be no good.";
|
||||
SystemNotification("syncsid be no good.");
|
||||
break;
|
||||
}
|
||||
if (m_syncs.count(sync.timestamp)) {
|
||||
@ -1439,18 +1442,18 @@ void Engine::Render(float elapsedTime) {
|
||||
m_player.Move(-diff);
|
||||
}
|
||||
|
||||
// TODO: Syncer sync.timer avec le timer
|
||||
m_countdown = sync.timer;
|
||||
|
||||
m_syncs.erase(sync.timestamp);
|
||||
}
|
||||
else std::cout << "sync be no good.";
|
||||
else SystemNotification("sync be no good.");
|
||||
}
|
||||
break;
|
||||
case OUTPUT:
|
||||
std::cout << "out";
|
||||
if (Deserialize(&out, pck, &bsize)) {
|
||||
if (!m_players.contains(out.id)) {
|
||||
|
||||
std::cout << out.id << " is id no good." << std::endl;
|
||||
SystemNotification(std::to_string(out.id).append(" is id no good."));
|
||||
break;
|
||||
}
|
||||
RemotePlayer* rt = static_cast<RemotePlayer*>(m_players[out.id]);
|
||||
@ -1458,6 +1461,7 @@ void Engine::Render(float elapsedTime) {
|
||||
}
|
||||
break;
|
||||
case CHUNKMOD:
|
||||
std::cout << "cmod";
|
||||
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) {
|
||||
@ -1468,10 +1472,12 @@ void Engine::Render(float elapsedTime) {
|
||||
m_world.ChangeBlockAtPosition(cmod.b_type, cmod.pos);
|
||||
else cmod_acc = 0;
|
||||
}
|
||||
else SystemNotification("cmod iznogoud.");
|
||||
break;
|
||||
case BULLET:
|
||||
std::cout << "pow";
|
||||
if (Deserialize(&bull, pck, &bsize)) {
|
||||
Bullet* bult = new Bullet(bull.pos, bull.dir, bull.id);
|
||||
Bullet* bult = new Bullet(bull.pos, bull.dir);
|
||||
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;
|
||||
@ -1483,14 +1489,23 @@ void Engine::Render(float elapsedTime) {
|
||||
}
|
||||
m_audio.Create3DAudioObj(m_powpow, AUDIO_PATH "pow.wav", bull.pos, bull.dir * 10, false, .5f);
|
||||
}
|
||||
else SystemNotification("Bullet is kraput.");
|
||||
break;
|
||||
case CHAT:
|
||||
std::cout << "cat";
|
||||
if (Deserialize(&chat, pck, &bsize))
|
||||
SystemNotification(chat.mess);
|
||||
else SystemNotification("Chat iznogoud.");
|
||||
break;
|
||||
default:
|
||||
std::cout << "packet be no good.";
|
||||
std::cout << "wtf";
|
||||
SystemNotification("packet be no good.");
|
||||
break;
|
||||
}
|
||||
}
|
||||
lsPck.clear();
|
||||
|
||||
|
||||
glDisable(GL_CULL_FACE);
|
||||
for (auto& [key, player] : m_players) {
|
||||
RemotePlayer* rt = static_cast<RemotePlayer*>(player);
|
||||
@ -1607,6 +1622,8 @@ void Engine::KeyPressEvent(unsigned char key) {
|
||||
}
|
||||
break;
|
||||
case 36: // ESC - Quitter
|
||||
if (m_networkgame)
|
||||
break;
|
||||
if (m_gamestate == GameState::PLAY) {
|
||||
m_gamestate = GameState::PAUSE;
|
||||
}
|
||||
|
@ -99,7 +99,7 @@ private:
|
||||
BlockInfo* m_blockinfo[BTYPE_LAST];
|
||||
BoostInfo* m_boostinfo[BTYPE_BOOST_LAST];
|
||||
|
||||
GameState m_gamestate = GameState::SPLASH;
|
||||
GameState m_gamestate = GameState::PLAY;
|
||||
|
||||
Shader m_shader01;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user