tilemap-parser 4.2.2__tar.gz → 4.2.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/PKG-INFO +1 -1
  2. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/pyproject.toml +1 -1
  3. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/__init__.py +1 -0
  4. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/runtime/__init__.py +2 -0
  5. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/runtime/object_collision.py +3 -10
  6. tilemap_parser-4.2.3/src/tilemap_parser/runtime/protocols.py +28 -0
  7. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/runtime/tile_collision.py +12 -11
  8. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser.egg-info/PKG-INFO +1 -1
  9. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser.egg-info/SOURCES.txt +1 -0
  10. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/LICENSE +0 -0
  11. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/README.md +0 -0
  12. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/setup.cfg +0 -0
  13. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/parser/__init__.py +0 -0
  14. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/parser/animation.py +0 -0
  15. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/parser/collision.py +0 -0
  16. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/parser/collision_loader.py +0 -0
  17. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/parser/map_parse.py +0 -0
  18. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/parser/node_parse.py +0 -0
  19. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/parser/particle.py +0 -0
  20. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/parser/tmx_converter.py +0 -0
  21. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/runtime/animation_player.py +0 -0
  22. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/runtime/area_node.py +0 -0
  23. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/runtime/camera.py +0 -0
  24. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/runtime/collision_cache.py +0 -0
  25. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/runtime/map_loader.py +0 -0
  26. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/runtime/map_object.py +0 -0
  27. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/runtime/particles.py +0 -0
  28. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/runtime/renderer.py +0 -0
  29. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/utils/__init__.py +0 -0
  30. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser/utils/geometry.py +0 -0
  31. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser.egg-info/dependency_links.txt +0 -0
  32. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser.egg-info/requires.txt +0 -0
  33. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/src/tilemap_parser.egg-info/top_level.txt +0 -0
  34. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/tests/test_camera.py +0 -0
  35. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/tests/test_collision.py +0 -0
  36. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/tests/test_geometry.py +0 -0
  37. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/tests/test_gid_collision.py +0 -0
  38. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/tests/test_integration_animation.py +0 -0
  39. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/tests/test_integration_collision.py +0 -0
  40. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/tests/test_integration_map_loader.py +0 -0
  41. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/tests/test_map_loader.py +0 -0
  42. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/tests/test_map_object.py +0 -0
  43. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/tests/test_move_grounded.py +0 -0
  44. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/tests/test_object_collision.py +0 -0
  45. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/tests/test_object_surfaces.py +0 -0
  46. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/tests/test_particle_emitter.py +0 -0
  47. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/tests/test_render_scale.py +0 -0
  48. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/tests/test_tile_collision.py +0 -0
  49. {tilemap_parser-4.2.2 → tilemap_parser-4.2.3}/tests/test_tmx_converter.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tilemap-parser
3
- Version: 4.2.2
3
+ Version: 4.2.3
4
4
  Summary: Standalone parser/loader for tilemap-editor JSON maps, sprite animations, and collision detection runtime.
