aether-engine 1.3.0__tar.gz → 1.3.1__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 (102) hide show
  1. {aether_engine-1.3.0/aether_engine.egg-info → aether_engine-1.3.1}/PKG-INFO +4 -4
  2. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/__init__.py +1 -1
  3. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/core/_identity.py +1 -1
  4. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/resources/serialization.py +19 -9
  5. {aether_engine-1.3.0 → aether_engine-1.3.1/aether_engine.egg-info}/PKG-INFO +4 -4
  6. {aether_engine-1.3.0 → aether_engine-1.3.1}/setup.py +21 -5
  7. {aether_engine-1.3.0 → aether_engine-1.3.1}/LICENSE +0 -0
  8. {aether_engine-1.3.0 → aether_engine-1.3.1}/MANIFEST.in +0 -0
  9. {aether_engine-1.3.0 → aether_engine-1.3.1}/README.md +0 -0
  10. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/ai/behavior_tree.py +0 -0
  11. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/ai/navmesh.py +0 -0
  12. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/animation/skeleton.py +0 -0
  13. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/assets/asset_pipeline.py +0 -0
  14. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/audio/__init__.py +0 -0
  15. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/audio/audio_manager.py +0 -0
  16. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/audio/music.py +0 -0
  17. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/audio/sfx.py +0 -0
  18. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/audio/sound.py +0 -0
  19. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/core/__init__.py +0 -0
  20. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/core/achievement_system.py +0 -0
  21. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/core/application.py +0 -0
  22. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/core/boot_splash.py +0 -0
  23. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/core/branding_guard.py +0 -0
  24. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/core/config.py +0 -0
  25. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/core/console.py +0 -0
  26. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/core/engine.py +0 -0
  27. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/core/event_bus.py +0 -0
  28. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/core/input.py +0 -0
  29. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/core/plugin_system.py +0 -0
  30. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/core/save_system.py +0 -0
  31. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/core/time_manager.py +0 -0
  32. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/core/window.py +0 -0
  33. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/editor/__init__.py +0 -0
  34. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/editor/__main__.py +0 -0
  35. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/editor/gizmo.py +0 -0
  36. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/editor/imgui_integration.py +0 -0
  37. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/editor/model_editor.py +0 -0
  38. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/environment/environment_system.py +0 -0
  39. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics/__init__.py +0 -0
  40. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics/camera.py +0 -0
  41. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics/first_person.py +0 -0
  42. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics/framebuffer.py +0 -0
  43. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics/light.py +0 -0
  44. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics/lod_system.py +0 -0
  45. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics/material.py +0 -0
  46. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics/mesh.py +0 -0
  47. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics/mesh_factory.py +0 -0
  48. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics/particle_system.py +0 -0
  49. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics/post_process.py +0 -0
  50. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics/renderer.py +0 -0
  51. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics/shader.py +0 -0
  52. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics/shader_library.py +0 -0
  53. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics/sky_atmosphere.py +0 -0
  54. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics/terrain.py +0 -0
  55. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics/texture.py +0 -0
  56. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics/water.py +0 -0
  57. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/graphics2d/__init__.py +0 -0
  58. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/network/network_manager.py +0 -0
  59. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/physics/__init__.py +0 -0
  60. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/physics/bullet_backend.py +0 -0
  61. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/physics/collider.py +0 -0
  62. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/physics/physics2d.py +0 -0
  63. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/physics/physics3d.py +0 -0
  64. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/physics/physics_world.py +0 -0
  65. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/physics/raycast.py +0 -0
  66. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/physics/rigidbody.py +0 -0
  67. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/platform/steam_api.py +0 -0
  68. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/resources/__init__.py +0 -0
  69. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/resources/asset_database.py +0 -0
  70. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/resources/loaders/model_loader.py +0 -0
  71. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/resources/loaders/obj_loader.py +0 -0
  72. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/resources/loaders/texture_loader.py +0 -0
  73. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/resources/resource_manager.py +0 -0
  74. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/resources/save_load.py +0 -0
  75. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/scene/__init__.py +0 -0
  76. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/scene/component.py +0 -0
  77. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/scene/entity.py +0 -0
  78. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/scene/scene.py +0 -0
  79. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/scene/scene_graph.py +0 -0
  80. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/scene/scene_manager.py +0 -0
  81. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/ui/__init__.py +0 -0
  82. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/ui/button.py +0 -0
  83. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/ui/canvas.py +0 -0
  84. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/ui/hud.py +0 -0
  85. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/ui/text.py +0 -0
  86. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/utils/__init__.py +0 -0
  87. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/utils/fonts.py +0 -0
  88. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/utils/logger.py +0 -0
  89. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/utils/math_utils.py +0 -0
  90. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/utils/object_pool.py +0 -0
  91. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether/utils/profiler.py +0 -0
  92. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether_engine.egg-info/SOURCES.txt +0 -0
  93. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether_engine.egg-info/dependency_links.txt +0 -0
  94. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether_engine.egg-info/entry_points.txt +0 -0
  95. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether_engine.egg-info/requires.txt +3 -3
  96. {aether_engine-1.3.0 → aether_engine-1.3.1}/aether_engine.egg-info/top_level.txt +0 -0
  97. {aether_engine-1.3.0 → aether_engine-1.3.1}/examples/01_hello_cube.py +0 -0
  98. {aether_engine-1.3.0 → aether_engine-1.3.1}/examples/02_sphere_scene.py +0 -0
  99. {aether_engine-1.3.0 → aether_engine-1.3.1}/examples/03_first_person.py +0 -0
  100. {aether_engine-1.3.0 → aether_engine-1.3.1}/examples/04_physics2d.py +0 -0
  101. {aether_engine-1.3.0 → aether_engine-1.3.1}/pyproject.toml +0 -0
  102. {aether_engine-1.3.0 → aether_engine-1.3.1}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aether-engine
