예제 #1
0
파일: test_charge.py 프로젝트: pyfa-org/eos
 def test_fit_charge_to_fully_bound_charge(self):
     fit = Fit()
     fit_other = Fit()
     module = ModuleHigh(self.mktype().id, state=State.active, charge=None)
     charge = Charge(self.mktype().id)
     module_other = ModuleHigh(self.mktype().id,
                               state=State.active,
                               charge=None)
     charge_other = Charge(self.mktype().id)
     fit.modules.high.append(module)
     fit_other.modules.high.append(module_other)
     module.charge = charge
     module_other.charge = charge_other
     # Action
     with self.assertRaises(ValueError):
         module.charge = charge_other
     # Verification
     self.assertIs(module.charge, charge)
     self.assertIs(module_other.charge, charge_other)
     # Cleanup
     self.assert_item_buffers_empty(module)
     self.assert_item_buffers_empty(charge)
     self.assert_item_buffers_empty(module_other)
     self.assert_item_buffers_empty(charge_other)
     self.assert_solsys_buffers_empty(fit.solar_system)
     self.assert_solsys_buffers_empty(fit_other.solar_system)
     self.assert_log_entries(0)
예제 #2
0
 def test_arguments_custom_filter(self):
     item1 = ModuleHigh(
         self.mktype(
             group_id=55,
             attrs={
                 AttrId.dmg_mult: 2,
                 AttrId.capacity: 1,
                 AttrId.charge_rate: 1,
                 self.cycle_attr.id: 2500,
                 AttrId.reload_time: 2000},
             effects=[self.dd_effect],
             default_effect=self.dd_effect).id,
         state=State.active)
     item1.charge = Charge(self.mktype(attrs={
         AttrId.em_dmg: 1.2,
         AttrId.therm_dmg: 2.4,
         AttrId.kin_dmg: 4.8,
         AttrId.expl_dmg: 9.6,
         AttrId.volume: 1}).id)
     self.fit.modules.high.append(item1)
     item2 = ModuleHigh(
         self.mktype(
             group_id=54,
             attrs={
                 AttrId.dmg_mult: 2,
                 AttrId.capacity: 1,
                 AttrId.charge_rate: 1,
                 self.cycle_attr.id: 2000,
                 AttrId.reload_time: 2000},
             effects=[self.dd_effect],
             default_effect=self.dd_effect).id,
         state=State.active)
     item2.charge = Charge(self.mktype(attrs={
         AttrId.em_dmg: 12,
         AttrId.therm_dmg: 24,
         AttrId.kin_dmg: 48,
         AttrId.expl_dmg: 96,
         AttrId.volume: 1}).id)
     self.fit.modules.high.append(item2)
     # Action
     stats_dps = self.fit.stats.get_dps(
         item_filter=lambda i: i._type.group_id == 55)
     # Verification
     self.assertAlmostEqual(stats_dps.em, 0.96)
     self.assertAlmostEqual(stats_dps.thermal, 1.92)
     self.assertAlmostEqual(stats_dps.kinetic, 3.84)
     self.assertAlmostEqual(stats_dps.explosive, 7.68)
     self.assertAlmostEqual(stats_dps.total, 14.4)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #3
0
 def test_arguments_custom_filter(self):
     item1 = ModuleHigh(self.mktype(group_id=55,
                                    attrs={
                                        AttrId.capacity: 2.0,
                                        AttrId.charge_rate: 1.0,
                                        AttrId.dmg_mult: 2
                                    },
                                    effects=[self.dd_effect],
                                    default_effect=self.dd_effect).id,
                        state=State.active)
     item1.charge = Charge(
         self.mktype(
             attrs={
                 AttrId.volume: 1.0,
                 AttrId.em_dmg: 1.2,
                 AttrId.therm_dmg: 2.4,
                 AttrId.kin_dmg: 4.8,
                 AttrId.expl_dmg: 9.6
             }).id)
     self.fit.modules.high.append(item1)
     item2 = ModuleHigh(self.mktype(group_id=54,
                                    attrs={
                                        AttrId.capacity: 2.0,
                                        AttrId.charge_rate: 1.0,
                                        AttrId.dmg_mult: 2
                                    },
                                    effects=[self.dd_effect],
                                    default_effect=self.dd_effect).id,
                        state=State.active)
     item2.charge = Charge(
         self.mktype(
             attrs={
                 AttrId.volume: 1.0,
                 AttrId.em_dmg: 12,
                 AttrId.therm_dmg: 24,
                 AttrId.kin_dmg: 48,
                 AttrId.expl_dmg: 96
             }).id)
     self.fit.modules.high.append(item2)
     # Action
     stats_volley = self.fit.stats.get_volley(
         item_filter=lambda i: i._type.group_id == 55)
     # Verification
     self.assertAlmostEqual(stats_volley.em, 2.4)
     self.assertAlmostEqual(stats_volley.thermal, 4.8)
     self.assertAlmostEqual(stats_volley.kinetic, 9.6)
     self.assertAlmostEqual(stats_volley.explosive, 19.2)
     self.assertAlmostEqual(stats_volley.total, 36)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #4
