예제 #1
0
파일: test_ship.py 프로젝트: Ebag333/eos
 def test_other_domain(self):
     influence_target = CharacterItem(self.ch.type_(type_id=2, attributes={self.tgt_attr.id: 100}))
     self.fit.items.add(influence_target)
     self.assertAlmostEqual(influence_target.attributes[self.tgt_attr.id], 100)
     self.fit.items.remove(self.influence_source)
     self.fit.items.remove(influence_target)
     self.assertEqual(len(self.log), 0)
     self.assert_link_buffers_empty(self.fit)
예제 #2
0
 def test_character(self):
     self.fit.character = self.influence_source
     influence_target = CharacterItem(self.ch.type_(type_id=1, attributes={self.tgt_attr.id: 100}))
     self.fit.items.add(influence_target)
     self.assertNotAlmostEqual(influence_target.attributes[self.tgt_attr.id], 100)
     self.fit.character = None
     self.assertAlmostEqual(influence_target.attributes[self.tgt_attr.id], 100)
     self.fit.items.remove(influence_target)
     self.assertEqual(len(self.log), 0)
     self.assert_link_buffers_empty(self.fit)
예제 #3
0
 def test_character(self):
     holder = CharacterItem(
         self.ch.type_(type_id=1,
                       effects=(self.effect, ),
                       attributes={
                           self.tgt_attr.id: 100,
                           self.src_attr.id: 20
                       }))
     self.fit.items.add(holder)
     self.assertNotAlmostEqual(holder.attributes[self.tgt_attr.id], 100)
     self.fit.items.remove(holder)
     self.assertEqual(len(self.log), 0)
     self.assert_link_buffers_empty(self.fit)
예제 #4
0
 def test_attribute(self):
     attr1 = self.ch.attribute(attribute_id=1)
     attr2 = self.ch.attribute(attribute_id=2)
     attr3 = self.ch.attribute(attribute_id=3)
     modifier1 = Modifier()
     modifier1.state = State.offline
     modifier1.scope = Scope.local
     modifier1.src_attr = attr1.id
     modifier1.operator = Operator.post_mul
     modifier1.tgt_attr = attr2.id
     modifier1.domain = Domain.ship
     modifier1.filter_type = None
     modifier1.filter_value = None
     effect1 = self.ch.effect(effect_id=1, category=EffectCategory.passive)
     effect1.modifiers = (modifier1, )
     holder1 = CharacterItem(
         self.ch.type_(type_id=1,
                       effects=(effect1, ),
                       attributes={attr1.id: 5}))
     modifier2 = Modifier()
     modifier2.state = State.offline
     modifier2.scope = Scope.local
     modifier2.src_attr = attr2.id
     modifier2.operator = Operator.post_percent
     modifier2.tgt_attr = attr3.id
     modifier2.domain = Domain.ship
     modifier2.filter_type = FilterType.all_
     modifier2.filter_value = None
     effect2 = self.ch.effect(effect_id=2, category=EffectCategory.passive)
     effect2.modifiers = (modifier2, )
     holder2 = IndependentItem(
         self.ch.type_(type_id=2,
                       effects=(effect2, ),
                       attributes={attr2.id: 7.5}))
     holder3 = ShipItem(self.ch.type_(type_id=3, attributes={attr3.id:
                                                             0.5}))
     self.fit.items.add(holder1)
     self.fit.ship = holder2
     self.fit.items.add(holder3)
     self.assertAlmostEqual(holder3.attributes[attr3.id], 0.6875)
     holder1.attributes[attr1.id] = 4
     # Manually changed attribute must trigger damaging whole chain
     # of attributes, effectively allowing us to recalculate its new value
     self.assertAlmostEqual(holder3.attributes[attr3.id], 0.65)
     self.fit.items.remove(holder1)
     self.fit.ship = None
     self.fit.items.remove(holder3)
     self.assertEqual(len(self.log), 0)
     self.assert_link_buffers_empty(self.fit)
 def test_attribute(self):
     attr1 = self.ch.attribute(attribute_id=1)
     attr2 = self.ch.attribute(attribute_id=2)
     attr3 = self.ch.attribute(attribute_id=3)
     modifier1 = Modifier()
     modifier1.state = State.offline
     modifier1.scope = Scope.local
     modifier1.src_attr = attr1.id
     modifier1.operator = Operator.post_mul
     modifier1.tgt_attr = attr2.id
     modifier1.domain = Domain.ship
     modifier1.filter_type = None
     modifier1.filter_value = None
     effect1 = self.ch.effect(effect_id=1, category=EffectCategory.passive)
     effect1.modifiers = (modifier1, )
     holder1 = CharacterItem(
         self.ch.type_(type_id=1,
                       effects=(effect1, ),
                       attributes={attr1.id: 5}))
     modifier2 = Modifier()
     modifier2.state = State.offline
     modifier2.scope = Scope.local
     modifier2.src_attr = attr2.id
     modifier2.operator = Operator.post_percent
     modifier2.tgt_attr = attr3.id
     modifier2.domain = Domain.ship
     modifier2.filter_type = FilterType.all_
     modifier2.filter_value = None
     effect2 = self.ch.effect(effect_id=2, category=EffectCategory.passive)
     effect2.modifiers = (modifier2, )
     holder2 = IndependentItem(
         self.ch.type_(type_id=2,
                       effects=(effect2, ),
                       attributes={attr2.id: 7.5}))
     holder3 = ShipItem(self.ch.type_(type_id=3, attributes={attr3.id:
                                                             0.5}))
     self.fit.items.add(holder1)
     self.fit.ship = holder2
     self.fit.items.add(holder3)
     self.assertAlmostEqual(holder3.attributes[attr3.id], 0.6875)
     self.fit.items.remove(holder1)
     # When holder1 is removed, attr2 of holder2 and attr3 of holder3
     # must be cleaned to allow recalculation of attr3 based on new data
     self.assertAlmostEqual(holder3.attributes[attr3.id], 0.5375)
     self.fit.ship = None
     self.fit.items.remove(holder3)
     self.assertEqual(len(self.log), 0)
     self.assert_link_buffers_empty(self.fit)
