ya2 · news · projects · code · about

friction
authorFlavio Calva <f.calva@gmail.com>
Wed, 2 Mar 2022 18:28:35 +0000 (19:28 +0100)
committerFlavio Calva <f.calva@gmail.com>
Wed, 2 Mar 2022 18:28:35 +0000 (19:28 +0100)
pmachines/items/basketball.py
pmachines/items/box.py
pmachines/items/domino.py
pmachines/items/item.py
pmachines/items/shelf.py
pmachines/items/teetertooter.py
pmachines/scenes/scene_box.py
prj.org

index 80cc3deb10d292554869e922c16488d85166dd77..97fd680a835c3c4b99e5581848b6b8ea804cd877 100644 (file)
@@ -4,8 +4,8 @@ from pmachines.items.item import Item
 
 class Basketball(Item):
 
-    def __init__(self, world, plane_node, cb_inst, curr_bottom, repos, mass=1, pos=(0, 0, 0), r=0, count=0, restitution=.92):
-        super().__init__(world, plane_node, cb_inst, curr_bottom, repos, 'assets/gltf/basketball/basketball.gltf', .4, mass=mass, pos=pos, r=r, count=count, restitution=restitution)
+    def __init__(self, world, plane_node, cb_inst, curr_bottom, repos, mass=1, pos=(0, 0, 0), r=0, count=0, restitution=.92, friction=.6):
+        super().__init__(world, plane_node, cb_inst, curr_bottom, repos, 'assets/gltf/basketball/basketball.gltf', .4, mass=mass, pos=pos, r=r, count=count, restitution=restitution, friction=friction)
 
     def _set_shape(self):
         self.node.add_shape(BulletSphereShape(1))
index 859f70106978e0197ea731bfb8375b2b1ddc2a7e..15f95acf55f37e0f13ed647df0832e074837d8d1 100644 (file)
@@ -4,8 +4,8 @@ from pmachines.items.item import Item
 
 class Box(Item):
 
-    def __init__(self, world, plane_node, cb_inst, curr_bottom, repos, mass=1, pos=(0, 0, 0), r=0, count=0, restitution=.5):
-        super().__init__(world, plane_node, cb_inst, curr_bottom, repos, 'assets/gltf/box/box.gltf', mass=mass, pos=pos, r=r, count=count, restitution=restitution)
+    def __init__(self, world, plane_node, cb_inst, curr_bottom, repos, mass=1, pos=(0, 0, 0), r=0, count=0, restitution=.5, friction=.8):
+        super().__init__(world, plane_node, cb_inst, curr_bottom, repos, 'assets/gltf/box/box.gltf', mass=mass, pos=pos, r=r, count=count, restitution=restitution, friction=friction)
 
     def _set_shape(self):
         self.node.add_shape(BulletBoxShape((.5, .5, .5)))
index c037602ee26ca5debf4a173258bd8b3454c7ae17..cc370ae76e01426b81eb83c6bc8b1f5fec44e368 100644 (file)
@@ -4,8 +4,8 @@ from pmachines.items.item import Item, StillStrategy
 
 class Domino(Item):
 
-    def __init__(self, world, plane_node, cb_inst, curr_bottom, repos, mass=1, pos=(0, 0, 0), r=0, count=0, restitution=.5):
-        super().__init__(world, plane_node, cb_inst, curr_bottom, repos, 'assets/gltf/domino/domino.gltf', mass=mass, pos=pos, r=r, count=count, restitution=restitution)
+    def __init__(self, world, plane_node, cb_inst, curr_bottom, repos, mass=1, pos=(0, 0, 0), r=0, count=0, restitution=.5, friction=.6):
+        super().__init__(world, plane_node, cb_inst, curr_bottom, repos, 'assets/gltf/domino/domino.gltf', mass=mass, pos=pos, r=r, count=count, restitution=restitution, friction=friction)
 
     def _set_shape(self):
         self.node.add_shape(BulletBoxShape((.1, .25, .5)))
@@ -30,4 +30,4 @@ class DownStrategy(StillStrategy):
         self._np = np
 
     def win_condition(self):
-        return self._np.get_z() < -10 or super().win_condition() and abs(self._np.get_r()) >= self._tgt_degrees
+        return self._np.get_z() < -6 or super().win_condition() and abs(self._np.get_r()) >= self._tgt_degrees
index 5a5cc322bb1729cda92645c53dcb1e6570531caf..8077cafb33679476d2efbfb2203137b43dd70880 100644 (file)
@@ -28,11 +28,11 @@ class StillStrategy:
     def win_condition(self):
         self._positions += [self._np.get_pos()]
         self._rotations += [self._np.get_hpr()]
-        if len(self._positions) > 10:
+        if len(self._positions) > 30:
             self._positions.pop(0)
-        if len(self._rotations) > 10:
+        if len(self._rotations) > 30:
             self._rotations.pop(0)
-        if len(self._positions) < 8:
+        if len(self._positions) < 28:
             return
         avg_x = sum(pos.x for pos in self._positions) / len(self._positions)
         avg_y = sum(pos.y for pos in self._positions) / len(self._positions)
@@ -48,7 +48,7 @@ class StillStrategy:
 
 class Item:
 
-    def __init__(self, world, plane_node, cb_inst, curr_bottom, scene_repos, model_path, model_scale=1, exp_num_contacts=1, mass=1, pos=(0, 0, 0), r=0, count=0, restitution=.5):
+    def __init__(self, world, plane_node, cb_inst, curr_bottom, scene_repos, model_path, model_scale=1, exp_num_contacts=1, mass=1, pos=(0, 0, 0), r=0, count=0, restitution=.5, friction=.5):
         self._world = world
         self._plane_node = plane_node
         self._count = count