0
파일: test_charge.py 프로젝트: pyfa-org/eos
 def test_detached_module_charge_to_free_charge(self):
     module = ModuleHigh(self.mktype().id, state=State.active, charge=None)
     charge_type = self.mktype()
     charge1 = Charge(charge_type.id)
     charge2 = Charge(charge_type.id)
     module.charge = charge1
     # Action
     module.charge = charge2
     # Verification
     self.assertIs(module.charge, charge2)
     # Cleanup
     self.assert_item_buffers_empty(module)
     self.assert_item_buffers_empty(charge1)
     self.assert_item_buffers_empty(charge2)
     self.assert_log_entries(0)
예제 #5
0
 def test_multiple(self):
     item1 = ModuleHigh(self.mktype(attrs={
         AttrId.capacity: 2.0,
         AttrId.charge_rate: 1.0,
         AttrId.dmg_mult: 2
     },
                                    effects=[self.dd_effect],
                                    default_effect=self.dd_effect).id,
                        state=State.active)
     item1.charge = Charge(
         self.mktype(
             attrs={
                 AttrId.volume: 1.0,
                 AttrId.em_dmg: 1.2,
                 AttrId.therm_dmg: 2.4,
                 AttrId.kin_dmg: 4.8,
                 AttrId.expl_dmg: 9.6
             }).id)
     self.fit.modules.high.append(item1)
     item2 = ModuleHigh(self.mktype(attrs={
         AttrId.capacity: 2.0,
         AttrId.charge_rate: 1.0,
         AttrId.dmg_mult: 2
     },
                                    effects=[self.dd_effect],
                                    default_effect=self.dd_effect).id,
                        state=State.active)
     item2.charge = Charge(
         self.mktype(
             attrs={
                 AttrId.volume: 1.0,
                 AttrId.em_dmg: 12,
                 AttrId.therm_dmg: 24,
                 AttrId.kin_dmg: 48,
                 AttrId.expl_dmg: 96
             }).id)
     self.fit.modules.high.append(item2)
     # Action
     stats_volley = self.fit.stats.get_volley()
     # Verification
     self.assertAlmostEqual(stats_volley.em, 26.4)
     self.assertAlmostEqual(stats_volley.thermal, 52.8)
     self.assertAlmostEqual(stats_volley.kinetic, 105.6)
     self.assertAlmostEqual(stats_volley.explosive, 211.2)
     self.assertAlmostEqual(stats_volley.total, 396)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #6
0
 def test_cycles_until_reload_none(self):
     fit = Fit()
     item = ModuleHigh(self.mktype(attrs={
         AttrId.capacity: 2.0,
         self.cycle_attr.id: 2000,
         AttrId.charge_rate: 1.0,
         AttrId.reload_time: 10000
     },
                                   effects=[self.effect_item],
                                   default_effect=self.effect_item).id,
                       state=State.active)
     item.charge = Charge(
         self.mktype(attrs={
             AttrId.volume: 2.1,
             AttrId.em_dmg: 5.2,
             AttrId.therm_dmg: 6.3,
             AttrId.kin_dmg: 7.4,
             AttrId.expl_dmg: 8.5
         },
                     effects=[self.effect_charge],
                     default_effect=self.effect_charge).id)
     fit.modules.high.append(item)
     # Verification
     volley = item.get_volley()
     self.assertAlmostEqual(volley.em, 0)
     self.assertAlmostEqual(volley.thermal, 0)
     self.assertAlmostEqual(volley.kinetic, 0)
     self.assertAlmostEqual(volley.explosive, 0)
     self.assertAlmostEqual(volley.total, 0)
     # Cleanup
     self.assert_solsys_buffers_empty(fit.solar_system)
     self.assert_log_entries(0)
예제 #7
0
 def test_arguments_custom_reload(self):
     item = ModuleHigh(
         self.mktype(
             attrs={
                 AttrId.dmg_mult: 2,
                 AttrId.capacity: 1,
                 AttrId.charge_rate: 1,
                 self.cycle_attr.id: 3000,
                 AttrId.reload_time: 2000},
             effects=[self.dd_effect],
             default_effect=self.dd_effect).id,
         state=State.active)
     item.charge = Charge(self.mktype(attrs={
         AttrId.em_dmg: 1.2,
         AttrId.therm_dmg: 2.4,
         AttrId.kin_dmg: 4.8,
         AttrId.expl_dmg: 9.6,
         AttrId.volume: 1}).id)
     self.fit.modules.high.append(item)
     # Action
     stats_dps = self.fit.stats.get_dps(reload=True)
     # Verification
     self.assertAlmostEqual(stats_dps.em, 0.48)
     self.assertAlmostEqual(stats_dps.thermal, 0.96)
     self.assertAlmostEqual(stats_dps.kinetic, 1.92)
     self.assertAlmostEqual(stats_dps.explosive, 3.84)
     self.assertAlmostEqual(stats_dps.total, 7.2)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #8
