switch to player bullet state
This commit is contained in:
parent
f93135b20f
commit
d7abbcb5c7
@ -78,7 +78,7 @@ void Client::drawPlayer(player_t *player) {
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, player->team->color);
|
||||
glMatrixMode( GL_MODELVIEW);
|
||||
glPushMatrix();
|
||||
glTranslated(player->x, player->y, player->z);
|
||||
glMultMatrixf(player->m);
|
||||
glEnableClientState( GL_VERTEX_ARRAY);
|
||||
glEnableClientState( GL_TEXTURE_COORD_ARRAY);
|
||||
glEnableClientState( GL_NORMAL_ARRAY);
|
||||
@ -328,7 +328,7 @@ void Client::accelerate(double x, double y, double z) {
|
||||
m << msg;
|
||||
network.send(m);
|
||||
}
|
||||
|
||||
#if 0
|
||||
void Client::drop_bomb(double rx, double ry, double rz, double ttl) {
|
||||
bomb_drop_meesage_t msg;
|
||||
msg.x = game.local_player->x + rx * 20;
|
||||
@ -342,7 +342,7 @@ void Client::drop_bomb(double rx, double ry, double rz, double ttl) {
|
||||
m << msg;
|
||||
network.send(m);
|
||||
}
|
||||
|
||||
#endif
|
||||
void Client::loadConsoleFont() {
|
||||
GLuint font_id = 0;
|
||||
|
||||
@ -453,23 +453,25 @@ void Client::update() {
|
||||
} else if (glfwGetKey('D')) {
|
||||
accelerate(-rz * v, 0, rx * v);
|
||||
}
|
||||
|
||||
#if 0
|
||||
if (glfwGetKey(GLFW_KEY_SPACE)) {
|
||||
accelerate(game.local_player->vx * -0.1, game.local_player->vy
|
||||
* -0.1, game.local_player->vz * -0.1);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#if 0
|
||||
if (glfwGetKey(GLFW_KEY_LCTRL)) {
|
||||
if (time - last_bomb > 1.0) {
|
||||
last_bomb = time;
|
||||
drop_bomb(rx, ry, rz, 5.0);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
if (game.local_player) {
|
||||
camX = game.local_player->x;
|
||||
camY = game.local_player->y;
|
||||
camZ = game.local_player->z;
|
||||
camX = game.local_player->m[12];
|
||||
camY = game.local_player->m[13];
|
||||
camZ = game.local_player->m[14];
|
||||
} else {
|
||||
camX = 1000.0;
|
||||
camY = 1000.0;
|
||||
|
@ -36,18 +36,15 @@ void reset_team(Team *team) {
|
||||
}
|
||||
|
||||
void reset_player(player_t *player) {
|
||||
if (player->body.get() == 0)
|
||||
return;
|
||||
if (player->team) {
|
||||
player->x = player->team->x;
|
||||
player->y = player->team->y;
|
||||
player->z = player->team->z;
|
||||
player->body->getWorldTransform().setOrigin(btVector3(player->team->x,
|
||||
player->team->y, player->team->z));
|
||||
} else {
|
||||
player->x = 0;
|
||||
player->y = 0;
|
||||
player->z = 0;
|
||||
player->body->getWorldTransform().setOrigin(btVector3(0, 0, 0));
|
||||
}
|
||||
player->vx = 0.;
|
||||
player->vy = 0.;
|
||||
player->vz = 0.;
|
||||
player->body->setLinearVelocity(btVector3(0, 0, 0));
|
||||
}
|
||||
|
||||
void reset_point(point_t *point) {
|
||||
@ -76,12 +73,12 @@ void setup_player(player_t *player) {
|
||||
player->id = 0;
|
||||
player->status = 0;
|
||||
player->team = NULL;
|
||||
player->x = 0.0;
|
||||
player->y = 0.0;
|
||||
player->z = 0.0;
|
||||
player->vx = 0.0;
|
||||
player->vy = 0.0;
|
||||
player->vz = 0.0;
|
||||
// player->x = 0.0;
|
||||
// player->y = 0.0;
|
||||
// player->z = 0.0;
|
||||
// player->vx = 0.0;
|
||||
// player->vy = 0.0;
|
||||
// player->vz = 0.0;
|
||||
}
|
||||
|
||||
void setup_point(point_t *point) {
|
||||
@ -224,25 +221,24 @@ player_t *Game::spawnPlayer(Team *team) {
|
||||
player->team = team;
|
||||
player->status = 1;
|
||||
player->id = max_player_id++;
|
||||
reset_player(player);
|
||||
|
||||
if (player->body.get() == 0) {
|
||||
std::cout << "[Game] create body" << std::endl;
|
||||
/// Create Dynamic Objects
|
||||
btTransform startTransform;
|
||||
startTransform.setIdentity();
|
||||
startTransform.setOrigin(btVector3(player->x, player->y, player->z));
|
||||
btScalar mass(1.f);
|
||||
btVector3 localInertia(0, 0, 0);
|
||||
shipShape->calculateLocalInertia(mass, localInertia);
|
||||
player->state.reset(new btDefaultMotionState());
|
||||
player->state->setWorldTransform(startTransform);
|
||||
player->state->setWorldTransform(btTransform::getIdentity());
|
||||
btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,
|
||||
player->state.get(), shipShape.get(), localInertia);
|
||||
player->body.reset(new btRigidBody(rbInfo));
|
||||
player->body->setCcdSweptSphereRadius(1.5);
|
||||
dynamicsWorld->addRigidBody(player->body.get());
|
||||
}
|
||||
|
||||
reset_player(player);
|
||||
|
||||
return player;
|
||||
}
|
||||
|
||||
@ -253,25 +249,24 @@ player_t *Game::spawnPlayerWithId(Team *team, uint16_t id) {
|
||||
if (max_player_id < id)
|
||||
max_player_id = id;
|
||||
player->status = 1;
|
||||
reset_player(player);
|
||||
|
||||
if (player->body.get() == 0) {
|
||||
/// Create Dynamic Objects
|
||||
std::cout << "[Game] create body" << std::endl;
|
||||
btTransform startTransform;
|
||||
startTransform.setIdentity();
|
||||
startTransform.setOrigin(btVector3(player->x, player->y, player->z));
|
||||
btScalar mass(1.f);
|
||||
btVector3 localInertia(0, 0, 0);
|
||||
shipShape->calculateLocalInertia(mass, localInertia);
|
||||
player->state.reset(new btDefaultMotionState());
|
||||
player->state->setWorldTransform(startTransform);
|
||||
player->state->setWorldTransform(btTransform::getIdentity());
|
||||
btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,
|
||||
player->state.get(), shipShape.get(), localInertia);
|
||||
player->body.reset(new btRigidBody(rbInfo));
|
||||
player->body->setCcdSweptSphereRadius(1.5);
|
||||
dynamicsWorld->addRigidBody(player->body.get());
|
||||
}
|
||||
|
||||
reset_player(player);
|
||||
|
||||
return player;
|
||||
}
|
||||
|
||||
@ -281,58 +276,22 @@ void Game::update_players(double dt) {
|
||||
player_t *p = &player[i];
|
||||
if (p->status == 0)
|
||||
return;
|
||||
if (master || true) {
|
||||
btTransform wt;
|
||||
p->state->getWorldTransform(wt);
|
||||
p->x = wt.getOrigin().x();
|
||||
p->y = wt.getOrigin().y();
|
||||
p->z = wt.getOrigin().z();
|
||||
btVector3 v = p->body->getLinearVelocity();
|
||||
p->vx = v.x();
|
||||
p->vy = v.z();
|
||||
p->vz = v.z();
|
||||
} else {
|
||||
std::cout << "update player " << p->id << ": " << p->x << " += "
|
||||
<< p->vx << " * " << dt << std::endl;
|
||||
|
||||
p->x += p->vx * dt;
|
||||
p->y += p->vy * dt;
|
||||
p->z += p->vz * dt;
|
||||
}
|
||||
btVector3 team_position(p->team->x, p->team->y, p->team->z);
|
||||
btTransform player_transform;
|
||||
p->state->getWorldTransform(player_transform);
|
||||
player_transform.getOpenGLMatrix(p->m);
|
||||
|
||||
double distance2 = pow(p->x - p->team->x, 2)
|
||||
+ pow(p->y - p->team->y, 2) + pow(p->z - p->team->z, 2);
|
||||
double distance2 =
|
||||
player_transform.getOrigin().distance2(team_position);
|
||||
if (distance2 < 10000) {
|
||||
p->team->points += p->points;
|
||||
p->points = 0;
|
||||
}
|
||||
|
||||
// if (p->x < (-1000 + 10)) {
|
||||
// p->x = (-1000 + 10);
|
||||
// p->vx *= -1;
|
||||
// } else if (p->x > (5000 - 10)) {
|
||||
// p->x = (5000 - 10);
|
||||
// p->vx *= -1;
|
||||
// }
|
||||
//
|
||||
// if (p->y < (-3000 + 10)) {
|
||||
// p->y = (-3000 + 10);
|
||||
// p->vy *= -1;
|
||||
// } else if (p->y > (3000 - 10)) {
|
||||
// p->y = (3000 - 10);
|
||||
// p->vy *= -1;
|
||||
// }
|
||||
//
|
||||
// if (p->z < (-3000 + 10)) {
|
||||
// p->z = (-3000 + 10);
|
||||
// p->vz *= -1;
|
||||
// } else if (p->z > (3000 - 10)) {
|
||||
// p->z = (3000 - 10);
|
||||
// p->vz *= -1;
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
void Game::explode_bomb(bomb_t *bomb) {
|
||||
size_t i, j;
|
||||
for (i = 0; i < GAME_PLAYER_COUNT; i++) {
|
||||
@ -430,6 +389,7 @@ void Game::update_points(double dt) {
|
||||
update_point(p);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void Game::update(double time, double dt) {
|
||||
if (master || true) {
|
||||
@ -437,13 +397,13 @@ void Game::update(double time, double dt) {
|
||||
if (steps > 0) {
|
||||
double timeStep = dt;
|
||||
Game::update_players(timeStep);
|
||||
Game::update_bombs(timeStep);
|
||||
Game::update_points(timeStep);
|
||||
//Game::update_bombs(timeStep);
|
||||
//Game::update_points(timeStep);
|
||||
}
|
||||
} else if (slaveUpdate.next(time)) {
|
||||
Game::update_players(slaveUpdate.getInterval());
|
||||
Game::update_bombs(slaveUpdate.getInterval());
|
||||
Game::update_points(slaveUpdate.getInterval());
|
||||
//Game::update_bombs(slaveUpdate.getInterval());
|
||||
//Game::update_points(slaveUpdate.getInterval());
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -31,13 +31,14 @@ class Game;
|
||||
struct player_t {
|
||||
uint16_t id;
|
||||
uint16_t status;
|
||||
double x, y, z;
|
||||
double rx, ry, rz, rw;
|
||||
double vx, vy, vz;
|
||||
// double x, y, z;
|
||||
// double rx, ry, rz, rw;
|
||||
// double vx, vy, vz;
|
||||
Team *team;
|
||||
uint16_t points;
|
||||
std::auto_ptr<btMotionState> state;
|
||||
std::auto_ptr<btRigidBody> body;
|
||||
float m[16];
|
||||
};
|
||||
|
||||
struct bomb_t {
|
||||
|
@ -352,11 +352,11 @@ void Network::dispatch(enet_uint8 *data, size_t length) {
|
||||
player_accelerate_message_t m;
|
||||
doc >> m;
|
||||
player_t *player = game->getPlayer(m.player_id);
|
||||
player->vx += m.x;
|
||||
player->vy += m.y;
|
||||
player->vz += m.z;
|
||||
btVector3 v = player->body->getLinearVelocity();
|
||||
v += btVector3(m.x, m.y, m.z);
|
||||
player->body->setLinearVelocity(v);
|
||||
player->body->activate(true);
|
||||
player->body->applyCentralImpulse(btVector3(m.x, m.y, m.z));
|
||||
//player->body->applyCentralImpulse(btVector3(m.x, m.y, m.z));
|
||||
break;
|
||||
}
|
||||
case MESSAGE_BOMB_DROP: {
|
||||
|
Loading…
Reference in New Issue
Block a user