Skip to content

Commit

Permalink
Linting and minor fixes, removal of Sprite classes
Browse files Browse the repository at this point in the history
  • Loading branch information
Cleptomania committed Aug 3, 2023
1 parent d5407f3 commit 888942d
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 559 deletions.
35 changes: 17 additions & 18 deletions python/arcade_accelerate/__init__.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
import sys

from arcade_accelerate import arcade_accelerate
from arcade_accelerate.module_patcher import AutoPopulatingDictionary, PatchingMetaPathFinder # type: ignore
from arcade_accelerate.module_patcher import (
AutoPopulatingDictionary,
PatchingMetaPathFinder,
)


def bootstrap():
patches = AutoPopulatingDictionary()
Expand All @@ -12,32 +16,27 @@ def bootstrap():
patch_geometry(patches)
patch_hitboxes(patches)
patch_spritelist_collision(patches)
patch_sprite(patches)


def patch_hitboxes(patches):
patches['arcade.hitbox.base'].HitBox = arcade_accelerate.HitBox
patches['arcade.hitbox.base'].RotatableHitBox = arcade_accelerate.RotatableHitBox
patches["arcade.hitbox.base"].HitBox = arcade_accelerate.HitBox
patches["arcade.hitbox.base"].RotatableHitBox = arcade_accelerate.RotatableHitBox


def patch_spritelist_collision(patches):
patches['arcade.sprite_list.collision'].check_for_collision_with_list = (
arcade_accelerate.check_for_collision_with_list
)
patches['arcade.sprite_list.collision'].check_for_collision_with_lists = (
arcade_accelerate.check_for_collision_with_lists
)
patches[
"arcade.sprite_list.collision"
].check_for_collision_with_list = arcade_accelerate.check_for_collision_with_list
patches[
"arcade.sprite_list.collision"
].check_for_collision_with_lists = arcade_accelerate.check_for_collision_with_lists


def patch_math(patches):
patches['arcade.math'].rotate_point = arcade_accelerate.rotate_point
patches["arcade.math"].rotate_point = arcade_accelerate.rotate_point


def patch_geometry(patches):
patches['arcade.geometry'].are_polygons_intersecting = (
arcade_accelerate.are_polygons_intersecting
)


def patch_sprite(patches):
patches['arcade.sprite.base'].BasicSprite = arcade_accelerate.BasicSprite
patches[
"arcade.geometry"
].are_polygons_intersecting = arcade_accelerate.are_polygons_intersecting
24 changes: 18 additions & 6 deletions python/arcade_accelerate/module_patcher.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import sys

from importlib.abc import Loader, MetaPathFinder
from importlib.machinery import ModuleSpec
from types import ModuleType, SimpleNamespace
Expand All @@ -9,33 +11,43 @@ def __missing__(self, key):
self[key] = item = SimpleNamespace()
return item


class PatchingMetaPathFinder(MetaPathFinder):
def __init__(self, patches):
self._patches = patches

def _remaining_meta_path(self):
index_of_self = sys.meta_path.index(self)
remaining_meta_path = sys.meta_path[index_of_self+1:]
remaining_meta_path = sys.meta_path[index_of_self + 1 :]
return remaining_meta_path

def find_spec(self, fullname: str, path: Sequence[str] | None, target: ModuleType | None = ...) -> ModuleSpec | None:
def find_spec(
self, fullname: str, path: Sequence[str] | None, target: ModuleType | None = ...
) -> ModuleSpec | None:
spec = None
for finder in self._remaining_meta_path():
spec = finder.find_spec(fullname, path, target)
if spec is not None:
if spec.name in self._patches:
if type(spec) is not ModuleSpec:
raise Exception("Expecting type of module spec to be ModuleSpec, not a subtype")
spec.loader = PatchingLoader(spec.loader, self._patches[spec.name].__dict__)
raise Exception(
"Type of module spec to be ModuleSpec, not a subtype"
)
spec.loader = PatchingLoader(
spec.loader, self._patches[spec.name].__dict__
)
break
return spec



class PatchingLoader(Loader):
def __init__(self, loader: Loader, patches: dict):
self._loader = loader
self._patches = patches

def create_module(self, spec: ModuleSpec) -> ModuleType | None:
return self._loader.create_module(spec)

def exec_module(self, module: ModuleType) -> None:
self._loader.exec_module(module)
module.__dict__.update(self._patches)
module.__dict__.update(self._patches)
5 changes: 0 additions & 5 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,6 @@ pub use geometry::{
is_point_in_polygon,
};

mod sprite;
pub use sprite::{BasicSprite, Sprite};

mod sprite_list;
pub use sprite_list::{check_for_collision_with_list, check_for_collision_with_lists};

Expand All @@ -22,8 +19,6 @@ pub use sprite_list::{check_for_collision_with_list, check_for_collision_with_li
fn arcade_accelerate(_py: Python, m: &PyModule) -> PyResult<()> {
m.add_class::<HitBox>()?;
m.add_class::<RotatableHitBox>()?;
m.add_class::<BasicSprite>()?;
m.add_class::<Sprite>()?;
m.add_function(wrap_pyfunction!(math::rotate_point, m)?)?;
m.add_function(wrap_pyfunction!(math::clamp, m)?)?;
m.add_function(wrap_pyfunction!(math::lerp, m)?)?;
Expand Down
Loading

0 comments on commit 888942d

Please sign in to comment.