0
파일: test_dps.py 프로젝트: pyfa-org/eos
 def test_reload(self):
     fit = Fit()
     item = ModuleHigh(self.mktype(attrs={
         AttrId.dmg_mult: 2.5,
         AttrId.capacity: 0.2,
         self.cycle_attr.id: 500,
         AttrId.reload_time: 5000
     },
                                   effects=[self.effect],
                                   default_effect=self.effect).id,
                       state=State.active)
     item.charge = Charge(
         self.mktype(
             attrs={
                 AttrId.volume: 0.1,
                 AttrId.hp: 2.0,
                 AttrId.crystals_get_damaged: 1.0,
                 AttrId.crystal_volatility_dmg: 0.8,
                 AttrId.crystal_volatility_chance: 0.5,
                 AttrId.em_dmg: 5.2,
                 AttrId.therm_dmg: 6.3,
                 AttrId.kin_dmg: 7.4,
                 AttrId.expl_dmg: 8.5
             }).id)
     fit.modules.high.append(item)
     # Verification
     dps = item.get_dps(reload=True)
     self.assertAlmostEqual(dps.em, 13)
     self.assertAlmostEqual(dps.thermal, 15.75)
     self.assertAlmostEqual(dps.kinetic, 18.5)
     self.assertAlmostEqual(dps.explosive, 21.25)
     self.assertAlmostEqual(dps.total, 68.5)
     # Cleanup
     self.assert_solsys_buffers_empty(fit.solar_system)
     self.assert_log_entries(0)
예제 #9
0
파일: test_volley.py 프로젝트: pyfa-org/eos
 def test_charge_attr_em_absent(self):
     fit = Fit()
     item = ModuleHigh(
         self.mktype(
             attrs={
                 AttrId.dmg_mult: 2.5,
                 AttrId.capacity: 2.0,
                 self.cycle_attr.id: 500,
                 AttrId.charge_rate: 1.0,
                 AttrId.reload_time: 5000},
             effects=[self.effect],
             default_effect=self.effect).id,
         state=State.active)
     item.charge = Charge(self.mktype(attrs={
         AttrId.volume: 0.2,
         AttrId.therm_dmg: 6.3,
         AttrId.kin_dmg: 7.4,
         AttrId.expl_dmg: 8.5}).id)
     fit.modules.high.append(item)
     # Verification
     volley = item.get_volley()
     self.assertAlmostEqual(volley.em, 0)
     self.assertAlmostEqual(volley.thermal, 15.75)
     self.assertAlmostEqual(volley.kinetic, 18.5)
     self.assertAlmostEqual(volley.explosive, 21.25)
     self.assertAlmostEqual(volley.total, 55.5)
     # Cleanup
     self.assert_solsys_buffers_empty(fit.solar_system)
     self.assert_log_entries(0)
예제 #10
0
파일: test_dps.py 프로젝트: pyfa-org/eos
 def test_reload(self):
     fit = Fit()
     item = ModuleHigh(
         self.mktype(
             attrs={
                 AttrId.capacity: 2.0,
                 self.cycle_attr.id: 2000,
                 AttrId.charge_rate: 1.0,
                 AttrId.reload_time: 10000},
             effects=[self.effect_item],
             default_effect=self.effect_item).id,
         state=State.active)
     item.charge = Charge(self.mktype(
         attrs={
             AttrId.volume: 0.1,
             AttrId.em_dmg: 5.2,
             AttrId.therm_dmg: 6.3,
             AttrId.kin_dmg: 7.4,
             AttrId.expl_dmg: 8.5},
         effects=[self.effect_charge],
         default_effect=self.effect_charge).id)
     fit.modules.high.append(item)
     # Verification
     dps = item.get_dps(reload=True)
     self.assertAlmostEqual(dps.em, 2.08)
     self.assertAlmostEqual(dps.thermal, 2.52)
     self.assertAlmostEqual(dps.kinetic, 2.96)
     self.assertAlmostEqual(dps.explosive, 3.4)
     self.assertAlmostEqual(dps.total, 10.96)
     # Cleanup
     self.assert_solsys_buffers_empty(fit.solar_system)
     self.assert_log_entries(0)
