tilemap-parser 3.1.15__tar.gz → 3.1.16__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.
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/PKG-INFO +1 -1
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/pyproject.toml +1 -1
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/runtime/tile_collision.py +45 -19
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser.egg-info/PKG-INFO +1 -1
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/tests/test_tile_collision.py +55 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/LICENSE +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/README.md +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/setup.cfg +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/__init__.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/parser/__init__.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/parser/animation.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/parser/collision.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/parser/collision_loader.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/parser/map_parse.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/parser/node_parse.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/parser/particle.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/runtime/__init__.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/runtime/animation_player.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/runtime/area_node.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/runtime/collision_cache.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/runtime/map_loader.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/runtime/object_collision.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/runtime/particles.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/runtime/renderer.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/utils/__init__.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/utils/geometry.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser.egg-info/SOURCES.txt +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser.egg-info/dependency_links.txt +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser.egg-info/requires.txt +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser.egg-info/top_level.txt +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/tests/test_collision.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/tests/test_geometry.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/tests/test_map_loader.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/tests/test_object_collision.py +0 -0
- {tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/tests/test_render_scale.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tilemap-parser
|
|
3
|
-
Version: 3.1.
|
|
3
|
+
Version: 3.1.16
|
|
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 = "3.1.
|
|
7
|
+
version = "3.1.16"
|
|
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"
|
{tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/runtime/tile_collision.py
RENAMED
|
@@ -441,6 +441,7 @@ class CollisionRunner:
|
|
|
441
441
|
self.gravity = 800.0
|
|
442
442
|
self.max_fall_speed = 600.0
|
|
443
443
|
self.jump_strength = -400.0
|
|
444
|
+
self.horizontal_speed = 200.0
|
|
444
445
|
|
|
445
446
|
self.ground_snap_tolerance = 2.0
|
|
446
447
|
self.step_height = 4.0
|
|
@@ -797,6 +798,7 @@ class CollisionRunner:
|
|
|
797
798
|
dt: float,
|
|
798
799
|
input_x: float = 0.0,
|
|
799
800
|
jump_pressed: bool = False,
|
|
801
|
+
velocity: Optional[Vector2] = None,
|
|
800
802
|
) -> CollisionResult:
|
|
801
803
|
"""
|
|
802
804
|
Move sprite with platformer physics (gravity, jumping).
|
|
@@ -808,8 +810,11 @@ class CollisionRunner:
|
|
|
808
810
|
tileset_collision: Tileset collision data
|
|
809
811
|
tile_map: Dictionary mapping (tile_x, tile_y) to tile_id
|
|
810
812
|
dt: Delta time in seconds
|
|
811
|
-
input_x: Horizontal input (-1 to 1)
|
|
812
|
-
jump_pressed: Whether jump button is pressed
|
|
813
|
+
input_x: Horizontal input (-1 to 1) for built-in movement
|
|
814
|
+
jump_pressed: Whether jump button is pressed for built-in movement
|
|
815
|
+
velocity: Optional explicit velocity (vx, vy). When provided, the
|
|
816
|
+
runner skips built-in input/gravity/jump velocity calculation
|
|
817
|
+
and only resolves collision for that velocity.
|
|
813
818
|
|
|
814
819
|
Returns:
|
|
815
820
|
CollisionResult with final position and collision info
|
|
@@ -824,15 +829,19 @@ class CollisionRunner:
|
|
|
824
829
|
result.final_x = sprite.x
|
|
825
830
|
result.final_y = sprite.y
|
|
826
831
|
|
|
827
|
-
if
|
|
828
|
-
sprite.
|
|
829
|
-
|
|
830
|
-
|
|
832
|
+
if velocity is not None:
|
|
833
|
+
sprite.vx = velocity[0]
|
|
834
|
+
sprite.vy = velocity[1]
|
|
835
|
+
else:
|
|
836
|
+
if not getattr(sprite, "on_ground", False):
|
|
837
|
+
sprite.vy += self.gravity * dt
|
|
838
|
+
if sprite.vy > self.max_fall_speed:
|
|
839
|
+
sprite.vy = self.max_fall_speed
|
|
831
840
|
|
|
832
|
-
|
|
833
|
-
|
|
841
|
+
if jump_pressed and getattr(sprite, "on_ground", False):
|
|
842
|
+
sprite.vy = self.jump_strength
|
|
834
843
|
|
|
835
|
-
|
|
844
|
+
sprite.vx = input_x * self.horizontal_speed
|
|
836
845
|
|
|
837
846
|
delta_x = sprite.vx * dt
|
|
838
847
|
delta_y = sprite.vy * dt
|
|
@@ -1325,6 +1334,7 @@ class CollisionRunner:
|
|
|
1325
1334
|
dt: float,
|
|
1326
1335
|
input_x: float = 0.0,
|
|
1327
1336
|
jump_pressed: bool = False,
|
|
1337
|
+
velocity: Optional[Vector2] = None,
|
|
1328
1338
|
) -> CollisionResult:
|
|
1329
1339
|
"""
|
|
1330
1340
|
Slope-aware platformer movement.
|
|
@@ -1360,6 +1370,13 @@ class CollisionRunner:
|
|
|
1360
1370
|
jump_pressed:
|
|
1361
1371
|
True if jump was pressed during this frame.
|
|
1362
1372
|
|
|
1373
|
+
velocity:
|
|
1374
|
+
Optional explicit velocity (vx, vy). When provided, the runner
|
|
1375
|
+
skips built-in input/gravity/jump velocity calculation and only
|
|
1376
|
+
resolves collision for that velocity. This is the preferred
|
|
1377
|
+
path for dash, knockback, wind, moving-platform carry, or a
|
|
1378
|
+
custom controller.
|
|
1379
|
+
|
|
1363
1380
|
Returns:
|
|
1364
1381
|
CollisionResult describing the resolved movement and collision
|
|
1365
1382
|
state after simulation.
|
|
@@ -1381,18 +1398,25 @@ class CollisionRunner:
|
|
|
1381
1398
|
was_on_ground = getattr(sprite, "on_ground", False)
|
|
1382
1399
|
jumped = False
|
|
1383
1400
|
|
|
1384
|
-
if
|
|
1385
|
-
sprite.
|
|
1386
|
-
sprite.
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
if sprite.vy > self.max_fall_speed:
|
|
1391
|
-
sprite.vy = self.max_fall_speed
|
|
1401
|
+
if velocity is not None:
|
|
1402
|
+
sprite.vx = velocity[0]
|
|
1403
|
+
sprite.vy = velocity[1]
|
|
1404
|
+
if sprite.vy < 0.0:
|
|
1405
|
+
sprite.on_ground = False
|
|
1406
|
+
jumped = True
|
|
1392
1407
|
else:
|
|
1393
|
-
|
|
1408
|
+
if jump_pressed and was_on_ground:
|
|
1409
|
+
sprite.vy = self.jump_strength
|
|
1410
|
+
sprite.on_ground = False
|
|
1411
|
+
jumped = True
|
|
1412
|
+
elif not was_on_ground:
|
|
1413
|
+
sprite.vy += self.gravity * dt
|
|
1414
|
+
if sprite.vy > self.max_fall_speed:
|
|
1415
|
+
sprite.vy = self.max_fall_speed
|
|
1416
|
+
else:
|
|
1417
|
+
sprite.vy = min(sprite.vy, 0.0)
|
|
1394
1418
|
|
|
1395
|
-
|
|
1419
|
+
sprite.vx = input_x * self.horizontal_speed
|
|
1396
1420
|
delta_x = sprite.vx * dt
|
|
1397
1421
|
delta_y = sprite.vy * dt
|
|
1398
1422
|
bottom_offset = old_bottom - old_y
|
|
@@ -1662,6 +1686,7 @@ class CollisionRunner:
|
|
|
1662
1686
|
dt,
|
|
1663
1687
|
input_x=kwargs.get("input_x", 0.0),
|
|
1664
1688
|
jump_pressed=kwargs.get("jump_pressed", False),
|
|
1689
|
+
velocity=kwargs.get("velocity"),
|
|
1665
1690
|
)
|
|
1666
1691
|
elif self.mode == MovementMode.RPG:
|
|
1667
1692
|
return self.move_rpg(sprite, tileset_collision, tile_map, delta_x, delta_y)
|
|
@@ -1736,6 +1761,7 @@ class CollisionRunner:
|
|
|
1736
1761
|
runner.gravity = 800.0
|
|
1737
1762
|
runner.max_fall_speed = 600.0
|
|
1738
1763
|
runner.jump_strength = -400.0
|
|
1764
|
+
runner.horizontal_speed = 200.0
|
|
1739
1765
|
runner.slide_friction = 0.1
|
|
1740
1766
|
runner._game_type = "platformer"
|
|
1741
1767
|
runner._strict = strict
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tilemap-parser
|
|
3
|
-
Version: 3.1.
|
|
3
|
+
Version: 3.1.16
|
|
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
|
|
@@ -267,6 +267,43 @@ class TestMovePlatformer:
|
|
|
267
267
|
assert sprite.x > 137
|
|
268
268
|
assert result.hit_wall_x is False
|
|
269
269
|
|
|
270
|
+
def test_explicit_velocity_controls_horizontal_movement(self):
|
|
271
|
+
tile_map = {}
|
|
272
|
+
sprite = MockSprite(x=100, y=100)
|
|
273
|
+
sprite.vx = 0
|
|
274
|
+
sprite.vy = 0
|
|
275
|
+
sprite.on_ground = True
|
|
276
|
+
|
|
277
|
+
result = self.runner.move_platformer(
|
|
278
|
+
sprite,
|
|
279
|
+
self.tileset,
|
|
280
|
+
tile_map,
|
|
281
|
+
dt=0.016,
|
|
282
|
+
input_x=0,
|
|
283
|
+
velocity=(600.0, 0.0),
|
|
284
|
+
)
|
|
285
|
+
|
|
286
|
+
assert result.final_x == pytest.approx(109.6)
|
|
287
|
+
assert sprite.vx == pytest.approx(600.0)
|
|
288
|
+
|
|
289
|
+
def test_move_convenience_forwards_explicit_velocity(self):
|
|
290
|
+
sprite = MockSprite(x=100, y=100)
|
|
291
|
+
sprite.vx = 0
|
|
292
|
+
sprite.vy = 0
|
|
293
|
+
sprite.on_ground = True
|
|
294
|
+
|
|
295
|
+
result = self.runner.move(
|
|
296
|
+
sprite,
|
|
297
|
+
self.tileset,
|
|
298
|
+
{},
|
|
299
|
+
dt=0.016,
|
|
300
|
+
input_x=0,
|
|
301
|
+
velocity=(600.0, 0.0),
|
|
302
|
+
)
|
|
303
|
+
|
|
304
|
+
assert result.final_x == pytest.approx(109.6)
|
|
305
|
+
assert sprite.vx == pytest.approx(600.0)
|
|
306
|
+
|
|
270
307
|
|
|
271
308
|
class TestMovePlatformerWithSlide:
|
|
272
309
|
def setup_method(self):
|
|
@@ -334,6 +371,24 @@ class TestMovePlatformerWithSlide:
|
|
|
334
371
|
assert sprite.x == 103
|
|
335
372
|
assert result.hit_wall_x is True
|
|
336
373
|
|
|
374
|
+
def test_explicit_velocity_controls_dash_without_input_scaling(self):
|
|
375
|
+
sprite = MockSprite(x=100, y=100)
|
|
376
|
+
sprite.vx = 0
|
|
377
|
+
sprite.vy = 0
|
|
378
|
+
sprite.on_ground = True
|
|
379
|
+
|
|
380
|
+
result = self.runner.move_platformer_with_slide(
|
|
381
|
+
sprite,
|
|
382
|
+
self.tileset,
|
|
383
|
+
{},
|
|
384
|
+
dt=0.016,
|
|
385
|
+
input_x=0,
|
|
386
|
+
velocity=(600.0, 0.0),
|
|
387
|
+
)
|
|
388
|
+
|
|
389
|
+
assert result.final_x == pytest.approx(109.6)
|
|
390
|
+
assert sprite.vx == pytest.approx(600.0)
|
|
391
|
+
|
|
337
392
|
|
|
338
393
|
class TestMoveRpg:
|
|
339
394
|
def setup_method(self):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/parser/collision_loader.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/runtime/animation_player.py
RENAMED
|
File without changes
|
|
File without changes
|
{tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/runtime/collision_cache.py
RENAMED
|
File without changes
|
|
File without changes
|
{tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser/runtime/object_collision.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{tilemap_parser-3.1.15 → tilemap_parser-3.1.16}/src/tilemap_parser.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|