- Timestamp:
- Feb 24, 2013, 1:28:32 AM (12 years ago)
- Branches:
- master
- Children:
- 7b43385
- Parents:
- 3a79253 (diff), 8f85180 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- common
- Files:
-
- 2 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
common/Common.cpp
r3a79253 rca44f82 1 1 #include "Common.h" 2 3 #include <iostream> 4 using namespace std; 5 6 #if defined WINDOWS 7 #include <Windows.h> 8 #elif defined LINUX 9 #include <time.h> 10 #endif 2 11 3 12 void set_nonblock(int sock) … … 13 22 #endif 14 23 } 24 25 unsigned long long getCurrentMillis() 26 { 27 unsigned long long numMilliseconds; 28 29 #if defined WINDOWS 30 numMilliseconds = GetTickCount(); 31 #elif defined LINUX 32 timespec curTime; 33 clock_gettime(CLOCK_REALTIME, &curTime); 34 35 numMilliseconds = curTime.tv_sec*(unsigned long long)1000+curTime.tv_nsec/(unsigned long long)1000000; 36 #endif 37 38 return numMilliseconds; 39 } -
common/Common.h
r3a79253 rca44f82 13 13 14 14 void set_nonblock(int sock); 15 unsigned long long getCurrentMillis(); 15 16 16 17 typedef struct … … 18 19 int x; 19 20 int y; 20 } PLAYER_POS; 21 } POSITION; 22 23 typedef struct 24 { 25 float x; 26 float y; 27 } FLOAT_POSITION; 21 28 22 29 #endif -
common/Message.cpp
r3a79253 rca44f82 11 11 #endif 12 12 13 #include <iostream> 14 15 using namespace std; 16 13 17 int sendMessage(NETWORK_MSG *msg, int sock, struct sockaddr_in *dest) 14 18 { 15 return sendto(sock, (char*)msg, sizeof(NETWORK_MSG), 0, (struct sockaddr *)dest, sizeof(struct sockaddr_in)); 19 int ret = sendto(sock, (char*)msg, sizeof(NETWORK_MSG), 0, (struct sockaddr *)dest, sizeof(struct sockaddr_in)); 20 21 cout << "Sent message of type " << msg->type << endl; 22 23 return ret; 16 24 } 17 25 … … 21 29 22 30 // assume we don't care about the value of socklen 23 return recvfrom(sock, (char*)msg, sizeof(NETWORK_MSG), 0, (struct sockaddr *)dest, &socklen); 31 int ret = recvfrom(sock, (char*)msg, sizeof(NETWORK_MSG), 0, (struct sockaddr *)dest, &socklen); 32 33 if (ret > -1) 34 cout << "Received message of type " << msg->type << endl; 35 36 return ret; 24 37 } -
common/Message.h
r3a79253 rca44f82 6 6 #define MSG_TYPE_LOGOUT 3 7 7 #define MSG_TYPE_CHAT 4 8 #define MSG_TYPE_PLAYER 5 8 #define MSG_TYPE_PLAYER 5 // server sends this to update player positions 9 #define MSG_TYPE_PLAYER_MOVE 6 // client sends this when a player wants to move 9 10 10 11 typedef struct -
common/Player.cpp
r3a79253 rca44f82 4 4 #include <sstream> 5 5 #include <cstring> 6 #include <cmath> 6 7 7 8 using namespace std; … … 12 13 this->name = ""; 13 14 this->password = ""; 14 this->pos.x = 0; 15 this->pos.y = 0; 15 this->pos.x = this->target.x = 0; 16 this->pos.y = this->target.y = 0; 17 this->timeLastUpdated = 0; 16 18 } 17 19 … … 23 25 this->pos.x = p.pos.x; 24 26 this->pos.y = p.pos.y; 27 this->target.x = p.target.x; 28 this->target.y = p.target.y; 25 29 this->addr = p.addr; 26 30 } … … 31 35 this->name = name; 32 36 this->password = password; 33 this->pos.x = 200;34 this->pos.y = 200;37 this->pos.x = this->target.x = 200; 38 this->pos.y = this->target.y = 200; 35 39 } 36 40 … … 40 44 this->name = name; 41 45 this->password = ""; 42 this->pos.x = 200;43 this->pos.y = 200;46 this->pos.x = this->target.x = 200; 47 this->pos.y = this->target.y = 200; 44 48 this->addr = addr; 45 49 } … … 51 55 void Player::serialize(char* buffer) 52 56 { 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)); 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()); 62 63 } 63 64 64 65 void Player::deserialize(char* buffer) 65 66 { 66 istringstream iss; 67 iss.str(buffer); 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); 68 73 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)); 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; 73 80 } 74 81 … … 82 89 this->addr = addr; 83 90 } 91 92 void Player::move(void) { 93 int speed = 100; // pixels per second 94 unsigned long long curTime = getCurrentMillis(); 95 96 // if we're at our target, don't move 97 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 } -
common/Player.h
r3a79253 rca44f82 32 32 void setAddr(sockaddr_in addr); 33 33 34 void move(); 35 34 36 int id; 35 37 string name; 36 38 string password; 37 39 sockaddr_in addr; 38 PLAYER_POS pos; 40 FLOAT_POSITION pos; 41 POSITION target; 42 unsigned long long timeLastUpdated; 39 43 }; 40 44
Note:
See TracChangeset
for help on using the changeset viewer.