예제 #11
0
 def test_effective(self):
     fit = Fit()
     item = ModuleHigh(self.mktype(attrs={
         AttrId.dmg_mult: 2.5,
         AttrId.capacity: 2.0,
         self.cycle_attr.id: 500,
         AttrId.charge_rate: 1.0,
         AttrId.reload_time: 5000
     },
                                   effects=[self.effect],
                                   default_effect=self.effect).id,
                       state=State.active)
     item.charge = Charge(
         self.mktype(
             attrs={
                 AttrId.volume: 0.2,
                 AttrId.em_dmg: 5.2,
                 AttrId.therm_dmg: 6.3,
                 AttrId.kin_dmg: 7.4,
                 AttrId.expl_dmg: 8.5
             }).id)
     fit.modules.high.append(item)
     # Verification
     profile = ResistProfile(0.2, 0.2, 0.8, 1)
     dps = item.get_dps(tgt_resists=profile)
     self.assertAlmostEqual(dps.em, 20.8)
     self.assertAlmostEqual(dps.thermal, 25.2)
     self.assertAlmostEqual(dps.kinetic, 7.4)
     self.assertAlmostEqual(dps.explosive, 0)
     self.assertAlmostEqual(dps.total, 53.4)
     # Cleanup
     self.assert_solsys_buffers_empty(fit.solar_system)
     self.assert_log_entries(0)
예제 #12
0
 def test_reactivation_shorter_than_reload(self):
     fit = Fit()
     item = ModuleHigh(self.mktype(attrs={
         AttrId.dmg_mult: 2.5,
         AttrId.capacity: 2.0,
         self.cycle_attr.id: 500,
         AttrId.charge_rate: 1.0,
         AttrId.reload_time: 6500,
         AttrId.module_reactivation_delay: 1500
     },
                                   effects=[self.effect],
                                   default_effect=self.effect).id,
                       state=State.active)
     item.charge = Charge(
         self.mktype(
             attrs={
                 AttrId.volume: 0.2,
                 AttrId.em_dmg: 5.2,
                 AttrId.therm_dmg: 6.3,
                 AttrId.kin_dmg: 7.4,
                 AttrId.expl_dmg: 8.5
             }).id)
     fit.modules.high.append(item)
     # Verification
     dps = item.get_dps(reload=True)
     self.assertAlmostEqual(dps.em, 5.2)
     self.assertAlmostEqual(dps.thermal, 6.3)
     self.assertAlmostEqual(dps.kinetic, 7.4)
     self.assertAlmostEqual(dps.explosive, 8.5)
     self.assertAlmostEqual(dps.total, 27.4)
     # Cleanup
     self.assert_solsys_buffers_empty(fit.solar_system)
     self.assert_log_entries(0)
예제 #13
0
 def test_charge_attr_expl_zero(self):
     item = ModuleHigh(self.mktype(attrs={
         AttrId.capacity: 2.0,
         AttrId.charge_rate: 1.0,
         AttrId.dmg_mult: 2
     },
                                   effects=[self.dd_effect],
                                   default_effect=self.dd_effect).id,
                       state=State.active)
     item.charge = Charge(
         self.mktype(attrs={
             AttrId.volume: 1.0,
             AttrId.expl_dmg: 0
         }).id)
     self.fit.modules.high.append(item)
     # Action
     stats_volley = self.fit.stats.get_volley()
     # Verification
     self.assertAlmostEqual(stats_volley.em, 0)
     self.assertAlmostEqual(stats_volley.thermal, 0)
     self.assertAlmostEqual(stats_volley.kinetic, 0)
     self.assertAlmostEqual(stats_volley.explosive, 0)
     self.assertAlmostEqual(stats_volley.total, 0)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #14
0
파일: test_cycles.py 프로젝트: pyfa-org/eos
 def test_round_down(self):
     fit = Fit()
     item = ModuleHigh(self.mktype(attrs={
         AttrId.capacity: 1.0
     },
                                   effects=[self.effect],
                                   default_effect=self.effect).id,
                       state=State.active)
     item.charge = Charge(
         self.mktype(
             attrs={
                 AttrId.volume: 1.0,
                 AttrId.crystals_get_damaged: 1.0,
                 AttrId.hp: 1.0,
                 AttrId.crystal_volatility_chance: 0.1,
                 AttrId.crystal_volatility_dmg: 0.01,
                 AttrId.em_dmg: 1.0,
                 AttrId.therm_dmg: 1.0,
                 AttrId.kin_dmg: 1.0,
                 AttrId.expl_dmg: 1.0
             }).id)
     fit.modules.high.append(item)
     # Verification
     self.assertEqual(item.cycles_until_reload, 1000)
     # Cleanup
     self.assert_solsys_buffers_empty(fit.solar_system)
     self.assert_log_entries(0)
