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