Scrutinizer GitHub App not installed

We could not synchronize checks via GitHub's checks API since Scrutinizer's GitHub App is not installed for this repository.

Install GitHub App

Failed Conditions
Pull Request — master (#1078)
by Dan
05:25
created

SmrCombatDrones::getNumberOfCDs()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 2
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php declare(strict_types=1);
2
3
class SmrCombatDrones extends AbstractSmrCombatWeapon {
4
	use Traits\CombatWeaponForce;
5
6
	const MAX_CDS_RAND = 54;
7
8
	public function __construct(int $numberOfCDs, bool $portPlanetDrones = false) {
9
		$this->amount = $numberOfCDs;
10
		$this->name = 'Combat Drones';
11
		if ($portPlanetDrones === false) {
12
			$this->shieldDamage = 2;
13
			$this->armourDamage = 2;
14
		} else {
15
			$this->shieldDamage = 1;
16
			$this->armourDamage = 1;
17
		}
18
		$this->accuracy = 3;
19
		$this->damageRollover = true;
20
	}
21
22
	public function getModifiedAccuracy() : float {
23
		$modifiedAccuracy = $this->getBaseAccuracy();
24
		return $modifiedAccuracy;
25
	}
26
27
	protected function getModifiedAccuracyAgainstForcesUsingRandom(AbstractSmrPlayer $weaponPlayer, SmrForce $forces, int $random) : float {
0 ignored issues
show
Unused Code introduced by
The parameter $weaponPlayer is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

27
	protected function getModifiedAccuracyAgainstForcesUsingRandom(/** @scrutinizer ignore-unused */ AbstractSmrPlayer $weaponPlayer, SmrForce $forces, int $random) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $forces is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

27
	protected function getModifiedAccuracyAgainstForcesUsingRandom(AbstractSmrPlayer $weaponPlayer, /** @scrutinizer ignore-unused */ SmrForce $forces, int $random) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
28
		$modifiedAccuracy = $this->getModifiedAccuracy();
29
		$modifiedAccuracy += $random;
30
31
		return max(0, min(100, $modifiedAccuracy));
32
	}
33
34
	public function getModifiedAccuracyAgainstForces(AbstractSmrPlayer $weaponPlayer, SmrForce $forces) : float {
35
		return $this->getModifiedAccuracyAgainstForcesUsingRandom($weaponPlayer, $forces, rand(3, self::MAX_CDS_RAND));
36
	}
37
38
	protected function getModifiedAccuracyAgainstPortUsingRandom(AbstractSmrPlayer $weaponPlayer, SmrPort $port, int $random) : float {
0 ignored issues
show
Unused Code introduced by
The parameter $weaponPlayer is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

38
	protected function getModifiedAccuracyAgainstPortUsingRandom(/** @scrutinizer ignore-unused */ AbstractSmrPlayer $weaponPlayer, SmrPort $port, int $random) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $port is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

38
	protected function getModifiedAccuracyAgainstPortUsingRandom(AbstractSmrPlayer $weaponPlayer, /** @scrutinizer ignore-unused */ SmrPort $port, int $random) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
39
		$modifiedAccuracy = $this->getModifiedAccuracy();
40
		$modifiedAccuracy += $random;
41
42
		return max(0, min(100, $modifiedAccuracy));
43
	}
44
45
	public function getModifiedAccuracyAgainstPort(AbstractSmrPlayer $weaponPlayer, SmrPort $port) : float {
46
		return $this->getModifiedAccuracyAgainstPortUsingRandom($weaponPlayer, $port, rand(3, self::MAX_CDS_RAND));
47
	}
48
49
	protected function getModifiedAccuracyAgainstPlanetUsingRandom(AbstractSmrPlayer $weaponPlayer, SmrPlanet $planet, int $random) : float {
0 ignored issues
show
Unused Code introduced by
The parameter $planet is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

49
	protected function getModifiedAccuracyAgainstPlanetUsingRandom(AbstractSmrPlayer $weaponPlayer, /** @scrutinizer ignore-unused */ SmrPlanet $planet, int $random) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $weaponPlayer is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

49
	protected function getModifiedAccuracyAgainstPlanetUsingRandom(/** @scrutinizer ignore-unused */ AbstractSmrPlayer $weaponPlayer, SmrPlanet $planet, int $random) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
50
		$modifiedAccuracy = $this->getModifiedAccuracy();
51
		$modifiedAccuracy += $random;
52
53
		return max(0, min(100, $modifiedAccuracy));
54
	}
55
56
	public function getModifiedAccuracyAgainstPlanet(AbstractSmrPlayer $weaponPlayer, SmrPlanet $planet) : float {
57
		return $this->getModifiedAccuracyAgainstPlanetUsingRandom($weaponPlayer, $planet, rand(3, self::MAX_CDS_RAND));
58
	}
59
60
	public function getModifiedAccuracyAgainstPlayer(AbstractSmrPlayer $weaponPlayer, AbstractSmrPlayer $targetPlayer) : float {
61
		return $this->getModifiedAccuracyAgainstPlayerUsingRandom($weaponPlayer, $targetPlayer, rand(3, self::MAX_CDS_RAND));
62
	}
63
64
	protected function getModifiedAccuracyAgainstPlayerUsingRandom(AbstractSmrPlayer $weaponPlayer, AbstractSmrPlayer $targetPlayer, int $random) : float {
65
		$modifiedAccuracy = $this->getModifiedAccuracy();
66
		$levelRand = rand(IFloor($weaponPlayer->getLevelID() / 2), $weaponPlayer->getLevelID());
67
		$modifiedAccuracy += ($random + $levelRand - ($targetPlayer->getLevelID() - $weaponPlayer->getLevelID()) / 3) / 1.5;
68
69
		$weaponShip = $weaponPlayer->getShip();
70
		$targetShip = $targetPlayer->getShip();
71
		$mrDiff = $targetShip->getMR() - $weaponShip->getMR();
72
		if ($mrDiff > 0) {
73
			$modifiedAccuracy -= $this->getBaseAccuracy() * ($mrDiff / MR_FACTOR) / 100;
74
		}
75
76
		return max(0, min(100, $modifiedAccuracy));
77
	}
78
79
	public function getModifiedForceAccuracyAgainstPlayer(SmrForce $forces, AbstractSmrPlayer $targetPlayer) : float {
80
		return $this->getModifiedForceAccuracyAgainstPlayerUsingRandom($forces, $targetPlayer, rand(3, self::MAX_CDS_RAND));
81
	}
82
83
	protected function getModifiedForceAccuracyAgainstPlayerUsingRandom(SmrForce $forces, AbstractSmrPlayer $targetPlayer, int $random) : float {
0 ignored issues
show
Unused Code introduced by
The parameter $targetPlayer is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

83
	protected function getModifiedForceAccuracyAgainstPlayerUsingRandom(SmrForce $forces, /** @scrutinizer ignore-unused */ AbstractSmrPlayer $targetPlayer, int $random) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $forces is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

83
	protected function getModifiedForceAccuracyAgainstPlayerUsingRandom(/** @scrutinizer ignore-unused */ SmrForce $forces, AbstractSmrPlayer $targetPlayer, int $random) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
84
		$modifiedAccuracy = $this->getModifiedAccuracy();
85
		$modifiedAccuracy += $random;
86
87
		return max(0, min(100, $modifiedAccuracy));
88
	}
89
90
	protected function getModifiedPortAccuracyAgainstPlayer(SmrPort $port, AbstractSmrPlayer $targetPlayer) : float {
0 ignored issues
show
Unused Code introduced by
The parameter $targetPlayer is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

90
	protected function getModifiedPortAccuracyAgainstPlayer(SmrPort $port, /** @scrutinizer ignore-unused */ AbstractSmrPlayer $targetPlayer) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $port is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

90
	protected function getModifiedPortAccuracyAgainstPlayer(/** @scrutinizer ignore-unused */ SmrPort $port, AbstractSmrPlayer $targetPlayer) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
91
		return 100;
92
	}
93
94
	protected function getModifiedPlanetAccuracyAgainstPlayer(SmrPlanet $planet, AbstractSmrPlayer $targetPlayer) : float {
0 ignored issues
show
Unused Code introduced by
The parameter $targetPlayer is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

94
	protected function getModifiedPlanetAccuracyAgainstPlayer(SmrPlanet $planet, /** @scrutinizer ignore-unused */ AbstractSmrPlayer $targetPlayer) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $planet is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

94
	protected function getModifiedPlanetAccuracyAgainstPlayer(/** @scrutinizer ignore-unused */ SmrPlanet $planet, AbstractSmrPlayer $targetPlayer) : float {

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
95
		return 100;
96
	}
97
98
	public function getModifiedDamageAgainstForces(AbstractSmrPlayer $weaponPlayer, SmrForce $forces) : array {
99
		if (!$this->canShootForces()) {
100
			// If we can't shoot forces then just return a damageless array and don't waste resources calculated any damage mods.
101
			return array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
102
		}
103
		$damage = $this->getDamage();
104
		$damage['Launched'] = ICeil($this->getAmount() * $this->getModifiedAccuracyAgainstForces($weaponPlayer, $forces) / 100);
105
		$damage['Kamikaze'] = 0;
106
		if ($weaponPlayer->isCombatDronesKamikazeOnMines()) { // If kamikaze then damage is same as MINE_ARMOUR
107
			$damage['Kamikaze'] = min($damage['Launched'], $forces->getMines());
108
			$damage['Launched'] -= $damage['Kamikaze'];
109
		}
110
		$damage['MaxDamage'] = ICeil($damage['Launched'] * $damage['MaxDamage']);
111
		$damage['Shield'] = ICeil($damage['Launched'] * $damage['Shield']);
112
		$damage['Armour'] = ICeil($damage['Launched'] * $damage['Armour']);
113
114
		$damage['Launched'] += $damage['Kamikaze'];
115
		$damage['MaxDamage'] += $damage['Kamikaze'] * MINE_ARMOUR;
116
		$damage['Shield'] += $damage['Kamikaze'] * MINE_ARMOUR;
117
		$damage['Armour'] += $damage['Kamikaze'] * MINE_ARMOUR;
118
119
		return $damage;
120
	}
121
122
	public function getModifiedDamageAgainstPort(AbstractSmrPlayer $weaponPlayer, SmrPort $port) : array {
123
		if (!$this->canShootPorts()) {
124
			// If we can't shoot forces then just return a damageless array and don't waste resources calculated any damage mods.
125
			return array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
126
		}
127
		$damage = $this->getDamage();
128
		$damage['Launched'] = ICeil($this->getAmount() * $this->getModifiedAccuracyAgainstPort($weaponPlayer, $port) / 100);
129
		$damage['MaxDamage'] = ICeil($damage['Launched'] * $damage['MaxDamage']);
130
		$damage['Shield'] = ICeil($damage['Launched'] * $damage['Shield']);
131
		$damage['Armour'] = ICeil($damage['Launched'] * $damage['Armour']);
132
133
		return $damage;
134
	}
135
136
	public function getModifiedDamageAgainstPlanet(AbstractSmrPlayer $weaponPlayer, SmrPlanet $planet) : array {
137
		if (!$this->canShootPlanets()) {
138
			// If we can't shoot forces then just return a damageless array and don't waste resources calculated any damage mods.
139
			return array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
140
		}
141
		$damage = $this->getDamage();
142
		$damage['Launched'] = ICeil($this->getAmount() * $this->getModifiedAccuracyAgainstPlanet($weaponPlayer, $planet) / 100);
143
		$planetMod = self::PLANET_DAMAGE_MOD;
144
		$damage['MaxDamage'] = ICeil($damage['Launched'] * $damage['MaxDamage'] * $planetMod);
145
		$damage['Shield'] = ICeil($damage['Launched'] * $damage['Shield'] * $planetMod);
146
		$damage['Armour'] = ICeil($damage['Launched'] * $damage['Armour'] * $planetMod);
147
148
		return $damage;
149
	}
150
151
	public function getModifiedDamageAgainstPlayer(AbstractSmrPlayer $weaponPlayer, AbstractSmrPlayer $targetPlayer) : array {
152
		if (!$this->canShootTraders()) { // If we can't shoot traders then just return a damageless array and don't waste resources calculated any damage mods.
153
			$return = array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
154
			return $return;
155
		}
156
		$damage = $this->getDamage();
157
		if ($targetPlayer->getShip()->hasDCS()) {
158
			$damage['MaxDamage'] *= DCS_PLAYER_DAMAGE_DECIMAL_PERCENT;
159
			$damage['Shield'] *= DCS_PLAYER_DAMAGE_DECIMAL_PERCENT;
160
			$damage['Armour'] *= DCS_PLAYER_DAMAGE_DECIMAL_PERCENT;
161
		}
162
		$damage['Launched'] = ICeil($this->getAmount() * $this->getModifiedAccuracyAgainstPlayer($weaponPlayer, $targetPlayer) / 100);
163
		$damage['MaxDamage'] = ICeil($damage['Launched'] * $damage['MaxDamage']);
164
		$damage['Shield'] = ICeil($damage['Launched'] * $damage['Shield']);
165
		$damage['Armour'] = ICeil($damage['Launched'] * $damage['Armour']);
166
		return $damage;
167
	}
168
169
	public function getModifiedForceDamageAgainstPlayer(SmrForce $forces, AbstractSmrPlayer $targetPlayer) : array {
170
		if (!$this->canShootTraders()) { // If we can't shoot traders then just return a damageless array and don't waste resources calculated any damage mods.
171
			$return = array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
172
			return $return;
173
		}
174
		$damage = $this->getDamage();
175
176
		if ($targetPlayer->getShip()->hasDCS()) {
177
			$damage['MaxDamage'] *= DCS_FORCE_DAMAGE_DECIMAL_PERCENT;
178
			$damage['Shield'] *= DCS_FORCE_DAMAGE_DECIMAL_PERCENT;
179
			$damage['Armour'] *= DCS_FORCE_DAMAGE_DECIMAL_PERCENT;
180
		}
181
182
		$damage['Launched'] = ICeil($this->getAmount() * $this->getModifiedForceAccuracyAgainstPlayer($forces, $targetPlayer) / 100);
183
		$damage['MaxDamage'] = ICeil($damage['Launched'] * $damage['MaxDamage']);
184
		$damage['Shield'] = ICeil($damage['Launched'] * $damage['Shield']);
185
		$damage['Armour'] = ICeil($damage['Launched'] * $damage['Armour']);
186
		return $damage;
187
	}
188
189
	public function getModifiedPortDamageAgainstPlayer(SmrPort $port, AbstractSmrPlayer $targetPlayer) : array {
190
		if (!$this->canShootTraders()) { // If we can't shoot traders then just return a damageless array and don't waste resources calculated any damage mods.
191
			$return = array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
192
			return $return;
193
		}
194
		$damage = $this->getDamage();
195
196
		if ($targetPlayer->getShip()->hasDCS()) {
197
			$damage['MaxDamage'] *= DCS_PORT_DAMAGE_DECIMAL_PERCENT;
198
			$damage['Shield'] *= DCS_PORT_DAMAGE_DECIMAL_PERCENT;
199
			$damage['Armour'] *= DCS_PORT_DAMAGE_DECIMAL_PERCENT;
200
		}
201
		$damage['Launched'] = ICeil($this->getAmount() * $this->getModifiedPortAccuracyAgainstPlayer($port, $targetPlayer) / 100);
202
		$damage['MaxDamage'] = ICeil($damage['Launched'] * $damage['MaxDamage']);
203
		$damage['Shield'] = ICeil($damage['Launched'] * $damage['Shield']);
204
		$damage['Armour'] = ICeil($damage['Launched'] * $damage['Armour']);
205
		return $damage;
206
	}
207
208
	public function getModifiedPlanetDamageAgainstPlayer(SmrPlanet $planet, AbstractSmrPlayer $targetPlayer) : array {
209
		if (!$this->canShootTraders()) { // If we can't shoot traders then just return a damageless array and don't waste resources calculated any damage mods.
210
			$return = array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
211
			return $return;
212
		}
213
		$damage = $this->getDamage();
214
215
		if ($targetPlayer->getShip()->hasDCS()) {
216
			$damage['MaxDamage'] *= DCS_PLANET_DAMAGE_DECIMAL_PERCENT;
217
			$damage['Shield'] *= DCS_PLANET_DAMAGE_DECIMAL_PERCENT;
218
			$damage['Armour'] *= DCS_PLANET_DAMAGE_DECIMAL_PERCENT;
219
		}
220
		$damage['Launched'] = ICeil($this->getAmount() * $this->getModifiedPlanetAccuracyAgainstPlayer($planet, $targetPlayer) / 100);
221
		$damage['MaxDamage'] = ICeil($damage['Launched'] * $damage['MaxDamage']);
222
		$damage['Shield'] = ICeil($damage['Launched'] * $damage['Shield']);
223
		$damage['Armour'] = ICeil($damage['Launched'] * $damage['Armour']);
224
		return $damage;
225
	}
226
227
	public function shootForces(AbstractSmrPlayer $weaponPlayer, SmrForce $forces) : array {
228
		$return = array('Weapon' => $this, 'TargetForces' => $forces, 'Hit' => true);
229
		$return = $this->doPlayerDamageToForce($return, $weaponPlayer, $forces);
230
		if ($return['WeaponDamage']['Kamikaze'] > 0) {
231
			$weaponPlayer->getShip()->decreaseCDs($return['WeaponDamage']['Kamikaze']);
232
		}
233
		return $return;
234
	}
235
236
	public function shootPort(AbstractSmrPlayer $weaponPlayer, SmrPort $port) : array {
237
		$return = array('Weapon' => $this, 'TargetPort' => $port, 'Hit' => true);
238
		return $this->doPlayerDamageToPort($return, $weaponPlayer, $port);
239
	}
240
241
	public function shootPlanet(AbstractSmrPlayer $weaponPlayer, SmrPlanet $planet, bool $delayed) : array {
242
		$return = array('Weapon' => $this, 'TargetPlanet' => $planet, 'Hit' => true);
243
		return $this->doPlayerDamageToPlanet($return, $weaponPlayer, $planet, $delayed);
244
	}
245
246
	public function shootPlayer(AbstractSmrPlayer $weaponPlayer, AbstractSmrPlayer $targetPlayer) : array {
247
		$return = array('Weapon' => $this, 'TargetPlayer' => $targetPlayer, 'Hit' => true);
248
		return $this->doPlayerDamageToPlayer($return, $weaponPlayer, $targetPlayer);
249
	}
250
251
	public function shootPlayerAsForce(SmrForce $forces, AbstractSmrPlayer $targetPlayer) : array {
252
		$return = array('Weapon' => $this, 'TargetPlayer' => $targetPlayer, 'Hit' => true);
253
		return $this->doForceDamageToPlayer($return, $forces, $targetPlayer);
254
	}
255
256
	public function shootPlayerAsPort(SmrPort $forces, AbstractSmrPlayer $targetPlayer) : array {
257
		$return = array('Weapon' => $this, 'TargetPlayer' => $targetPlayer, 'Hit' => true);
258
		return $this->doPortDamageToPlayer($return, $forces, $targetPlayer);
259
	}
260
261
	public function shootPlayerAsPlanet(SmrPlanet $forces, AbstractSmrPlayer $targetPlayer) : array {
262
		$return = array('Weapon' => $this, 'TargetPlayer' => $targetPlayer, 'Hit' => true);
263
		return $this->doPlanetDamageToPlayer($return, $forces, $targetPlayer);
264
	}
265
}
266