예제 #15
0
 def test_arguments_custom_profile(self):
     item = ModuleHigh(self.mktype(attrs={
         AttrId.capacity: 2.0,
         AttrId.charge_rate: 1.0,
         AttrId.dmg_mult: 2
     },
                                   effects=[self.dd_effect],
                                   default_effect=self.dd_effect).id,
                       state=State.active)
     item.charge = Charge(
         self.mktype(
             attrs={
                 AttrId.volume: 1.0,
                 AttrId.em_dmg: 1.2,
                 AttrId.therm_dmg: 2.4,
                 AttrId.kin_dmg: 4.8,
                 AttrId.expl_dmg: 9.6
             }).id)
     self.fit.modules.high.append(item)
     # Action
     resists = ResistProfile(0, 1, 1, 1)
     stats_volley = self.fit.stats.get_volley(tgt_resists=resists)
     # Verification
     self.assertAlmostEqual(stats_volley.em, 2.4)
     self.assertAlmostEqual(stats_volley.thermal, 0)
     self.assertAlmostEqual(stats_volley.kinetic, 0)
     self.assertAlmostEqual(stats_volley.explosive, 0)
     self.assertAlmostEqual(stats_volley.total, 2.4)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #16
0
 def test_charge_attr_kin_zero(self):
     item = ModuleHigh(
         self.mktype(
             attrs={
                 AttrId.dmg_mult: 2,
                 AttrId.capacity: 1,
                 AttrId.charge_rate: 1,
                 self.cycle_attr.id: 2500,
                 AttrId.reload_time: 2000},
             effects=[self.dd_effect],
             default_effect=self.dd_effect).id,
         state=State.active)
     item.charge = Charge(self.mktype(
         attrs={AttrId.kin_dmg: 0, AttrId.volume: 1}).id)
     self.fit.modules.high.append(item)
     # Action
     stats_dps = self.fit.stats.get_dps()
     # Verification
     self.assertAlmostEqual(stats_dps.em, 0)
     self.assertAlmostEqual(stats_dps.thermal, 0)
     self.assertAlmostEqual(stats_dps.kinetic, 0)
     self.assertAlmostEqual(stats_dps.explosive, 0)
     self.assertAlmostEqual(stats_dps.total, 0)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #17
0
 def test_source_to_none(self):
     tgt_attr = self.mkattr()
     src_attr = self.mkattr()
     modifier_container = self.make_modifier(src_attr.id, tgt_attr.id)
     effect_container = self.mkeffect(category_id=EffectCategoryId.passive,
                                      modifiers=[modifier_container])
     container = ModuleHigh(
         self.mktype(attrs={
             src_attr.id: 20,
             tgt_attr.id: 100
         },
                     effects=[effect_container]).id)
     modifier_charge = self.make_modifier(src_attr.id, tgt_attr.id)
     effect_charge = self.mkeffect(category_id=EffectCategoryId.passive,
                                   modifiers=[modifier_charge])
     charge = Charge(
         self.mktype(attrs={
             src_attr.id: 40,
             tgt_attr.id: 50
         },
                     effects=[effect_charge]).id)
     self.fit.modules.high.append(container)
     container.charge = charge
     self.assertAlmostEqual(container.attrs[tgt_attr.id], 140)
     self.assertAlmostEqual(charge.attrs[tgt_attr.id], 60)
     # Action
     self.fit.solar_system.source = None
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #18
0
 def test_charge_not_loaded(self):
     src_attr = self.mkattr()
     modifier = self.mkmod(affectee_filter=ModAffecteeFilter.item,
                           affectee_domain=ModDomain.self,
                           affectee_attr_id=AttrId.dmg_mult,
                           operator=ModOperator.post_mul,
                           affector_attr_id=src_attr.id)
     effect = self.mkeffect(category_id=EffectCategoryId.passive,
                            modifiers=[modifier])
     item = ModuleHigh(self.mktype(attrs={
         AttrId.capacity: 2.0,
         AttrId.charge_rate: 1.0,
         AttrId.dmg_mult: 2,
         src_attr.id: 1.5
     },
                                   effects=(self.dd_effect, effect),
                                   default_effect=self.dd_effect).id,
                       state=State.active)
     item.charge = Charge(self.allocate_type_id())
     self.fit.modules.high.append(item)
     # Action
     stats_volley = self.fit.stats.get_volley()
     # Verification
     self.assertAlmostEqual(stats_volley.em, 0)
     self.assertAlmostEqual(stats_volley.thermal, 0)
     self.assertAlmostEqual(stats_volley.kinetic, 0)
     self.assertAlmostEqual(stats_volley.explosive, 0)
     self.assertAlmostEqual(stats_volley.total, 0)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #19
0
파일: test_volley.py 프로젝트: pyfa-org/eos
 def test_charge_attr_em_absent(self):
     fit = Fit()
     item = ModuleHigh(self.mktype(attrs={
         AttrId.capacity: 60.0,
         self.cycle_attr.id: 5000,
         AttrId.charge_rate: 1.0,
         AttrId.reload_time: 10000,
         AttrId.module_reactivation_delay: 120000
     },
                                   effects=[self.effect_item],
                                   default_effect=self.effect_item).id,
                       state=State.active)
     item.charge = Charge(
         self.mktype(attrs={
             AttrId.volume: 30.0,
             AttrId.therm_dmg: 6300,
             AttrId.kin_dmg: 7400,
             AttrId.expl_dmg: 8500
         },
                     effects=[self.effect_charge],
                     default_effect=self.effect_charge).id)
     fit.modules.high.append(item)
     # Verification
     volley = item.get_volley()
     self.assertAlmostEqual(volley.em, 0)
     self.assertAlmostEqual(volley.thermal, 6300)
     self.assertAlmostEqual(volley.kinetic, 7400)
     self.assertAlmostEqual(volley.explosive, 8500)
     self.assertAlmostEqual(volley.total, 22200)
     # Cleanup
     self.assert_solsys_buffers_empty(fit.solar_system)
     self.assert_log_entries(0)
