File: estategroup.cpp

package info (click to toggle)
monopd 0.9.3-4.1
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 788 kB
  • ctags: 575
  • sloc: cpp: 5,666; sh: 712; makefile: 27
file content (92 lines) | stat: -rw-r--r-- 2,510 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
// Copyright (c) 2002-2003 Rob Kaper <cap@capsi.com>
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// version 2 as published by the Free Software Foundation.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; see the file COPYING.  If not, write to
// the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
// Boston, MA 02111-1307, USA.

#include <iostream>

#include <math++/nodes.h>

#include "estate.h"
#include "estategroup.h"
#include "game.h"
#include "io.h"
#include "player.h"

EstateGroup::EstateGroup(int id, Game *game, std::string name) : GameObject(id, GameObject::Unknown, game)
{
	setProperty("name", name, game);
	m_rentMath = m_rentVar = "";
	m_price = m_housePrice = 0;
}

void EstateGroup::setPrice(unsigned int price)
{
	if (m_price != price)
		m_price = price;
}

unsigned int EstateGroup::price()
{
	return m_price;
}

void EstateGroup::setHousePrice(unsigned int housePrice)
{
	if (m_housePrice != housePrice)
		m_housePrice = housePrice;
}

unsigned int EstateGroup::housePrice()
{
	return m_housePrice;
}

void EstateGroup::setRentMath(const std::string rentMath)
{
	if (m_rentMath != rentMath)
		m_rentMath = rentMath;
}

void EstateGroup::setRentVar(const std::string rentVar)
{
	if (m_rentVar != rentVar)
		m_rentVar = rentVar;
}

int EstateGroup::rent(Player *pLand, const std::string &rentMath)
{
	std::string mathStr = rentMath.size() ? rentMath : m_rentMath;

	if (mathStr.size())
	{
		Estate *estate = pLand->estate();

		stringReplace(mathStr, "${DICE}", std::string(itoa((m_game->dice[0] + m_game->dice[1]))));
		stringReplace(mathStr, "${GROUPOWNED}", std::string(itoa(estate->groupSize(estate->owner()))));
		stringReplace(mathStr, "${HOUSES}", std::string(itoa(estate->getIntProperty("houses"))));

		try {
			std::string exprStr(mathStr);
			std::auto_ptr<math::TNode<double> >expr(math::TReader<double>::parse(exprStr));
			std::auto_ptr<math::TNode<double> >se(math::TSimplifier<double>::simplify(expr.get()));
			return atoi(math::TPrinter<double>::print(se.get()).c_str());
		} catch (const math::EMath& e) {
			return 0;
		} catch (...) {
			return 0;
		}
	}
	return 0;
}