aether-engine 1.0.0__tar.gz → 1.0.2__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 (90) hide show
  1. aether_engine-1.0.2/PKG-INFO +500 -0
  2. aether_engine-1.0.2/README.md +449 -0
  3. aether_engine-1.0.2/aether/__init__.py +1 -0
  4. aether_engine-1.0.2/aether/core/engine.py +211 -0
  5. aether_engine-1.0.2/aether_engine.egg-info/PKG-INFO +500 -0
  6. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether_engine.egg-info/requires.txt +9 -5
  7. aether_engine-1.0.2/setup.py +132 -0
  8. aether_engine-1.0.0/PKG-INFO +0 -71
  9. aether_engine-1.0.0/README.md +0 -32
  10. aether_engine-1.0.0/aether/__init__.py +0 -54
  11. aether_engine-1.0.0/aether/core/engine.py +0 -50
  12. aether_engine-1.0.0/aether_engine.egg-info/PKG-INFO +0 -71
  13. aether_engine-1.0.0/setup.py +0 -54
  14. {aether_engine-1.0.0 → aether_engine-1.0.2}/LICENSE +0 -0
  15. {aether_engine-1.0.0 → aether_engine-1.0.2}/MANIFEST.in +0 -0
  16. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/ai/behavior_tree.py +0 -0
  17. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/ai/navmesh.py +0 -0
  18. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/animation/skeleton.py +0 -0
  19. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/assets/asset_pipeline.py +0 -0
  20. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/audio/__init__.py +0 -0
  21. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/audio/audio_manager.py +0 -0
  22. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/audio/music.py +0 -0
  23. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/audio/sound.py +0 -0
  24. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/core/__init__.py +0 -0
  25. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/core/achievement_system.py +0 -0
  26. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/core/application.py +0 -0
  27. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/core/config.py +0 -0
  28. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/core/console.py +0 -0
  29. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/core/event_bus.py +0 -0
  30. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/core/input.py +0 -0
  31. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/core/plugin_system.py +0 -0
  32. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/core/save_system.py +0 -0
  33. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/core/time_manager.py +0 -0
  34. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/core/window.py +0 -0
  35. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/editor/gizmo.py +0 -0
  36. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/editor/imgui_integration.py +0 -0
  37. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/environment/environment_system.py +0 -0
  38. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/graphics/__init__.py +0 -0
  39. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/graphics/camera.py +0 -0
  40. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/graphics/framebuffer.py +0 -0
  41. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/graphics/light.py +0 -0
  42. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/graphics/lod_system.py +0 -0
  43. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/graphics/material.py +0 -0
  44. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/graphics/mesh.py +0 -0
  45. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/graphics/mesh_factory.py +0 -0
  46. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/graphics/particle_system.py +0 -0
  47. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/graphics/post_process.py +0 -0
  48. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/graphics/renderer.py +0 -0
  49. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/graphics/shader.py +0 -0
  50. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/graphics/shader_library.py +0 -0
  51. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/graphics/sky_atmosphere.py +0 -0
  52. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/graphics/terrain.py +0 -0
  53. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/graphics/texture.py +0 -0
  54. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/graphics/water.py +0 -0
  55. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/network/network_manager.py +0 -0
  56. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/physics/__init__.py +0 -0
  57. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/physics/bullet_backend.py +0 -0
  58. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/physics/collider.py +0 -0
  59. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/physics/physics_world.py +0 -0
  60. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/physics/raycast.py +0 -0
  61. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/physics/rigidbody.py +0 -0
  62. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/platform/steam_api.py +0 -0
  63. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/resources/__init__.py +0 -0
  64. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/resources/asset_database.py +0 -0
  65. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/resources/loaders/obj_loader.py +0 -0
  66. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/resources/loaders/texture_loader.py +0 -0
  67. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/resources/resource_manager.py +0 -0
  68. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/resources/serialization.py +0 -0
  69. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/scene/__init__.py +0 -0
  70. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/scene/component.py +0 -0
  71. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/scene/entity.py +0 -0
  72. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/scene/scene.py +0 -0
  73. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/scene/scene_graph.py +0 -0
  74. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/scene/scene_manager.py +0 -0
  75. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/ui/__init__.py +0 -0
  76. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/ui/button.py +0 -0
  77. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/ui/canvas.py +0 -0
  78. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/ui/text.py +0 -0
  79. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/utils/__init__.py +0 -0
  80. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/utils/logger.py +0 -0
  81. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/utils/math_utils.py +0 -0
  82. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/utils/object_pool.py +0 -0
  83. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether/utils/profiler.py +0 -0
  84. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether_engine.egg-info/SOURCES.txt +0 -0
  85. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether_engine.egg-info/dependency_links.txt +0 -0
  86. {aether_engine-1.0.0 → aether_engine-1.0.2}/aether_engine.egg-info/top_level.txt +0 -0
  87. {aether_engine-1.0.0 → aether_engine-1.0.2}/examples/01_hello_cube.py +0 -0
  88. {aether_engine-1.0.0 → aether_engine-1.0.2}/examples/02_sphere_scene.py +0 -0
  89. {aether_engine-1.0.0 → aether_engine-1.0.2}/pyproject.toml +0 -0
  90. {aether_engine-1.0.0 → aether_engine-1.0.2}/setup.cfg +0 -0
