Repository navigation
Expand file tree
/
Copy pathBaseFacility.cpp
More file actions
121 lines (111 loc) · 2.96 KB
/
Copy pathBaseFacility.cpp
File metadata and controls
121 lines (111 loc) · 2.96 KB
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
/*
* Copyright 2010 OpenXcom Developers.
*
* This file is part of OpenXcom.
*
* OpenXcom is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenXcom 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 OpenXcom. If not, see <http://www.gnu.org/licenses/>.
*/
#define _USE_MATH_DEFINES
#include "BaseFacility.h"
#include <cmath>
#include "../Ruleset/RuleBaseFacility.h"
#include "Base.h"
#include "Target.h"
/**
* Initializes a base facility of the specified type.
* @param rules Pointer to ruleset.
* @param x X position in grid squares.
* @param y Y position in grid squares.
*/
BaseFacility::BaseFacility(RuleBaseFacility *rules, int x, int y) : _rules(rules), _x(x), _y(y), _buildTime(0)
{
}
/**
*
*/
BaseFacility::~BaseFacility()
{
}
/**
* Returns the ruleset for the base facility's type.
* @return Pointer to ruleset.
*/
RuleBaseFacility *const BaseFacility::getRules() const
{
return _rules;
}
/**
* Returns the base facility's X position on the
* base grid that it's placed on.
* @return X position in grid squares.
*/
int BaseFacility::getX() const
{
return _x;
}
/**
* Returns the base facility's Y position on the
* base grid that it's placed on.
* @return Y position in grid squares.
*/
int BaseFacility::getY() const
{
return _y;
}
/**
* Returns the base facility's remaining time
* until it's finished building (0 = complete).
* @return Time left in days.
*/
int BaseFacility::getBuildTime() const
{
return _buildTime;
}
/**
* Changes the base facility's remaining time
* until it's finished building.
* @param time Time left in days.
*/
void BaseFacility::setBuildTime(int time)
{
_buildTime = time;
}
/**
* Handles the facility building every day.
*/
void BaseFacility::build()
{
_buildTime--;
}
/**
* Returns if a certain target is covered by the facility's
* radar range, taking in account the positions of both.
* @param base Pointer to base the facility belongs to.
* @param target Pointer to target to compare.
* @return True if it's within range, False otherwise.
*/
bool BaseFacility::insideRadarRange(Base *base, Target *target) const
{
if (_rules->getRadarRange() == 0)
return false;
bool inside = false;
double newrange = _rules->getRadarRange() * (1 / 60.0) * (M_PI / 180);
for (double lon = target->getLongitude() - 2*M_PI; lon <= target->getLongitude() + 2*M_PI; lon += 2*M_PI)
{
double dLon = lon - base->getLongitude();
double dLat = target->getLatitude() - base->getLatitude();
inside = inside || (dLon * dLon + dLat * dLat <= newrange * newrange);
}
return inside;
}