예제 #20
0
 def test_pass_autocharge_with_charge(self):
     charge = Charge(self.mktype(attrs={AttrId.volume: 2}).id)
     autocharge_type = self.mktype(attrs={AttrId.volume: 2})
     container_effect = self.mkeffect(
         effect_id=EffectId.target_attack,
         category_id=EffectCategoryId.target)
     container = ModuleHigh(
         self.mktype(
             attrs={
                 AttrId.capacity: 2,
                 AttrId.ammo_loaded: autocharge_type.id},
             effects=[container_effect]).id,
         state=State.offline)
     container.charge = charge
     self.fit.modules.high.append(container)
     self.assertIn(container_effect.id, container.autocharges)
     autocharge = container.autocharges[container_effect.id]
     # Action
     error1 = self.get_error(container, Restriction.charge_volume)
     # Verification
     self.assertIsNone(error1)
     # Action
     error2 = self.get_error(charge, Restriction.charge_volume)
     # Verification
     self.assertIsNone(error2)
     # Action
     error3 = self.get_error(autocharge, Restriction.charge_volume)
     # Verification
     self.assertIsNone(error3)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #21
0
파일: test_volley.py 프로젝트: poundjd/eos
 def test_effective_attr_single_expl_zero(self):
     fit = Fit()
     item = ModuleHigh(self.mktype(attrs={
         AttrId.dmg_mult: 2.5,
         AttrId.capacity: 2.0,
         self.cycle_attr.id: 500,
         AttrId.charge_rate: 1.0,
         AttrId.reload_time: 5000
     },
                                   effects=[self.effect],
                                   default_effect=self.effect).id,
                       state=State.active)
     item.charge = Charge(
         self.mktype(attrs={
             AttrId.volume: 0.2,
             AttrId.expl_dmg: 0
         }).id)
     fit.modules.high.append(item)
     # Verification
     profile = ResistProfile(0.2, 0.2, 0.8, 1)
     volley = item.get_volley(tgt_resists=profile)
     self.assertAlmostEqual(volley.em, 0)
     self.assertAlmostEqual(volley.thermal, 0)
     self.assertAlmostEqual(volley.kinetic, 0)
     self.assertAlmostEqual(volley.explosive, 0)
     self.assertAlmostEqual(volley.total, 0)
     # Cleanup
     self.assert_solsys_buffers_empty(fit.solar_system)
     self.assert_log_entries(0)
예제 #22
0
 def test_rep_amount_recalc_aar_attr_mult_changed(self):
     multmod_src_attr = self.mkattr()
     multmod_mod = self.mkmod(
         affectee_filter=ModAffecteeFilter.domain,
         affectee_domain=ModDomain.ship,
         affectee_attr_id=AttrId.charged_armor_dmg_mult,
         operator=ModOperator.post_percent,
         affector_attr_id=multmod_src_attr.id)
     multmod_effect = self.mkeffect(
         category_id=EffectCategoryId.passive,
         modifiers=[multmod_mod])
     multmod = ModuleLow(self.mktype(
         attrs={multmod_src_attr.id: 50},
         effects=[multmod_effect]).id)
     effect = self.mkeffect(
         effect_id=EffectId.fueled_armor_repair,
         category_id=EffectCategoryId.active)
     aar = ModuleLow(
         self.mktype(
             attrs={
                 AttrId.armor_dmg_amount: 50,
                 AttrId.charged_armor_dmg_mult: 3},
             effects=[effect],
             default_effect=effect).id,
         state=State.active)
     aar.charge = Charge(self.mktype(type_id=TypeId.nanite_repair_paste).id)
     self.fit.modules.low.append(aar)
     self.assertAlmostEqual(aar.attrs[AttrId.armor_dmg_amount], 150)
     # Action
     self.fit.modules.low.append(multmod)
     # Verification
     self.assertAlmostEqual(aar.attrs[AttrId.armor_dmg_amount], 225)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #23
