Modified collision checking sprite selection once more

main
Yan Wittmann 2023-03-28 20:01:09 +02:00
parent 0b3ff79002
commit 33ada24b84
3 changed files with 21 additions and 2 deletions

View File

@ -5,13 +5,13 @@
#,#,S,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,# #,#,S,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
#,#,S,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,# #,#,S,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
#,#,S,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,# #,#,S,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
#,#,S,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,C,,,# #,#,S,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,L,,,,,,,,,,,,,,,,,,,,,,,,C,,,#
#,#,S,,,,,,,,,,,,,,,,,,,+,+,+,+,S,S,S,S,S,+,+,+,+,+,S,S,S,S,S,+,+,+,+,+,S,S,S,S,S,+,+,+,+,+,+,+,+,+,# #,#,S,,,,,,,,,,,,,,,,,,,+,+,+,+,S,S,S,S,S,+,+,+,+,+,S,S,S,S,S,+,+,+,+,+,S,S,S,S,S,+,+,+,+,+,+,+,+,+,#
#,#,S,,,,,,,,,,,,,,,,,,,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,# #,#,S,,,,,,,,,,,,,,,,,,,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#
#,#,S,,,,,,,,,,,,,,,,,,,,,#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,# #,#,S,,,,,,,,,,,,,,,,,,,,,#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
#,#,S,,,,,,,,,,,,,,,,,,,,,#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,# #,#,S,,,,,,,,,,,,,,,,,,,,,#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
#,#,,,,,,,,,,,,,,,,,,,,,,G,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,# #,#,,,,,,,,,,,,,,,,,,,,,,G,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
#,,,,,,,,,,,,,,,M,,,M,M,M,M,M,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,# #,,,,,,,,,,,,,,,M,,,M,M,,M,,,,,,,,,,,,,,,,,M,,,,,,M,,,,,,,,,,,,,,,#
#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,# #,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
#,,,,,,,,,,,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,# #,,,,,,,,,,,+,+,+,+,+,+,+,+,+,+,+,+,+,+,+,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#
#,L,,,,,,,,,,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,# #,L,,,,,,,,,,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#

1 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
5 # # S #
6 # # S #
7 # # S #
8 # # S L C #
9 # # S + + + + S S S S S + + + + + S S S S S + + + + + S S S S S + + + + + + + + + #
10 # # S # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
11 # # S # #
12 # # S # #
13 # # G #
14 # M M M M M M M M #
15 # #
16 # + + + + + + + + + + + + + + + #
17 # L # # # # # # # # # # # # # # # #

View File

@ -1,3 +1,4 @@
import random
from typing import Optional from typing import Optional
from physics.CollisionDirection import CollisionDirection from physics.CollisionDirection import CollisionDirection
@ -55,6 +56,14 @@ class PhysicsElementsHandler:
dynamic_sprites = [sprite for sprite in sprites if isinstance(sprite, DynamicSprite)] dynamic_sprites = [sprite for sprite in sprites if isinstance(sprite, DynamicSprite)]
sorted_dynamic_sprites = sorted(dynamic_sprites, key=lambda spr: spr.position_scale.position[1]) sorted_dynamic_sprites = sorted(dynamic_sprites, key=lambda spr: spr.position_scale.position[1])
skip_sprites = []
for sprite in sorted_dynamic_sprites:
if sprite.last_effective_motion[1] == 0 and sprite.last_effective_motion[0] == 0 \
and random.randint(0, 100) > 50:
skip_sprites.append(sprite)
continue
sorted_dynamic_sprites = [sprite for sprite in sorted_dynamic_sprites if sprite not in skip_sprites]
closest_sprites: dict[UiElement, list[tuple[int, StaticSprite]]] = {} closest_sprites: dict[UiElement, list[tuple[int, StaticSprite]]] = {}
buffered_bounding_boxes: dict[UiElement, BoundingBox] = {} buffered_bounding_boxes: dict[UiElement, BoundingBox] = {}
@ -123,6 +132,7 @@ class PhysicsElementsHandler:
collides_with_last = None collides_with_last = None
collided = [False, False] collided = [False, False]
effective_motion = [0, 0]
for i in range(motion_steps): for i in range(motion_steps):
if not collided[0]: if not collided[0]:
@ -132,6 +142,9 @@ class PhysicsElementsHandler:
) )
collides_with = self.check_collides(sprite, colliders) collides_with = self.check_collides(sprite, colliders)
if len(collides_with) == 0:
effective_motion[0] += motion_step[0]
for collider in collides_with: for collider in collides_with:
if collider is not None: if collider is not None:
if sprite.is_collider and collider.is_collider: if sprite.is_collider and collider.is_collider:
@ -176,6 +189,9 @@ class PhysicsElementsHandler:
) )
collides_with = self.check_collides(sprite, colliders) collides_with = self.check_collides(sprite, colliders)
if len(collides_with) == 0:
effective_motion[1] += motion_step[1]
for collider in collides_with: for collider in collides_with:
if collider is not None: if collider is not None:
if sprite.is_collider and collider.is_collider: if sprite.is_collider and collider.is_collider:
@ -213,6 +229,8 @@ class PhysicsElementsHandler:
collides_with_last = collider collides_with_last = collider
collided[1] = True collided[1] = True
sprite.last_effective_motion = (sprite.motion[0], sprite.motion[1])
return collides_with_last return collides_with_last
def check_collides(self, sprite: StaticSprite, colliders: list[StaticSprite]) -> list[StaticSprite]: def check_collides(self, sprite: StaticSprite, colliders: list[StaticSprite]) -> list[StaticSprite]:

View File

@ -11,6 +11,7 @@ class DynamicSprite(StaticSprite):
super().__init__(spritesheet) super().__init__(spritesheet)
self.motion = (0, 0) self.motion = (0, 0)
self.last_effective_motion = (1, 1)
self.apply_base_deceleration = True self.apply_base_deceleration = True
self.deceleration_horizontal_air = 0.02 self.deceleration_horizontal_air = 0.02