Changes in common/Player.cpp [8f85180:01d0d00] in network-game
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
common/Player.cpp
r8f85180 r01d0d00 4 4 #include <sstream> 5 5 #include <cstring> 6 #include <cmath>7 6 8 7 using namespace std; … … 13 12 this->name = ""; 14 13 this->password = ""; 15 this->pos.x = this->target.x = 0; 16 this->pos.y = this->target.y = 0; 17 this->timeLastUpdated = 0; 14 this->pos.x = 0; 15 this->pos.y = 0; 18 16 } 19 17 … … 25 23 this->pos.x = p.pos.x; 26 24 this->pos.y = p.pos.y; 27 this->target.x = p.target.x;28 this->target.y = p.target.y;29 25 this->addr = p.addr; 30 26 } … … 35 31 this->name = name; 36 32 this->password = password; 37 this->pos.x = this->target.x =200;38 this->pos.y = this->target.y =200;33 this->pos.x = 200; 34 this->pos.y = 200; 39 35 } 40 36 … … 44 40 this->name = name; 45 41 this->password = ""; 46 this->pos.x = this->target.x =200;47 this->pos.y = this->target.y =200;42 this->pos.x = 200; 43 this->pos.y = 200; 48 44 this->addr = addr; 49 45 } … … 55 51 void Player::serialize(char* buffer) 56 52 { 57 memcpy(buffer, &this->id, 4); 58 memcpy(buffer+4, &this->pos.x, 4); 59 memcpy(buffer+8, &this->pos.y, 4); 60 memcpy(buffer+12, &this->target.x, 4); 61 memcpy(buffer+16, &this->target.y, 4); 62 strcpy(buffer+20, this->name.c_str()); 53 ostringstream oss; 54 55 oss.write((char*)&(this->id), sizeof(int)); 56 oss << this->name; 57 oss.write("\0", 1); 58 oss.write((char*)&(this->pos.x), sizeof(int)); 59 oss.write((char*)&(this->pos.y), sizeof(int)); 60 61 memcpy(buffer, oss.str().c_str(), this->name.length()+1+2*sizeof(int)); 63 62 } 64 63 65 64 void Player::deserialize(char* buffer) 66 65 { 67 memcpy(&this->id, buffer, 4); 68 memcpy(&this->pos.x, buffer+4, 4); 69 memcpy(&this->pos.y, buffer+8, 4); 70 memcpy(&this->target.x, buffer+12, 4); 71 memcpy(&this->target.y, buffer+16, 4); 72 this->name.assign(buffer+20); 66 istringstream iss; 67 iss.str(buffer); 73 68 74 cout << "id: " << this->id << endl; 75 cout << "pos x: " << this->pos.x << endl; 76 cout << "pos y: " << this->pos.y << endl; 77 cout << "target x: " << this->target.x << endl; 78 cout << "target y: " << this->target.y << endl; 79 cout << "name: " << this->name << endl; 69 iss.read((char*)&(this->id), sizeof(int)); 70 iss >> this->name; 71 iss.read((char*)&(this->pos.x), sizeof(int)); 72 iss.read((char*)&(this->pos.y), sizeof(int)); 80 73 } 81 74 … … 89 82 this->addr = addr; 90 83 } 91 92 void Player::move(void) {93 int speed = 100; // pixels per second94 unsigned long long curTime = getCurrentMillis();95 96 // if we're at our target, don't move97 if (pos.x == target.x && pos.y == target.y)98 cout << "We're already at our target" << endl;99 else {100 float pixels = speed * (curTime-timeLastUpdated) / 1000.0;101 cout << "We need to move " << pixels << " pixels" << endl;102 103 double angle = atan2(target.y-pos.y, target.x-pos.x);104 105 float dist = sqrt(pow(target.x-pos.x, 2) + pow(target.y-pos.y, 2));106 if (dist <= pixels) {107 pos.x = target.x;108 pos.y = target.y;109 }else {110 pos.x += cos(angle)*pixels;111 pos.y += sin(angle)*pixels;112 }113 }114 115 timeLastUpdated = curTime;116 }
Note:
See TracChangeset
for help on using the changeset viewer.