0
파일: test_volley.py 프로젝트: pyfa-org/eos
 def test_charge_not_loaded(self):
     fit = Fit()
     item = ModuleHigh(
         self.mktype(
             attrs={
                 AttrId.dmg_mult: 2.5,
                 AttrId.capacity: 2.0,
                 self.cycle_attr.id: 500,
                 AttrId.charge_rate: 1.0,
                 AttrId.reload_time: 5000},
             effects=[self.effect],
             default_effect=self.effect).id,
         state=State.active)
     item.charge = Charge(self.allocate_type_id())
     fit.modules.high.append(item)
     # Verification
     volley = item.get_volley()
     self.assertAlmostEqual(volley.em, 0)
     self.assertAlmostEqual(volley.thermal, 0)
     self.assertAlmostEqual(volley.kinetic, 0)
     self.assertAlmostEqual(volley.explosive, 0)
     self.assertAlmostEqual(volley.total, 0)
     # Cleanup
     self.assert_solsys_buffers_empty(fit.solar_system)
     self.assert_log_entries(0)
예제 #24
0
 def test_no_influence_from_charge(self):
     # Charge shouldn't be able to affect autocharge
     autocharge_type = self.mktype(attrs={self.tgt_attr.id: 10})
     charge_modifier = self.mkmod_filter_item(ModDomain.other)
     charge_effect = self.mkeffect(category_id=EffectCategoryId.passive,
                                   modifiers=[charge_modifier])
     charge = Charge(
         self.mktype(attrs={
             self.src_attr.id: 50
         }, effects=[charge_effect]).id)
     container_effect = self.mkeffect(effect_id=EffectId.target_attack,
                                      category_id=EffectCategoryId.target)
     container = ModuleHigh(self.mktype(attrs={
         self.autocharge_attr_id:
         autocharge_type.id
     },
                                        effects=[container_effect]).id,
                            charge=charge,
                            state=State.active)
     # Action
     self.fit.modules.high.append(container)
     # Verification
     self.assertIn(container_effect.id, container.autocharges)
     autocharge = container.autocharges[container_effect.id]
     self.assertAlmostEqual(autocharge.attrs[self.tgt_attr.id], 10)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #25
0
파일: test_dps.py 프로젝트: pyfa-org/eos
 def test_reload(self):
     fit = Fit()
     item = ModuleHigh(self.mktype(attrs={
         AttrId.capacity: 60.0,
         self.cycle_attr.id: 5000,
         AttrId.charge_rate: 1.0,
         AttrId.reload_time: 10000,
         AttrId.module_reactivation_delay: 120000
     },
                                   effects=[self.effect_item],
                                   default_effect=self.effect_item).id,
                       state=State.active)
     item.charge = Charge(
         self.mktype(attrs={
             AttrId.volume: 30.0,
             AttrId.em_dmg: 5200,
             AttrId.therm_dmg: 6300,
             AttrId.kin_dmg: 7400,
             AttrId.expl_dmg: 8500
         },
                     effects=[self.effect_charge],
                     default_effect=self.effect_charge).id)
     fit.modules.high.append(item)
     # Verification
     dps = item.get_dps(reload=True)
     # Reload doesn't affect DPS because reactivation time is higher, item
     # manages to reload during that time
     self.assertAlmostEqual(dps.em, 41.6)
     self.assertAlmostEqual(dps.thermal, 50.4)
     self.assertAlmostEqual(dps.kinetic, 59.2)
     self.assertAlmostEqual(dps.explosive, 68)
     self.assertAlmostEqual(dps.total, 219.2)
     # Cleanup
     self.assert_solsys_buffers_empty(fit.solar_system)
     self.assert_log_entries(0)
예제 #26
0
 def setUp(self):
     StatsTestCase.setUp(self)
     self.mkattr(attr_id=AttrId.em_dmg)
     self.mkattr(attr_id=AttrId.therm_dmg)
     self.mkattr(attr_id=AttrId.kin_dmg)
     self.mkattr(attr_id=AttrId.expl_dmg)
     self.mkattr(attr_id=AttrId.dmg_mult)
     self.mkattr(attr_id=AttrId.volume)
     self.mkattr(attr_id=AttrId.capacity)
     self.mkattr(attr_id=AttrId.reload_time)
     self.mkattr(attr_id=AttrId.charge_rate)
     self.mkattr(attr_id=AttrId.fighter_ability_kamikaze_dmg_em)
     self.mkattr(attr_id=AttrId.fighter_ability_kamikaze_dmg_therm)
     self.mkattr(attr_id=AttrId.fighter_ability_kamikaze_dmg_kin)
     self.mkattr(attr_id=AttrId.fighter_ability_kamikaze_dmg_expl)
     cycle_attr = self.mkattr()
     effect_dd = self.mkeffect(effect_id=EffectId.projectile_fired,
                               category_id=EffectCategoryId.active,
                               duration_attr_id=cycle_attr.id)
     effect_suppressor = self.mkeffect(
         effect_id=EffectId.fighter_ability_kamikaze,
         category_id=EffectCategoryId.target,
         duration_attr_id=cycle_attr.id)
     item_dd = ModuleHigh(self.mktype(attrs={
         AttrId.dmg_mult: 2,
         AttrId.capacity: 1,
         AttrId.charge_rate: 1,
         cycle_attr.id: 2500,
         AttrId.reload_time: 2000
     },
                                      effects=[effect_dd],
                                      default_effect=effect_dd).id,
                          state=State.active)
     item_dd.charge = Charge(
         self.mktype(
             attrs={
                 AttrId.volume: 1.0,
                 AttrId.em_dmg: 1.2,
                 AttrId.therm_dmg: 2.4,
                 AttrId.kin_dmg: 4.8,
                 AttrId.expl_dmg: 9.6
             }).id)
     self.item_suppressor = FighterSquad(self.mktype(
         attrs={
             AttrId.fighter_ability_kamikaze_dmg_em: 50000,
             AttrId.fighter_ability_kamikaze_dmg_therm: 50000,
             AttrId.fighter_ability_kamikaze_dmg_kin: 50000,
             AttrId.fighter_ability_kamikaze_dmg_expl: 50000,
             AttrId.fighter_squadron_max_size: 6,
             cycle_attr.id: 10000
         },
         effects=[effect_suppressor],
         default_effect=effect_suppressor,
         abilities_data={
             FighterAbilityId.kamikaze: AbilityData(0, math.inf)
         }).id,
                                         state=State.active)
     self.fit.modules.high.append(item_dd)
     self.fit.fighters.add(self.item_suppressor)
