Browse Source

place egg on other egg if place available

Bastien Sevajol 9 years ago
parent
commit
e1d6551e61

+ 26 - 7
intelligine/synergy/event/transport/PutableAction.py View File

@@ -1,6 +1,8 @@
1 1
 from synergine.synergy.event.Action import Action
2 2
 from intelligine.synergy.event.transport.PutableEvent import PutableEvent
3 3
 from intelligine.cst import CANT_CARRY_STILL
4
+from xyzworld.cst import POSITIONS
5
+from synergine.synergy.event.exception.ActionAborted import ActionAborted
4 6
 
5 7
 
6 8
 class PutableAction(Action):
@@ -14,16 +16,33 @@ class PutableAction(Action):
14 16
         pass
15 17
 
16 18
     def run(self, obj, collection, context, synergy_manager):
17
-        # TODO: TEST
18
-        # TODO: Enlever le state de transportable a ce qui est transporte
19
-        # ?! Comment gerer lorsque deux obj vont vouloir transporter le meme objet ? process !
19
+        # TODO: DEV
20 20
         obj_id_transportable = self._parameters['objects_ids_transportable'][0]
21 21
         obj_transportable = synergy_manager.get_map().get_object(obj_id_transportable)
22
+        # TODO: Cette logique de calcul cote process!
23
+        position_to_put = self._get_position_to_put(context, obj, obj_transportable)
22 24
         # TODO: Doit etre du meme type que ce qui est transporte !
23 25
         obj_transported = obj.get_carried()
24 26
         obj_transported.set_carried_by(None)
25
-        obj.put_carry(obj_transported)
27
+        obj.put_carry(obj_transported, position_to_put)
26 28
         context.metas.value.set(CANT_CARRY_STILL, obj.get_id(), 5)
27
-        # TODO: Il faut interdire cette action pendant un temps pour eviter que le fourmis deplace
28
-        # les memes objets direct apres
29
-        # Utiliser les metas pour ca ?
29
+
30
+    def _get_position_to_put(self, context, obj, obj_transportable):
31
+        obj_transportable_pos = obj_transportable.get_position()
32
+        if self._is_available_position(context, obj_transportable_pos):
33
+            return obj_transportable_pos
34
+        poss_arround_target = context.get_arround_points_of_point(obj_transportable_pos)
35
+        poss_arround_obj = context.get_arround_points_of_point(obj.get_position())
36
+        # For each position between target and current transporter
37
+        for pos_arround_target in poss_arround_target:
38
+            if pos_arround_target in poss_arround_obj:
39
+                if self._is_available_position(context, pos_arround_target):
40
+                    return pos_arround_target
41
+        raise ActionAborted()
42
+
43
+    def _is_available_position(self, context, position):
44
+        # TODO: Pour le moment on ne regarde pas si ce sont tous des oeufs
45
+        count_obj_here = len(context.metas.list.get(POSITIONS, position, allow_empty=True))
46
+        if count_obj_here <= 5:
47
+            return True
48
+        return False

+ 4 - 2
intelligine/synergy/object/ant/Ant.py View File

@@ -11,9 +11,11 @@ class Ant(Bug):
11 11
         context.metas.collections.add_list(self.get_id(), [COL_TRANSPORTER_NOT_CARRYING, COL_FIGHTER])
12 12
         self._carried = []
13 13
 
14
-    def put_carry(self, obj):
14
+    def put_carry(self, obj, position=None):
15
+        if position is None:
16
+            position = self._get_position()
15 17
         self._carried.remove(obj)
16
-        obj.set_position(self.get_position())
18
+        obj.set_position(position)
17 19
         self._context.metas.states.remove(self.get_id(), CARRYING)
18 20
 
19 21
     def get_carried(self):