@@ -0,0 +1,500 @@
1
+ Metadata-Version: 2.4
2
+ Name: aether-engine
3
+ Version: 1.0.2
4
+ Summary: Полноценный 3D игровой движок на Python с OpenGL
5
+ Home-page: https://pypi.org/project/aether-engine/
6
+ Author: entiti937
7
+ Classifier: Development Status :: 4 - Beta
8
+ Classifier: Intended Audience :: Developers
9
+ Classifier: Topic :: Games/Entertainment
10
+ Classifier: Topic :: Multimedia :: Graphics :: 3D Rendering
11
+ Classifier: License :: OSI Approved :: MIT License
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
18
+ Classifier: Operating System :: OS Independent
19
+ Requires-Python: >=3.10
20
+ Description-Content-Type: text/plain
21
+ License-File: LICENSE
22
+ Requires-Dist: numpy>=1.24
23
+ Requires-Dist: glfw>=2.6
24
+ Requires-Dist: PyOpenGL>=3.1.7
25
+ Requires-Dist: Pillow>=10.0
26
+ Provides-Extra: audio
27
+ Requires-Dist: pygame>=2.5; extra == "audio"
28
+ Provides-Extra: physics
29
+ Requires-Dist: pymunk>=6.0; extra == "physics"
30
+ Provides-Extra: imgui
31
+ Requires-Dist: imgui-bundle>=1.0; extra == "imgui"
32
+ Provides-Extra: full
33
+ Requires-Dist: trimesh>=3.21; extra == "full"
34
+ Requires-Dist: imgui-bundle>=1.0; extra == "full"
35
+ Requires-Dist: noise>=1.2; extra == "full"
36
+ Requires-Dist: pymunk>=6.0; extra == "full"
37
+ Requires-Dist: pyyaml>=6.0; extra == "full"
38
+ Requires-Dist: imageio>=2.31; extra == "full"
39
+ Requires-Dist: pygame>=2.5; extra == "full"
40
+ Requires-Dist: freetype-py>=2.4; extra == "full"
41
+ Dynamic: author
42
+ Dynamic: classifier
43
+ Dynamic: description
44
+ Dynamic: description-content-type
45
+ Dynamic: home-page
46
+ Dynamic: license-file
47
+ Dynamic: provides-extra
48
+ Dynamic: requires-dist
49
+ Dynamic: requires-python
50
+ Dynamic: summary
51
+
52
+ AETHER ENGINE
53
+ ============
54
+
55
+ Полноценный 3D игровой движок на Python с OpenGL 4.6
56
+ Автор: entiti937 | Версия: 1.0.2 | Лицензия: MIT
57
+ PyPI: https://pypi.org/project/aether-engine/
58
+
59
+
60
+ УСТАНОВКА
61
+ --------
62
+
63
+ Базовая:
64
+ pip install aether-engine
65
+
66
+ С аудио:
67
+ pip install aether-engine[audio]
68
+
69
+ С физикой:
70
+ pip install aether-engine[physics]
71
+
72
+ Полная:
73
+ pip install aether-engine[full]
74
+
75
+
76
+ БЫСТРЫЙ СТАРТ
77
+ -------------
78
+
79
+ Создайте файл main.py:
80
+
81
+ from aether.core.engine import Engine
82
+ from aether.scene.scene import Scene
83
+ from aether.scene.entity import Entity
84
+ from aether.scene.component import Transform, MeshRenderer
85
+ from aether.graphics.mesh_factory import MeshFactory
86
+ from aether.graphics.material import Material
87
+ from aether.graphics.camera import Camera
88
+
89
+ engine = Engine(1280, 720, "Моя игра")
90
+ scene = Scene("MainScene")
91
+ camera = Camera(position=(0, 2, 8))
92
+ scene.set_main_camera(camera)
93
+
94
+ cube = Entity("Player")
95
+ cube.add_component(Transform(position=(0, 1, 0)))
96
+ cube.add_component(MeshRenderer(mesh=MeshFactory.create_cube(), material=Material()))
97
+ scene.spawn(cube)
98
+
99
+ engine.load_scene(scene)
100
+ engine.run()
101
+
102
+ Запустите:
103
+ python main.py
104
+
105
+ Управление: WASD - движение, мышь - поворот, ESC - выход.
106
+
107
+
108
+ СОЗДАНИЕ ОКНА И СЦЕНЫ
109
+ ---------------------
110
+
111
+ Настройка движка:
112
+ from aether.core.engine import Engine
113
+ from aether.core.config import EngineConfig
114
+
115
+ config = EngineConfig()
116
+ config.app_name = "Моя RPG"
117
+ config.graphics.width = 1920
118
+ config.graphics.height = 1080
119
+ engine = Engine(config=config)
120
+
121
+ # Или просто
122
+ engine = Engine(1280, 720, "Моя игра")
123
+
124
+ Работа со сценами:
125
+ from aether.scene.scene import Scene
126
+ from aether.scene.scene_manager import SceneManager
127
+
128
+ menu = Scene("Menu")
129
+ game = Scene("Game")
130
+ manager = SceneManager()
131
+ manager.register_scene(menu)
132
+ manager.register_scene(game)
133
+ manager.load_scene("Game")
134
+ manager.transition_to("Menu", transition_time=1.0)
135
+
136
+
137
+ ENTITY И КОМПОНЕНТЫ
138
+ -------------------
139
+
140
+ Создание объекта:
141
+ from aether.scene.entity import Entity
142
+ from aether.scene.component import Transform, MeshRenderer, RigidbodyComponent
143
+
144
+ player = Entity("Player", tag="player")
145
+ player.add_component(Transform(position=(0, 2, 0), rotation=(0, 45, 0), scale=(1, 1, 1)))
146
+ player.add_component(MeshRenderer(mesh=MeshFactory.create_cube(), material=Material()))
147
+ player.add_component(RigidbodyComponent(mass=75.0, use_gravity=True))
148
+ scene.spawn(player)
149
+
150
+ Доступ к компонентам:
151
+ transform = player.get_component("Transform")
152
+ transform.translate(0, 0, 1)
153
+ transform.rotate(0, 10, 0)
154
+
155
+ mesh = player.get_component("MeshRenderer")
156
+ mesh.visible = False
157
+
158
+ Свой компонент:
159
+ from aether.scene.component import Component
160
+
161
+ class HealthComponent(Component):
162
+ def __init__(self, max_hp=100):
163
+ super().__init__()
164
+ self.max_hp = max_hp
165
+ self.hp = max_hp
166
+
167
+ def update(self, dt):
168
+ if self.hp <= 0:
169
+ print(f"{self.entity.name} died!")
170
+
171
+ def take_damage(self, amount):
172
+ self.hp -= amount
173
+
174
+ player.add_component(HealthComponent(100))
175
+
176
+
177
+ КАМЕРА
178
+ ------
179
+
180
+ from aether.graphics.camera import Camera
181
+
182
+ camera = Camera(position=(0, 5, 15), yaw=-90, pitch=-20, fov=60)
183
+ scene.set_main_camera(camera)
184
+ camera.move_forward(dt)
185
+ camera.move_left(dt)
186
+ camera.rotate(dx, dy)
187
+
188
+
189
+ ОСВЕЩЕНИЕ
190
+ ---------
191
+
192
+ from aether.graphics.light import DirectionalLight, PointLight, SpotLight
193
+
194
+ sun = DirectionalLight(direction=(0.5, -1, 0.3), color=(1.0, 0.95, 0.8), intensity=1.5)
195
+ lamp = PointLight(position=(0, 3, 0), color=(1.0, 0.8, 0.6), intensity=2.0, range=15.0)
196
+ flashlight = SpotLight(position=(0, 2, 0), direction=(0, 0, -1), intensity=3.0)
197
+
198
+
199
+ МАТЕРИАЛЫ И ТЕКСТУРЫ
200
+ --------------------
201
+
202
+ from aether.graphics.material import Material
203
+ from aether.graphics.texture import Texture
204
+
205
+ mat = Material("Metal")
206
+ mat.albedo = (0.8, 0.2, 0.2)
207
+ mat.metallic = 1.0
208
+ mat.roughness = 0.3
209
+ mat.albedo_map = Texture("textures/rust.png")
210
+ mat.normal_map = Texture("textures/rust_normal.png")
211
+
212
+
213
+ ФИЗИКА
214
+ ------
215
+
216
+ Встроенная (AABB):
217
+ from aether.physics.collider import BoxCollider, SphereCollider
218
+ from aether.scene.component import RigidbodyComponent
219
+
220
+ body = RigidbodyComponent(mass=10.0, use_gravity=True)
221
+ entity.add_component(body)
222
+ entity.add_component(BoxCollider(size=(1, 1, 1)))
223
+ body.add_force((0, 100, 0))
224
+ body.add_impulse((0, 0, 50))
225
+
226
+ Raycast:
227
+ from aether.physics.raycast import Ray, raycast
228
+
229
+ ray = Ray(origin=(0, 10, 0), direction=(0, -1, 0))
230
+ hit = physics_world.raycast(ray.origin, ray.direction)
231
+ if hit.hit:
232
+ print(f"Попадание в {hit.entity.name}")
233
+
234
+ PyBullet (опционально):
235
+ from aether.physics.bullet_backend import BulletPhysicsBackend
236
+
237
+ bullet = BulletPhysicsBackend()
238
+ bullet.initialize(gravity=(0, -9.81, 0))
239
+ body_id = bullet.create_rigid_body("my_entity", mass=1.0, shape_type="box", dimensions=(1,1,1), position=(0,5,0))
240
+ bullet.step(dt)
241
+
242
+
243
+ СИСТЕМА ЧАСТИЦ
244
+ --------------
245
+
246
+ from aether.graphics.particle_system import ParticleEmitter
247
+
248
+ fire = ParticleEmitter(max_particles=1000)
249
+ fire.position = (0, 1, 0)
250
+ fire.emission_rate = 200
251
+ fire.start_color = (1.0, 0.5, 0.0, 1.0)
252
+ fire.end_color = (1.0, 0.0, 0.0, 0.0)
253
+ fire.velocity = (0, 3, 0)
254
+
255
+ fire.update(dt)
256
+ fire.render(view, projection)
257
+
258
+
259
+ ТЕРРАЙН
260
+ -------
261
+
262
+ from aether.graphics.terrain import Terrain
263
+
264
+ terrain = Terrain(width=512, depth=512, max_height=100)
265
+ terrain.generate_height_map(seed=42, octaves=6)
266
+ terrain.generate_chunks()
267
+ height = terrain.get_height(world_x, world_z)
268
+ terrain.render(view, projection, camera_position)
269
+
270
+
271
+ ВОДА
272
+ ----
273
+
274
+ from aether.graphics.water import WaterBody
275
+
276
+ water = WaterBody(size=100, resolution=256, position=(0, 0, 0))
277
+ water.wave_speed = 1.5
278
+ water.water_color = (0.0, 0.3, 0.6)
279
+ water.update(dt)
280
+ water.render(view, projection, camera_position)
281
+
282
+
283
+ НЕБО И АТМОСФЕРА
284
+ ----------------
285
+
286
+ from aether.graphics.sky_atmosphere import SkyDome
287
+
288
+ sky = SkyDome(radius=500)
289
+ sky.set_time_of_day(12.0) # Полдень
290
+ sky.render(view, projection)
291
+
292
+
293
+ ОКРУЖЕНИЕ
294
+ ---------
295
+
296
+ from aether.environment.environment_system import EnvironmentSystem, Weather, Season
297
+
298
+ env = EnvironmentSystem()
299
+ env.set_weather(Weather.RAIN)
300
+ env.set_time(18, 30, 0)
301
+ env.set_season(Season.WINTER)
302
+ env.update(dt)
303
+
304
+
305
+ AI И НАВИГАЦИЯ
306
+ --------------
307
+
308
+ Деревья поведения:
309
+ from aether.ai.behavior_tree import BehaviorTree, Sequence, Selector, IsEnemyNearby, AttackTarget
310
+
311
+ bt = BehaviorTree()
312
+ root = Selector("Root")
313
+ attack = Sequence("Attack")
314
+ attack.add_child(IsEnemyNearby(radius=5.0))
315
+ attack.add_child(AttackTarget(damage=10.0))
316
+ root.add_child(attack)
317
+ bt.set_root(root)
318
+ bt.set_context("entity", enemy)
319
+ bt.set_context("target", player)
320
+ bt.tick()
321
+
322
+ NavMesh:
323
+ from aether.ai.navmesh import NavMeshBuilder
324
+
325
+ navmesh = NavMeshBuilder.build_from_grid(origin=(0,0,0), size_x=100, size_z=100, cell_size=1.0)
326
+ path = navmesh.find_path(start_pos, end_pos)
327
+ smoothed = navmesh.smooth_path(path)
328
+
329
+
330
+ АУДИО
331
+ -----
332
+
333
+ from aether.audio.audio_manager import AudioManager
334
+
335
+ audio = AudioManager()
336
+ audio.load_sound("explosion", "sounds/explosion.wav")
337
+ audio.play_sound("explosion", volume=0.8)
338
+ audio.play_music("music/background.mp3", loop=True)
339
+ audio.set_master_volume(0.7)
340
+
341
+
342
+ UI
343
+ --
344
+
345
+ from aether.ui.canvas import Canvas
346
+ from aether.ui.button import Button, Panel, Label
347
+
348
+ canvas = Canvas(1920, 1080)
349
+
350
+ def on_click():
351
+ print("Нажали!")
352
+
353
+ btn = Button("Начать игру", x=100, y=100, width=200, height=50, callback=on_click)
354
+ panel = Panel(x=50, y=50, width=400, height=300)
355
+ panel.title = "Инвентарь"
356
+ canvas.add(panel)
357
+ canvas.add(btn)
358
+ canvas.update(dt, mouse_x, mouse_y, mouse_pressed, mouse_just_pressed)
359
+ canvas.render()
360
+
361
+
362
+ СЕТЬ
363
+ ----
364
+
365
+ Сервер:
366
+ from aether.network.network_manager import NetworkServer
367
+
368
+ server = NetworkServer(max_clients=32)
369
+ server.start(host="0.0.0.0", port=7777)
370
+
371
+ Клиент:
372
+ from aether.network.network_manager import NetworkClient
373
+
374
+ client = NetworkClient("Player1")
375
+ client.connect("127.0.0.1", 7777)
376
+ client.send(NetworkMessage("chat", {"text": "Привет!"}))
377
+
378
+
379
+ СОХРАНЕНИЯ
380
+ ----------
381
+
382
+ from aether.core.save_system import SaveSystem, SaveData
383
+
384
+ save_system = SaveSystem()
385
+ data = SaveData("save_01")
386
+ data.set_custom("health", 85)
387
+ save_system.save(slot_id=0, save_data=data)
388
+ loaded = save_system.load(slot_id=0)
389
+
390
+
391
+ ДОСТИЖЕНИЯ
392
+ ----------
393
+
394
+ from aether.core.achievement_system import AchievementSystem
395
+
396
+ achievements = AchievementSystem()
397
+ achievements.register_achievement("first_kill", "Первая кровь", points=10)
398
+ achievements.increment_stat("kills")
399
+
400
+
401
+ КОНСОЛЬ РАЗРАБОТЧИКА
402
+ --------------------
403
+
404
+ from aether.core.console import Console
405
+
406
+ console = Console()
407
+ console.register_command("spawn", spawn_enemy)
408
+ console.register_variable("g_difficulty", 2, "Сложность", 1, 5)
409
+ console.execute("spawn 5")
410
+
411
+
412
+ РЕДАКТОР (ImGui)
413
+ ----------------
414
+
415
+ from aether.editor.imgui_integration import ImGuiManager, EditorLayout, HierarchyPanel, InspectorPanel
416
+
417
+ imgui = ImGuiManager()
418
+ imgui.initialize(window, 1920, 1080)
419
+ editor = EditorLayout()
420
+ editor.add_panel(HierarchyPanel())
421
+ editor.add_panel(InspectorPanel())
422
+
423
+ # В игровом цикле:
424
+ imgui.begin_frame()
425
+ editor.render(scene, console, profiler)
426
+ imgui.end_frame()
427
+
428
+
429
+ STEAM API
430
+ ---------
431
+
432
+ from aether.platform.steam_api import SteamAPI
433
+
434
+ steam = SteamAPI()
435
+ steam.initialize(app_id=1234567)
436
+ steam.set_achievement("ACH_WIN_ONE_GAME")
437
+ steam.cloud_save("save.sav", data)
438
+
439
+
440
+ СТРУКТУРА ДВИЖКА
441
+ ----------------
442
+
443
+ aether/
444
+ core/ - Ядро (Engine, Config, Input, Time, Console, SaveSystem)
445
+ graphics/ - Графика (Renderer, Shader, Mesh, Camera, Light, Water, Sky, Terrain, Particles)
446
+ scene/ - Сцена (Entity, Component, Scene, SceneGraph, SceneManager)
447
+ physics/ - Физика (PhysicsWorld, Collider, Rigidbody, Raycast, BulletBackend)
448
+ ai/ - AI (NavMesh, BehaviorTree)
449
+ network/ - Сеть (Client, Server)
450
+ audio/ - Аудио (AudioManager, Sound, Music)
451
+ ui/ - UI (Canvas, Button, Panel, Label, Font)
452
+ editor/ - Редактор (ImGui, Gizmo, DebugDraw)
453
+ environment/ - Окружение (TimeOfDay, Weather, Seasons)
454
+ resources/ - Ресурсы (ResourceManager, AssetDatabase, OBJ Loader, Texture Loader)
455
+ platform/ - Платформа (SteamAPI)
456
+ animation/ - Анимация (Skeleton, AnimationClip, Animator)
457
+ assets/ - Ассеты (AssetPipeline)
458
+ utils/ - Утилиты (Math, Logger, Profiler, ObjectPool)
459
+
460
+
461
+ ЗАВИСИМОСТИ
462
+ -----------
463
+
464
+ Базовая установка (обязательно):
465
+ numpy>=1.24, glfw>=2.6, PyOpenGL>=3.1.7, Pillow>=10.0
466
+
467
+ Аудио (опционально):
468
+ pygame>=2.5 (Python 3.10-3.12) или pygame-ce (Python 3.13+)
469
+
470
+ Физика (опционально):
471
+ PyBullet>=3.2.5 (требует Visual Studio Build Tools)
472
+ pymunk>=6.0 (альтернатива, не требует компиляции)
473
+
474
+ Полная установка:
475
+ Все выше + freetype-py, imgui, noise, pyyaml, imageio
476
+
477
+ Примечание по версиям Python:
478
+ Python 3.10-3.12: все пакеты доступны
479
+ Python 3.13+: используйте pygame-ce вместо pygame
480
+ Python 3.14+: PyBullet может не собраться, используйте pymunk
481
+
482
+
483
+ СИСТЕМНЫЕ ТРЕБОВАНИЯ
484
+ --------------------
485
+
486
+ Python 3.10+
487
+ OpenGL 4.6
488
+ Windows 10+ / Linux / macOS
489
+ Видеокарта с поддержкой OpenGL 4.6
490
+ 4 GB RAM минимум
491
+
492
+
493
+ ЛИЦЕНЗИЯ
494
+ --------
495
+
496
+ MIT License. Используйте свободно в любых проектах.
497
+
498
+
499
+ Автор: entiti937
500
+ Версия: 1.0.2 - Исправлен импорт Engine и проблемы с новыми библеотеками, полная документация