This commit is contained in:
Gabor Körber 2017-05-24 21:44:06 +02:00
parent 24d5711d82
commit c6d90a5aff

View File

@ -72,6 +72,28 @@ class Shields(DefensiveLayer):
self.current += self.recharge self.current += self.recharge
self.current = min(self.current, self.maximal) self.current = min(self.current, self.maximal)
class Evasion(DefensiveLayer):
""" Evasion is a special module, which has a chance to evade damage alltogether """
default_cooldown = 32 * 60
def __init__(self, evasion=None, default_cooldown=None):
super(Evasion, self).__init__(1, {}, 1)
self.evasion = evasion or 0.1
self.cooldown = 0
if default_cooldown:
# if default cooldown is given, override class variable with instance variable:
self.default_cooldown = default_cooldown
def get_damage(self, damage):
if self.cooldown == 0 and random.random()<self.evasion:
self.cooldown = self.default_cooldown
return 0
else: return damage
def update(self):
if self.cooldown > 0:
self.cooldown -= 1
class Weapon(ShipModule): class Weapon(ShipModule):
""" Weapons can fire """ Weapons can fire
On this class we save some class variables, which act as default values. On this class we save some class variables, which act as default values.
@ -98,6 +120,15 @@ class Weapon(ShipModule):
def fire(self, other_ship, me=None): def fire(self, other_ship, me=None):
if not other_ship: if not other_ship:
return return
if self.ammo == 0:
# no ammo
return
elif self.ammo < 0:
# infinite ammo
pass
else:
# reduce ammo
self.ammo -= 1
if self._heat == 0: if self._heat == 0:
other_ship.on_hit(self.damage, self.damage_type, me or self.ship) other_ship.on_hit(self.damage, self.damage_type, me or self.ship)
self._heat = self.cooldown self._heat = self.cooldown
@ -194,12 +225,30 @@ class FreeForAll(object):
def main(): def main():
game = FreeForAll() game = FreeForAll()
game.add_ship(Spaceship('Rocinante', modules=[DefensiveLayer(350), Weapon(100), Weapon(100)]))
game.add_ship(Spaceship('Protoss Carrier', modules=[Shields(1000), DefensiveLayer(100), Weapon(15, 2), Weapon(15, 2)]))
game.add_ship(Spaceship('Rocinante', modules=[ Evasion(0.2, default_cooldown=100),
DefensiveLayer(450, resistances={'kinetic': 0.01, 'phase': 0.4, None: 0.1}),
Weapon(ammo=1200, damage=12, cooldown=2, damage_type='kinetic'),
Weapon(ammo=1200, damage=12, cooldown=2, damage_type='kinetic'),
Weapon(ammo=1200, damage=12, cooldown=2, damage_type='kinetic'),
Weapon(ammo=1200, damage=12, cooldown=2, damage_type='kinetic'),
]
))
game.add_ship(Spaceship('Protoss Carrier', modules=[Shields(1000, resistances={None: 0.2, 'kinetic': 0.5, 'phase': 0.0}, recharge=4),
DefensiveLayer(100, resistances={None: -0.1, 'kinetic': 0.0, 'phase': 0.2}),
Weapon(-1, damage=15, cooldown=5, damage_type='phase'),
Weapon(-1, damage=15, cooldown=5, damage_type='phase')
]))
# and add 100 raptors. # and add 100 raptors.
for x in range(1, 100): for x in range(1, 100):
game.add_ship(Spaceship(f'Raptor {x}', modules=[Shields(100), DefensiveLayer(50), Weapon(10,5), Weapon(10,5)])) game.add_ship(Spaceship(f'Raptor {x}', modules=[Evasion(0.05), Shields(100, recharge=0.2, resistances={'kinetic': 0.2}),
DefensiveLayer(50, resistances={'phase': 0.25}),
Weapon(ammo=120,damage=10, cooldown=5, damage_type='kinetic'),
Weapon(ammo=120,damage=10, cooldown=5, damage_type='kinetic'),
Weapon(ammo=12, damage=40, cooldown=100, damage_type='phase')]))
game.run() game.run()