3
- Version: 1.3.0
3
+ Version: 1.3.1
4
4
  Summary: 3D/2D game engine by entiti937 — OpenGL, physics, FPS, mandatory branding splash
5
5
  Home-page: https://pypi.org/project/aether-engine/
6
6
  Author: entiti937
@@ -29,12 +29,12 @@ Requires-Dist: pymunk>=6.0; extra == "physics"
29
29
  Provides-Extra: models
30
30
  Requires-Dist: trimesh>=3.21; extra == "models"
31
31
  Provides-Extra: full
32
- Requires-Dist: trimesh>=3.21; extra == "full"
33
- Requires-Dist: freetype-py>=2.4; extra == "full"
34
32
  Requires-Dist: pygame-ce>=2.5; extra == "full"
33
+ Requires-Dist: imageio>=2.31; extra == "full"
35
34
  Requires-Dist: pyyaml>=6.0; extra == "full"
35
+ Requires-Dist: trimesh>=3.21; extra == "full"
36
36
  Requires-Dist: pymunk>=6.0; extra == "full"
37
- Requires-Dist: imageio>=2.31; extra == "full"
37
+ Requires-Dist: freetype-py>=2.4; extra == "full"
38
38
  Dynamic: author
39
39
  Dynamic: classifier
40
40
  Dynamic: description
@@ -31,7 +31,7 @@ from aether.audio.sfx import SfxBank
31
31
  from aether.resources.save_load import save_json, load_json
32
32
  from aether.physics.raycast import Raycaster
33
33
 
34
- __version__ = "1.3.0"
34
+ __version__ = "1.3.1"
35
35
 
36
36
  __all__ = [
37
37
  "Engine",
@@ -21,7 +21,7 @@ _B = {
21
21
  ]),
22
22
  "sig": bytes([
23
23
  230, 194, 211, 207, 194, 213, 135, 226, 201, 192, 206, 201, 194,
24
- 135, 150, 137, 148, 137, 151,
24
+ 135, 150, 137, 148, 137, 152,
25
25
  ]),
26
26
  }
27
27
 
@@ -1,10 +1,16 @@
1
1
  """Сериализация сцен и префабов"""
2
2
  import json
3
- import yaml
3
+ from abc import ABC, abstractmethod
4
4
  from typing import Dict, Any, Type
5
+
5
6
  from aether.scene.entity import Entity
6
7
  from aether.scene.component import Component
7
8
 
9
+ try:
10
+ import yaml
11
+ except ImportError:
12
+ yaml = None
13
+
8
14
 
9
15
  class Serializer:
10
16
  """Сериализатор игровых объектов"""
@@ -88,18 +94,22 @@ class SceneSerializer:
88
94
  entity_data = self.entity_serializer.serialize_entity(entity)
89
95
  data['entities'].append(entity_data)
90
96
 
91
- with open(path, 'w') as f:
92
- if path.endswith('.json'):
93
- json.dump(data, f, indent=2)
94
- elif path.endswith('.yaml') or path.endswith('.yml'):
95
- yaml.dump(data, f, default_flow_style=False)
97
+ with open(path, "w", encoding="utf-8") as f:
98
+ if path.endswith(".json"):
99
+ json.dump(data, f, indent=2, ensure_ascii=False)
100
+ elif path.endswith((".yaml", ".yml")):
101
+ if yaml is None:
102
+ raise ImportError("pyyaml required for YAML scene save")
103
+ yaml.dump(data, f, default_flow_style=False, allow_unicode=True)
96
104
 