5
5
  Author: tilemap parser contributors
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tilemap-parser"
7
- version = "4.2.2"
7
+ version = "4.2.3"
8
8
  description = "Standalone parser/loader for tilemap-editor JSON maps, sprite animations, and collision detection runtime."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -20,6 +20,7 @@ __all__ = [
20
20
  "CollisionPolygon",
21
21
  "CollisionResult",
22
22
  "CollisionRunner",
23
+ "ICollidable",
23
24
  "ICollidableObject",
24
25
  "ICollidableSprite",
25
26
  "LayerRenderStats",
@@ -18,6 +18,7 @@ from .tile_collision import (
18
18
  MovementMode,
19
19
  rect_vs_tilemap,
20
20
  )
21
+ from .protocols import ICollidable
21
22
  from .map_loader import TilemapData, load_map
22
23
  from .object_collision import (
23
24
  CollisionHit,
@@ -45,6 +46,7 @@ __all__ = [
45
46
  "CollisionHit",
46
47
  "CollisionResult",
47
48
  "CollisionRunner",
49
+ "ICollidable",
48
50
  "ICollidableObject",
49
51
  "ICollidableSprite",
50
52
  "LayerRenderStats",
@@ -33,27 +33,20 @@ from ..utils.geometry import (
33
33
  rect_vs_circle,
34
34
  rect_vs_rect,
35
35
  )
36
+ from .protocols import ICollidable
36
37
 
37
38
 
38
- class ICollidableObject(Protocol):
39
+ class ICollidableObject(ICollidable, Protocol):
39
40
  """
40
41
  Protocol for objects that can collide.
41
42
 
42
- Required attributes:
43
- x: World X position
44
- y: World Y position
45
- collision_shape: Shape for collision
46
- (RectangleShape, CircleShape, CapsuleShape, or CollisionPolygon)
43
+ All required attributes (x, y, collision_shape) are inherited from ICollidable.
47
44
 
48
45
  Optional attributes (with defaults):
49
46
  collision_layer: Layer this object is on (default: 1)
50
47
  collision_mask: Layers to collide with (default: 0xFFFFFFFF)
51
48
  """
52
49
 
53
- x: float
54
- y: float
55
- collision_shape: Union[RectangleShape, CircleShape, CapsuleShape, CollisionPolygon]
56
-
57
50
 
58
51
  @dataclass(slots=True)
59
52
  class CollisionHit:
@@ -0,0 +1,28 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import Protocol, Union
4
+
5
+ from ..parser.collision import (
6
+ CapsuleShape,
7
+ CircleShape,
8
+ CollisionPolygon,
9
+ RectangleShape,
10
+ )
11
+
12
+
13
+ class ICollidable(Protocol):
14
+ """Base protocol for anything with a world position and collision shape.
15
+
16
+ This is the minimal interface for participating in collision detection.
17
+ All collidable protocols (ICollidableSprite, ICollidableObject) extend this.
18
+
19
+ Required attributes:
20
+ x (float): World X position
21
+ y (float): World Y position
22
+ collision_shape: Shape used for collision detection
23
+ (RectangleShape, CircleShape, CapsuleShape, or CollisionPolygon)
24
+ """
25
+
26
+ x: float
27
+ y: float
28
+ collision_shape: Union[RectangleShape, CircleShape, CapsuleShape, CollisionPolygon]
@@ -23,12 +23,13 @@ from ..parser.collision import (
23
23
  RectangleShape,
24
24
  TilesetCollision,
25
25
  )
26
+ from .protocols import ICollidable
26
27
 
27
28
  Point = Tuple[float, float]
28
29
  Vector2 = Tuple[float, float]
29
30
 
30
31
 
31
- class ICollidableSprite(Protocol):
32
+ class ICollidableSprite(ICollidable, Protocol):
32
33
  """
33
34
  Interface that any sprite/character class must implement to use collision runners.
34
35
 
@@ -303,7 +304,7 @@ def _circle_polygon_collision_offset(
303
304
  return False
304
305
 
305
306
 
306
- def get_shape_bounds(sprite: ICollidableSprite) -> Tuple[float, float, float, float]:
307
+ def get_shape_bounds(sprite: ICollidable) -> Tuple[float, float, float, float]:
307
308
  """Get AABB bounds for sprite (left, top, right, bottom)"""
308
309
  shape = sprite.collision_shape
309
310
  if isinstance(shape, RectangleShape):
@@ -328,7 +329,7 @@ def get_shape_bounds(sprite: ICollidableSprite) -> Tuple[float, float, float, fl
328
329
 
329
330
 
330
331
  def check_sprite_polygon_collision(
331
- sprite: ICollidableSprite, polygon: CollisionPolygon
332
+ sprite: ICollidable, polygon: CollisionPolygon
332
333
  ) -> bool:
333
334
  """Check if sprite collides with a world-space polygon (legacy / public API)."""
334
335
  shape = sprite.collision_shape
@@ -349,7 +350,7 @@ def check_sprite_polygon_collision(
349
350
 
350
351
 
351
352
  def _check_sprite_polygon_offset(
352
- sprite: ICollidableSprite,
353
+ sprite: ICollidable,
353
354
  polygon: CollisionPolygon,
354
355
  ox: float,
355
356
  oy: float,
@@ -489,7 +490,7 @@ class CollisionRunner:
489
490
  self,
490
491
  tileset_collision: TilesetCollision,
491
492
  tile_map: dict,
492
- sprite: ICollidableSprite,
493
+ sprite: ICollidable,
493
494
  margin: int = 1,
494
495
  ) -> List[CollisionPolygon]:
495
496
  """
@@ -529,7 +530,7 @@ class CollisionRunner:
529
530
 
530
531
  def _collides_at(
531
532
  self,
532
- sprite: ICollidableSprite,
533
+ sprite: ICollidable,
533
534
  tileset_collision: TilesetCollision,
534
535
  tile_map: dict,
535
536
  margin: int = 1,
@@ -567,7 +568,7 @@ class CollisionRunner:
567
568
 
568
569
  def _first_colliding_shape(
569
570
  self,
570
- sprite: ICollidableSprite,
571
+ sprite: ICollidable,
571
572
  tileset_collision: TilesetCollision,
572
573
  tile_map: dict,
573
574
  margin: int = 1,
@@ -603,7 +604,7 @@ class CollisionRunner:
603
604
 
604
605
  def move_and_slide(
605
606
  self,
606
- sprite: ICollidableSprite,
607
+ sprite: ICollidable,
607
608
  tileset_collision: TilesetCollision,
608
609
  tile_map: dict,
609
610
  delta_x: float,
@@ -729,7 +730,7 @@ class CollisionRunner:
729
730
 
730
731
  def _get_collision_normal_from_motion(
731
732
  self,
732
- sprite: ICollidableSprite,
733
+ sprite: ICollidable,
733
734
  polygon: CollisionPolygon,
734
735
  ox: float,
735
736
  oy: float,
@@ -1745,7 +1746,7 @@ class CollisionRunner:
1745
1746
 
1746
1747
  def move_rpg(
1747
1748
  self,
1748
- sprite: ICollidableSprite,
1749
+ sprite: ICollidable,
1749
1750
  tileset_collision: TilesetCollision,
1750
1751
  tile_map: dict,
1751
1752
  delta_x: float,
@@ -1814,7 +1815,7 @@ class CollisionRunner:
1814
1815
 
1815
1816
  def move(
1816
1817
  self,
1817
- sprite: ICollidableSprite,
1818
+ sprite: ICollidable,
1818
1819
  tileset_collision: TilesetCollision,
1819
1820
  tile_map: dict,
1820
1821
  delta_x: float = 0.0,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tilemap-parser
3
- Version: 4.2.2
3
+ Version: 4.2.3
4
4
  Summary: Standalone parser/loader for tilemap-editor JSON maps, sprite animations, and collision detection runtime.
5
5
  Author: tilemap parser contributors
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -24,6 +24,7 @@ src/tilemap_parser/runtime/map_loader.py
24
24
  src/tilemap_parser/runtime/map_object.py
25
25
  src/tilemap_parser/runtime/object_collision.py
26
26
  src/tilemap_parser/runtime/particles.py
27
+ src/tilemap_parser/runtime/protocols.py
27
28
  src/tilemap_parser/runtime/renderer.py
28
29
  src/tilemap_parser/runtime/tile_collision.py
29
30
  src/tilemap_parser/utils/__init__.py
File without changes
File without changes
File without changes