예제 #6
0
 def test_other(self):
     # Here we check that self-reference modifies only carrier-item,
     # and nothing else is affected. We position item as character and
     # check character item to also check that items 'belonging' to self
     # are not affected too
     influence_source = IndependentItem(
         self.ch.type_(type_id=1,
                       effects=(self.effect, ),
                       attributes={
                           self.tgt_attr.id: 100,
                           self.src_attr.id: 20
                       }))
     self.fit.character = influence_source
     influence_target = CharacterItem(
         self.ch.type_(type_id=2, attributes={self.tgt_attr.id: 100}))
     self.fit.items.add(influence_target)
     self.assertAlmostEqual(influence_target.attributes[self.tgt_attr.id],
                            100)
     self.fit.character = None
     self.fit.items.remove(influence_target)
     self.assertEqual(len(self.log), 0)
     self.assert_link_buffers_empty(self.fit)
예제 #7
0
 def test_calculation(self):
     attr1 = self.ch.attribute(attribute_id=1)
     attr2 = self.ch.attribute(attribute_id=2)
     attr3 = self.ch.attribute(attribute_id=3)
     attr4 = self.ch.attribute(attribute_id=4)
     modifier1 = Modifier()
     modifier1.state = State.offline
     modifier1.scope = Scope.local
     modifier1.src_attr = attr1.id
     modifier1.operator = Operator.post_mul
     modifier1.tgt_attr = attr2.id
     modifier1.domain = Domain.self_
     modifier1.filter_type = None
     modifier1.filter_value = None
     effect1 = self.ch.effect(effect_id=1, category=EffectCategory.passive)
     effect1.modifiers = (modifier1, )
     modifier2 = Modifier()
     modifier2.state = State.offline
     modifier2.scope = Scope.local
     modifier2.src_attr = attr2.id
     modifier2.operator = Operator.post_percent
     modifier2.tgt_attr = attr3.id
     modifier2.domain = Domain.ship
     modifier2.filter_type = None
     modifier2.filter_value = None
     effect2 = self.ch.effect(effect_id=2, category=EffectCategory.passive)
     effect2.modifiers = (modifier2, )
     holder1 = CharacterItem(
         self.ch.type_(type_id=1,
                       effects=(effect1, effect2),
                       attributes={
                           attr1.id: 5,
                           attr2.id: 20
                       }))
     modifier3 = Modifier()
     modifier3.state = State.offline
     modifier3.scope = Scope.local
     modifier3.src_attr = attr3.id
     modifier3.operator = Operator.post_percent
     modifier3.tgt_attr = attr4.id
     modifier3.domain = Domain.ship
     modifier3.filter_type = FilterType.all_
     modifier3.filter_value = None
     effect3 = self.ch.effect(effect_id=3, category=EffectCategory.passive)
     effect3.modifiers = (modifier3, )
     holder2 = IndependentItem(
         self.ch.type_(type_id=2,
                       effects=(effect3, ),
                       attributes={attr3.id: 150}))
     holder3 = ShipItem(
         self.ch.type_(type_id=3, attributes={attr4.id: 12.5}))
     self.fit.items.add(holder1)
     self.fit.ship = holder2
     self.fit.items.add(holder3)
     # If everything is processed properly, holder1 will multiply attr2 by attr1
     # on self, resulting in 20 * 5 = 100, then apply it as percentage modifier
     # on ship's (holder2) attr3, resulting in 150 + 100% = 300, then it is applied
     # to all entities assigned to ship, including holder3, to theirs attr4 as
     # percentage modifier again - so final result is 12.5 + 300% = 50
     self.assertAlmostEqual(holder3.attributes[attr4.id], 50)
     self.fit.items.remove(holder1)
     self.fit.ship = None
     self.fit.items.remove(holder3)
     self.assertEqual(len(self.log), 0)
     self.assert_link_buffers_empty(self.fit)