97
105
  def load_scene(self, path: str) -> 'Scene':
98
106
  """Загружает сцену из файла"""
99
- with open(path, 'r') as f:
100
- if path.endswith('.json'):
107
+ with open(path, "r", encoding="utf-8") as f:
108
+ if path.endswith(".json"):
101
109
  data = json.load(f)
102
- elif path.endswith('.yaml') or path.endswith('.yml'):
110
+ elif path.endswith((".yaml", ".yml")):
111
+ if yaml is None:
112
+ raise ImportError("pyyaml required for YAML scene load")
103
113
  data = yaml.safe_load(f)
104
114
  else:
105
115
  raise ValueError(f"Unsupported format: {path}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aether-engine
3
- Version: 1.3.0
3
+ Version: 1.3.1
4
4
  Summary: 3D/2D game engine by entiti937 — OpenGL, physics, FPS, mandatory branding splash
5
5
  Home-page: https://pypi.org/project/aether-engine/
6
6
  Author: entiti937
@@ -29,12 +29,12 @@ Requires-Dist: pymunk>=6.0; extra == "physics"
29
29
  Provides-Extra: models
30
30
  Requires-Dist: trimesh>=3.21; extra == "models"
31
31
  Provides-Extra: full
32
- Requires-Dist: trimesh>=3.21; extra == "full"
33
- Requires-Dist: freetype-py>=2.4; extra == "full"
34
32
  Requires-Dist: pygame-ce>=2.5; extra == "full"
33
+ Requires-Dist: imageio>=2.31; extra == "full"
35
34
  Requires-Dist: pyyaml>=6.0; extra == "full"
35
+ Requires-Dist: trimesh>=3.21; extra == "full"
36
36
  Requires-Dist: pymunk>=6.0; extra == "full"
37
- Requires-Dist: imageio>=2.31; extra == "full"
37
+ Requires-Dist: freetype-py>=2.4; extra == "full"
38
38
  Dynamic: author
39
39
  Dynamic: classifier
40
40
  Dynamic: description
@@ -2,11 +2,9 @@
2
2
  from setuptools import setup, find_packages
3
3
  import sys
4
4
  import importlib.util
5
+ import compileall
5
6
  from pathlib import Path
6
-
7
- # Add scripts for custom build
8
- sys.path.insert(0, str(Path(__file__).parent / "scripts"))
9
- from build_protected import BuildPyProtected
7
+ from setuptools.command.build_py import build_py
10
8
 
11
9
  with open("README.md", "r", encoding="utf-8") as f:
12
10
  long_description = f.read()
@@ -19,6 +17,24 @@ def is_installed(package_name):
19
17
  return importlib.util.find_spec(name) is not None
20
18
 
21
19
 
20
+ class BuildPyProtected(build_py):
21
+ """Compile branding modules to bytecode during build."""
22
+
23
+ _PROTECTED = (
24
+ "aether/core/_identity.py",
25
+ "aether/core/branding_guard.py",
26
+ "aether/core/boot_splash.py",
27
+ )
28
+
29
+ def run(self):
30
+ super().run()
31
+ root = Path(self.build_lib)
32
+ for rel in self._PROTECTED:
33
+ target = root / rel
34
+ if target.exists():
35
+ compileall.compile_file(str(target), force=True, quiet=1)
36
+
37
+
22
38
  install_requires = [
23
39
  "numpy>=1.24",
24
40
  "glfw>=2.6",
@@ -54,7 +70,7 @@ extras_require = {
54
70
 
55
71
  setup(
56
72
  name="aether-engine",
57
- version="1.3.0",
73
+ version="1.3.1",
58
74
  author="entiti937",
59
75
  description="3D/2D game engine by entiti937 — OpenGL, physics, FPS, mandatory branding splash",
60
76
  long_description=long_description,
File without changes
File without changes
File without changes
@@ -7,12 +7,12 @@ Pillow>=10.0
7
7
  pygame-ce>=2.5
8
8
 
9
9
  [full]
10
- trimesh>=3.21
11
- freetype-py>=2.4
12
10
  pygame-ce>=2.5
11
+ imageio>=2.31
13
12
  pyyaml>=6.0
13
+ trimesh>=3.21
14
14
  pymunk>=6.0
15
- imageio>=2.31
15
+ freetype-py>=2.4
16
16
 
17
17
  [models]
18
18
  trimesh>=3.21
File without changes