@@ -69,6 +69,7 @@ class Item:
         self._commands = []
         self._command_idx = -1
         self._restitution = restitution
+        self._friction = friction
         self._positions = []
         self._rotations = []
         if count:
@@ -197,6 +198,7 @@ class Item:
         self.node.set_mass(self._mass)
         self._world.attach_rigid_body(self.node)
         self.node.set_restitution(self._restitution)
+        self.node.set_friction(self._friction)
 
     def on_click_l(self, pos):
         if self._paused: return
@@ -304,15 +306,15 @@ class Item:
             self._txt.set_alpha_scale(1)
 
     def fail_condition(self):
-        if self._np.get_z() < -10:
+        if self._np.get_z() < -6:
             return True
         self._positions += [self._np.get_pos()]
         self._rotations += [self._np.get_hpr()]
-        if len(self._positions) > 10:
+        if len(self._positions) > 30:
             self._positions.pop(0)
-        if len(self._rotations) > 10:
+        if len(self._rotations) > 30:
             self._rotations.pop(0)
-        if len(self._positions) < 8:
+        if len(self._positions) < 28:
             return
         avg_x = sum(pos.x for pos in self._positions) / len(self._positions)
         avg_y = sum(pos.y for pos in self._positions) / len(self._positions)
index fb7b944700be5b49ad22f23e178c3a87a02ac7a0..af175f98fbb9140180c4ac0c6d981ab883e9cb8e 100644 (file)
@@ -4,8 +4,8 @@ from pmachines.items.item import Item
 
 class Shelf(Item):
 
-    def __init__(self, world, plane_node, cb_inst, curr_bottom, repos, mass=1, pos=(0, 0, 0), r=0, count=0, restitution=.5):
-        super().__init__(world, plane_node, cb_inst, curr_bottom, repos, 'assets/gltf/shelf/shelf.gltf', mass=mass, pos=pos, r=r, count=count, restitution=restitution)
+    def __init__(self, world, plane_node, cb_inst, curr_bottom, repos, mass=1, pos=(0, 0, 0), r=0, count=0, restitution=.5, friction=.6):
+        super().__init__(world, plane_node, cb_inst, curr_bottom, repos, 'assets/gltf/shelf/shelf.gltf', mass=mass, pos=pos, r=r, count=count, restitution=restitution, friction=friction)
 
     def _set_shape(self):
         self.node.add_shape(BulletBoxShape((1, .5, .05)))
index da14627b12f6ba285e891036466c4aa40c2a5b45..60f9e7b93d385bc506fbfa5d10781a67953cd89a 100644 (file)
@@ -5,8 +5,8 @@ from pmachines.items.item import Item
 
 class TeeterTooter(Item):
 
-    def __init__(self, world, plane_node, cb_inst, curr_bottom, repos, mass=1, pos=(0, 0, 0), r=0, count=0, restitution=.5):
-        super().__init__(world, plane_node, cb_inst, curr_bottom, repos, 'assets/gltf/teeter_tooter/teeter_tooter.gltf', exp_num_contacts=2, mass=1, pos=(0, 0, 0), r=0, count=0, restitution=restitution)
+    def __init__(self, world, plane_node, cb_inst, curr_bottom, repos, mass=1, pos=(0, 0, 0), r=0, count=0, restitution=.5, friction=.5):
+        super().__init__(world, plane_node, cb_inst, curr_bottom, repos, 'assets/gltf/teeter_tooter/teeter_tooter.gltf', exp_num_contacts=2, mass=1, pos=(0, 0, 0), r=0, count=0, restitution=restitution, friction=friction)
 
     def _set_shape(self):
         self.node.add_shape(
index e928b8dbd839dff6d4f53c250090f18257938199..2e8ac27edf3e6928d14885623c8b280935fb0544 100644 (file)
@@ -22,7 +22,7 @@ class SceneBox(Scene):
         self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(4.43, 0, -3.95))]
         self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(-1.29, 0, .26), r=28.45)]
         self.items += [Shelf(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, mass=0, pos=(2.15, 0, -1.49), r=28.45)]
-        self.items += [Box(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(-1.55, 0, 1.23))]
+        self.items += [Box(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(-1.55, 0, 1.23), friction=.4)]
         self.items += [Box(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, pos=(4.38, 0, -3.35))]
         self.items[-1].set_strategy(HitStrategy(self.items[-2], self.items[-1].node, self.items[-1]._world))
         #self.items += [Domino(self._world, self._mouse_plane_node, self.cb_inst, self.current_bottom, self.repos, count=2)]
diff --git a/prj.org b/prj.org
index 075a7753086a3ee5370f998c2b7ac2278b2eb6d3..d979cedcd6e08748f4b000d09390360e41508685 100644 (file)
--- a/prj.org
+++ b/prj.org
@@ -1,9 +1,11 @@
 * issues
 * todo
-** fix level names
-** add friction (level domino + box + basket ball)
 ** level teetertooter
 ** level domino + box + basketball + teetertooter
+** buttons of the scenes with played indications
+*** each scene has a last-modification
+*** when you win save the id + last-modification
+*** put a check if id is saved and last-modifications are equal
 ** intro animation (from target item to start position)
 ** optimize images creation (python setup.py images)
 ** use dds files in place of png/jpg