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

Passed
Pull Request — master (#1005)
by Dan
04:25
created

SmrMines::getModifiedDamage()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 3
dl 0
loc 3
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 0
1
<?php declare(strict_types=1);
2
3
class SmrMines extends AbstractSmrCombatWeapon {
4
	const TOTAL_ENEMY_MINES_MODIFIER = 25;
5
	const FED_SHIP_DAMAGE_MODIFIER = .5;
6
	const DCS_DAMAGE_MODIFIER = .75;
7
	protected $numberOfMines;
8
9
	public function __construct($gameTypeID, $numberOfMines) {
10
		$this->gameTypeID = $gameTypeID;
11
		$this->numberOfMines = $numberOfMines;
12
		$this->name = 'Mines';
13
		$this->raceID = 0;
0 ignored issues
show
Bug Best Practice introduced by
The property raceID does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
14
		$this->maxDamage = 20;
15
		$this->shieldDamage = 20;
16
		$this->armourDamage = 20;
17
		$this->accuracy = 100;
18
		$this->damageRollover = false;
19
	}
20
21
	public function getNumberOfMines() {
22
		return $this->numberOfMines;
23
	}
24
25
	public function getModifiedAccuracy() {
26
		$modifiedAccuracy = $this->getBaseAccuracy();
27
		return $modifiedAccuracy;
28
	}
29
30
	public function getModifiedForceAccuracyAgainstPlayer(SmrForce $forces, AbstractSmrPlayer $targetPlayer, $minesAreAttacker) {
31
		return $this->getModifiedForceAccuracyAgainstPlayerUsingRandom($forces, $targetPlayer, rand(1, 7) * rand(1, 7), $minesAreAttacker);
32
	}
33
34
	protected function getModifiedForceAccuracyAgainstPlayerUsingRandom(SmrForce $forces, AbstractSmrPlayer $targetPlayer, $random, $minesAreAttacker) {
35
		$modifiedAccuracy = $this->getModifiedAccuracy();
36
		$modifiedAccuracy -= $targetPlayer->getLevelID() + $random;
37
		if ($minesAreAttacker) {
38
			$modifiedAccuracy /= pow(SmrSector::getSector($forces->getGameID(), $forces->getSectorID())->getNumberOfConnections(), 0.6);
39
		}
40
41
		if (self::TOTAL_ENEMY_MINES_MODIFIER > 0) {
42
			$enemyMines = 0;
43
			$enemyForces = $forces->getSector()->getEnemyForces($targetPlayer);
44
			foreach ($enemyForces as $enemyForce) {
45
				$enemyMines += $enemyForce->getMines();
46
			}
47
			$modifiedAccuracy += $enemyMines / self::TOTAL_ENEMY_MINES_MODIFIER;
48
		}
49
		return max(0, min(100, $modifiedAccuracy));
50
	}
51
52
	public function &getModifiedDamageAgainstForces(AbstractSmrPlayer $weaponPlayer, SmrForce $forces) {
53
		$return = array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
54
		return $return;
55
	}
56
57
	public function &getModifiedDamageAgainstPort(AbstractSmrPlayer $weaponPlayer, SmrPort $port) {
58
		$return = array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
59
		return $return;
60
	}
61
62
	public function &getModifiedDamageAgainstPlanet(AbstractSmrPlayer $weaponPlayer, SmrPlanet $planet) {
63
		$return = array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
64
		return $return;
65
	}
66
67
	public function &getModifiedDamageAgainstPlayer(AbstractSmrPlayer $weaponPlayer, AbstractSmrPlayer $targetPlayer) {
68
		$return = array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
69
		return $return;
70
	}
71
72
	public function &getModifiedPortDamageAgainstPlayer(SmrPort $port, AbstractSmrPlayer $targetPlayer) {
73
		$return = array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
74
		return $return;
75
	}
76
77
	public function &getModifiedPlanetDamageAgainstPlayer(SmrPlanet $planet, AbstractSmrPlayer $targetPlayer) {
78
		$return = array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
79
		return $return;
80
	}
81
82
	public function &getModifiedForceDamageAgainstPlayer(SmrForce $forces, AbstractSmrPlayer $targetPlayer, $minesAreAttacker = false) {
83
		if (!$this->canShootTraders()) { // If we can't shoot traders then just return a damageless array and don't waste resources calculated any damage mods.
84
			$return = array('MaxDamage' => 0, 'Shield' => 0, 'Armour' => 0, 'Rollover' => $this->isDamageRollover());
85
			return $return;
86
		}
87
		$damage = $this->getDamage();
88
		if ($targetPlayer->getShip()->isFederal()) { // do less damage to fed ships
89
			$damage['MaxDamage'] = IRound($damage['MaxDamage'] * self::FED_SHIP_DAMAGE_MODIFIER);
90
			$damage['Shield'] = IRound($damage['Shield'] * self::FED_SHIP_DAMAGE_MODIFIER);
91
			$damage['Armour'] = IRound($damage['Armour'] * self::FED_SHIP_DAMAGE_MODIFIER);
92
		}
93
94
		if ($targetPlayer->getShip()->hasDCS()) { // do less damage to DCS (Drone Scrambler)
95
			$damage['MaxDamage'] = IRound($damage['MaxDamage'] * self::DCS_DAMAGE_MODIFIER);
96
			$damage['Shield'] = IRound($damage['Shield'] * self::DCS_DAMAGE_MODIFIER);
97
			$damage['Armour'] = IRound($damage['Armour'] * self::DCS_DAMAGE_MODIFIER);
98
		}
99
		$damage['Launched'] = ICeil($this->getNumberOfMines() * $this->getModifiedForceAccuracyAgainstPlayer($forces, $targetPlayer, $minesAreAttacker) / 100);
100
		$damage['MaxDamage'] = ICeil($damage['Launched'] * $damage['MaxDamage']);
101
		$damage['Shield'] = ICeil($damage['Launched'] * $damage['Shield']);
102
		$damage['Armour'] = ICeil($damage['Launched'] * $damage['Armour']);
103
		return $damage;
104
	}
105
106
	public function &shootForces(AbstractSmrPlayer $weaponPlayer, SmrForce $forces) {
107
		$return = array('Weapon' => $this, 'TargetForces' => $forces);
108
		return $return;
109
	}
110
111
	public function &shootPlayer(AbstractSmrPlayer $weaponPlayer, AbstractSmrPlayer $targetPlayer) {
112
		$return = array('Weapon' => $this, 'TargetPlayer' => $targetPlayer, 'Hit' => false);
113
		return $return;
114
	}
115
116
	public function &shootPlayerAsForce(SmrForce $forces, AbstractSmrPlayer $targetPlayer, $minesAreAttacker = false) {
117
		$return = array('Weapon' => $this, 'TargetPlayer' => $targetPlayer, 'Hit' => true);
118
		$this->doForceDamageToPlayer($return, $forces, $targetPlayer, $minesAreAttacker);
119
		$forces->takeMines($return['ActualDamage']['Launched']);
120
		return $return;
121
	}
122
123
	protected function &doForceDamageToPlayer(array &$return, SmrForce $forces, AbstractSmrPlayer $targetPlayer, $minesAreAttacker = false) {
124
		$return['WeaponDamage'] =& $this->getModifiedForceDamageAgainstPlayer($forces, $targetPlayer, $minesAreAttacker);
125
		$return['ActualDamage'] =& $targetPlayer->getShip()->doMinesDamage($return['WeaponDamage']);
126
		$return['ActualDamage']['Launched'] = ICeil($return['WeaponDamage']['Launched'] * $return['ActualDamage']['TotalDamage'] / $return['WeaponDamage']['MaxDamage']);
127
128
		if ($return['ActualDamage']['KillingShot']) {
129
			$return['KillResults'] =& $targetPlayer->killPlayerByForces($forces);
130
		}
131
		return $return;
132
	}
133
}
134