예제 #27
0
파일: test_charge.py 프로젝트: pyfa-org/eos
 def test_fit_charge_to_free_charge(self):
     fit = Fit()
     module = ModuleHigh(self.mktype().id, state=State.active, charge=None)
     charge1 = Charge(self.mktype().id)
     charge2 = Charge(self.mktype().id)
     fit.modules.high.append(module)
     module.charge = charge1
     # Action
     module.charge = charge2
     # Verification
     self.assertIs(module.charge, charge2)
     # Cleanup
     self.assert_item_buffers_empty(module)
     self.assert_item_buffers_empty(charge1)
     self.assert_item_buffers_empty(charge2)
     self.assert_solsys_buffers_empty(fit.solar_system)
     self.assert_log_entries(0)
예제 #28
0
 def test_none_and_data(self):
     # As container for damage dealers is not ordered, this test may be
     # unreliable (even if there's issue, it won't fail each run)
     item1 = ModuleHigh(
         self.mktype(
             attrs={
                 AttrId.dmg_mult: 2,
                 AttrId.capacity: 1,
                 AttrId.charge_rate: 1,
                 self.cycle_attr.id: 2500,
                 AttrId.reload_time: 2000},
             effects=[self.dd_effect],
             default_effect=self.dd_effect).id,
         state=State.active)
     item1.charge = Charge(self.mktype(attrs={
         AttrId.em_dmg: 1.2,
         AttrId.therm_dmg: 2.4,
         AttrId.kin_dmg: 4.8,
         AttrId.expl_dmg: 9.6,
         AttrId.volume: 1}).id)
     self.fit.modules.high.append(item1)
     item2 = ModuleHigh(
         self.mktype(
             attrs={
                 AttrId.dmg_mult: 2,
                 AttrId.capacity: 1,
                 AttrId.charge_rate: 1,
                 self.cycle_attr.id: 2000,
                 AttrId.reload_time: 2000},
             effects=[self.dd_effect],
             default_effect=self.dd_effect).id,
         state=State.active)
     item2.charge = Charge(self.mktype(attrs={AttrId.volume: 1}).id)
     self.fit.modules.high.append(item2)
     # Action
     stats_dps = self.fit.stats.get_dps()
     # Verification
     self.assertAlmostEqual(stats_dps.em, 0.96)
     self.assertAlmostEqual(stats_dps.thermal, 1.92)
     self.assertAlmostEqual(stats_dps.kinetic, 3.84)
     self.assertAlmostEqual(stats_dps.explosive, 7.68)
     self.assertAlmostEqual(stats_dps.total, 14.4)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)
예제 #29
0
파일: test_charge.py 프로젝트: pyfa-org/eos
 def test_detached_module_none_to_free_charge(self):
     module = ModuleHigh(self.mktype().id, state=State.active, charge=None)
     charge = Charge(self.mktype().id)
     # Action
     module.charge = charge
     # Verification
     self.assert_item_buffers_empty(module)
     self.assert_item_buffers_empty(charge)
     self.assertIs(module.charge, charge)
예제 #30
0
 def test_charge_skillrq_absent(self):
     self.mkattr(AttrId.em_dmg)
     charge = Charge(self.mktype(attrs={AttrId.em_dmg: 100}).id)
     self.launcher.charge = charge
     # Verification
     self.assertAlmostEqual(charge.attrs[AttrId.em_dmg], 100)
     # Cleanup
     self.assert_solsys_buffers_empty(self.fit.solar_system)
     self.assert_log_entries(0)