source: network-game/common/Game.cpp@ 6c9bcdd

Last change on this file since 6c9bcdd was 402cf86, checked in by dportnoy <dmp1488@…>, 11 years ago

The server checks player movement in individual games and stops players who hit obstacles

  • Property mode set to 100644
File size: 2.4 KB
Line 
1#include "Game.h"
2
3using namespace std;
4
5Game::Game() {
6 this->id = 0;
7 this->name = "";
8 this->blueScore = 0;
9 this->redScore = 0;
10 this->worldMap = NULL;
11}
12
13Game::Game(string name, string filepath) {
14 this->id = 0;
15 this->name = name;
16 this->blueScore = 0;
17 this->redScore = 0;
18 this->worldMap = WorldMap::loadMapFromFile(filepath);
19}
20
21Game::~Game() {
22 delete this->worldMap;
23}
24
25string Game::getName() {
26 return this->name;
27}
28
29int Game::getNumPlayers() {
30 return this->players.size();
31}
32
33map<unsigned int, Player*>& Game::getPlayers() {
34 return this->players;
35}
36
37int Game::getRedScore() {
38 return this->redScore;
39}
40
41int Game::getBlueScore() {
42 return this->blueScore;
43}
44
45WorldMap* Game::getMap() {
46 return this->worldMap;
47}
48
49void Game::setId(unsigned int id) {
50 this->id = id;
51}
52
53bool Game::addPlayer(Player* p) {
54 if (players.find(p->id) == players.end()) {
55 players[p->id] = p;
56 return true;
57 }
58 else
59 return false;
60}
61
62bool Game::removePlayer(unsigned int id) {
63 if (players.erase(id) == 1)
64 return true;
65 else
66 return false;
67}
68
69bool Game::startPlayerMovement(unsigned int id, int x, int y) {
70 // need to check if players actually contains the id
71 Player* p = players[id];
72
73 // we need to make sure the player can move here
74 if (0 <= x && x < this->worldMap->width*25 &&
75 0 <= y && y < this->worldMap->height*25 &&
76 this->worldMap->getElement(x/25, y/25) == WorldMap::TERRAIN_GRASS)
77 {
78 p->target.x = x;
79 p->target.y = y;
80
81 p->isChasing = false;
82 p->isAttacking = false;
83
84 return true;
85 }
86 else
87 return false;
88}
89
90// returns true if the movement should be canceled
91bool Game::processPlayerMovement(Player* p, FLOAT_POSITION oldPos) {
92
93 // check if the move needs to be canceled
94 switch(this->worldMap->getElement(p->pos.x/25, p->pos.y/25))
95 {
96 case WorldMap::TERRAIN_NONE:
97 case WorldMap::TERRAIN_OCEAN:
98 case WorldMap::TERRAIN_ROCK:
99 {
100 p->pos = oldPos;
101 p->target.x = p->pos.x;
102 p->target.y = p->pos.y;
103 p->isChasing = false;
104 return true;
105 break;
106 }
107 default:
108 // if there are no obstacles, don't cancel movement
109 return false;
110 break;
111 }
112}
113
114void Game::setRedScore(int score) {
115 this->redScore = score;
116}
117
118void Game::setBlueScore(int score) {
119 this->blueScore = score;
120}
Note: See TracBrowser for help on using the repository browser.