VertexEngine 1.9.5__tar.gz → 2.0.0__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.

Potentially problematic release.


This version of VertexEngine might be problematic. Click here for more details.

Files changed (46) hide show
  1. {vertexengine-1.9.5/src/VertexEngine.egg-info → vertexengine-2.0.0}/PKG-INFO +24 -32
  2. {vertexengine-1.9.5 → vertexengine-2.0.0}/README.md +18 -26
  3. {vertexengine-1.9.5 → vertexengine-2.0.0}/pyproject.toml +3 -3
  4. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/InputSystem/BtnInputs.py +1 -1
  5. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/InputSystem/Events.py +1 -1
  6. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/InputSystem/KeyInputs.py +15 -9
  7. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/Vertex/__init__.py +2 -2
  8. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/VertexScreenModifiers.py +1 -1
  9. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/VertexWidgets/AdvancedVWidgets/ChatBubble.py +2 -2
  10. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/VertexWidgets/AdvancedVWidgets/CheckBox.py +1 -1
  11. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/VertexWidgets/AdvancedVWidgets/Counter.py +2 -2
  12. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/VertexWidgets/AdvancedVWidgets/Dropdown.py +1 -1
  13. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/VertexWidgets/AdvancedVWidgets/List.py +1 -1
  14. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/VertexWidgets/AdvancedVWidgets/OptionBtnWidget.py +2 -2
  15. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/VertexWidgets/AdvancedVWidgets/StatusLight.py +2 -2
  16. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/VertexWidgets/AdvancedVWidgets/ToggleSwitch.py +3 -3
  17. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/VertexWidgets/AdvancedVWidgets/WindowMods.py +3 -3
  18. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/VertexWidgets/AdvancedVWidgets/Windows.py +3 -3
  19. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/VertexWidgets/BasicWidgets/SimpleGUI.py +6 -6
  20. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/__init__.py +5 -6
  21. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/_base.py +3 -3
  22. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/assets.py +55 -2
  23. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/audio.py +2 -1
  24. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/engine.py +8 -7
  25. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/examples/games/snake/main.py +2 -2
  26. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/examples/test.py +4 -4
  27. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/scenes.py +11 -6
  28. {vertexengine-1.9.5 → vertexengine-2.0.0/src/VertexEngine.egg-info}/PKG-INFO +24 -32
  29. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine.egg-info/SOURCES.txt +2 -1
  30. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine.egg-info/requires.txt +1 -1
  31. vertexengine-2.0.0/tests/test_spritesheet_manager.py +15 -0
  32. {vertexengine-1.9.5 → vertexengine-2.0.0}/LICENSE +0 -0
  33. {vertexengine-1.9.5 → vertexengine-2.0.0}/setup.cfg +0 -0
  34. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/Collisions/__init__.py +0 -0
  35. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/Collisions/collisions.py +0 -0
  36. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/Math/_Vector2.py +0 -0
  37. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/Math/__init__.py +0 -0
  38. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/VertexWidgets/PygameVWidgets/__init__.py +0 -0
  39. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/WHY.mp3 +0 -0
  40. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/examples/MajorSystemTest/Wangi.png +0 -0
  41. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/examples/MajorSystemTest/main.py +0 -0
  42. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/examples/MajorSystemTest/universfield-ui-button-click-147358.mp3 +0 -0
  43. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine/examples/pygwidget_test.py +0 -0
  44. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine.egg-info/dependency_links.txt +0 -0
  45. {vertexengine-1.9.5 → vertexengine-2.0.0}/src/VertexEngine.egg-info/top_level.txt +0 -0
  46. {vertexengine-1.9.5 → vertexengine-2.0.0}/tests/test_pygame_vwidgets_style.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: VertexEngine
3
- Version: 1.9.5
3
+ Version: 2.0.0
4
4
  Summary: A high-performance SDK for Python Development.
5
5
  Author-email: Tyrel Miguel <annbasilan0828@gmail.com>
6
6
  License: MIT
@@ -11,7 +11,7 @@ Project-URL: Official Tech Site, https://tyrel.onrender.com
11
11
  Project-URL: Source, https://github.com/VertexEngine-Projects/VertexEngine-Code
12
12
  Project-URL: Issues, https://github.com/VertexEngine-Projects/VertexEngine-Code/issues
13
13
  Project-URL: Discord, https://discord.gg/jqG8kQjX
14
- Keywords: gamedev,game-development,game-engine,pyqt6,pygame,pygame-ce,sdk,gui
14
+ Keywords: gamedev,game-development,game-engine,PySide6,pygame,pygame-ce,sdk,gui
15
15
  Classifier: Development Status :: 5 - Production/Stable
16
16
  Classifier: Intended Audience :: Developers
17
17
  Classifier: Topic :: Software Development :: Build Tools
@@ -28,7 +28,7 @@ Classifier: Operating System :: OS Independent
28
28
  Requires-Python: >=3.10
29
29
  Description-Content-Type: text/markdown
30
30
  License-File: LICENSE
31
- Requires-Dist: PyQt6>=6.7
31
+ Requires-Dist: PySide6>=6.7.0
32
32
  Requires-Dist: pygame>=2.6; python_version < "3.14"
33
33
  Requires-Dist: pygame-ce>=2.5.0; python_version >= "3.14"
34
34
  Dynamic: license-file
@@ -49,17 +49,23 @@ Dynamic: license-file
49
49
  </p>
50
50
 
51
51
  # VertexEngine/Vertex
52
- VertexEngine is a GUI and Game Engine for python applications, it works best if you use py installer
52
+ VertexEngine is a GUI and Game Engine for Python applications.
53
53
 
54
54
  ## Official Extensions:
55
- - [VertexEngine-WebEngine](https://pypi.org/project/VertexEngine-WebEngine)
55
+ - [VertexEngine-JSON](https://pypi.org/project/VertexEngine-json)
56
56
  - [VertexEngine-CLI](https://pypi.org/project/VertexEngine-CLI/1.0/)
57
57
 
58
58
  ## Help
59
59
  - The documentation is in the following link: [Documentation](https://vertexenginedocs.netlify.app/) for help.
60
60
  - Support Email: FinalFacility0828@gmail.com
61
61
 
62
- ## Change Logs (1.7.0 - 1.9.4)
62
+ ## Change Logs (1.8rc1 - 2.0)
63
+ ### 2.0
64
+ - Thanks for ONE YEAR!
65
+ - Added Spritesheets, Delta Time, New Import Shortcuts
66
+ - Fundemental Change: All Code references of PyQt6 have been replaced with the more lenient PySide6.
67
+ ### 1.9.6
68
+ - Engine Optimizations
63
69
  ### 1.9.5
64
70
  - Widget Fixes
65
71
  ### 1.9.4
@@ -73,7 +79,7 @@ VertexEngine is a GUI and Game Engine for python applications, it works best if
73
79
  ### 1.9.1
74
80
  - NEW DEMO
75
81
  - How to Run: python3.x -m VertexEngine.examples.pygwidget_test
76
- - Fixed engine clash bug (pygame and pyqt6 bug)
82
+ - Fixed engine clash bug (pygame and PySide6 bug)
77
83
  ### 1.9
78
84
  - FINALLY fixed the demos!
79
85
  - how to run:
@@ -118,41 +124,27 @@ VertexEngine is a GUI and Game Engine for python applications, it works best if
118
124
  ### 1.8rc1
119
125
  - Patched some runtime errors
120
126
  - Added MATH! (from VertexEngine.math import *)
121
- ### 1.7.3
122
- - Added new functions to collisions!
123
- ### 1.7.2
124
- - Added HIGHLIGHTING to Ocean Code!**
125
- - Fixed a lot of bugs!
126
- - Fixed outdated URLs (2 day server shutdown)
127
- ### 1.7.1
128
- - official VertexEngine Projects Browser! (RainExplorer)
129
- - Accounts Wiped soon.
130
- - Fixed a bit too many bugs.
131
- ### 1.7.0
132
- - Fixed Collision not defined errors
133
- - Added an official3 Tutorial Video!
134
- - Accounts will be wiped soon.
135
-
136
- ## How to install VertexEngine/Vertex:
137
- Step 1: Type in pip install VertexEngine
138
-
139
- Step 2: Wait a few min, don't worry if it takes 1 hr or more, it will finish
140
-
141
- Pygame or PyQt6 systems are compatible with Vertex so you can use pygame collision system or PyQt6's UI system in VertexEngine.
127
+
128
+ ## How to install VertexEngine:
129
+ Step 1: Type in `pip install VertexEngine`
130
+
131
+ Step 2: Wait a few minutes.
132
+
133
+ Pygame or PySide6 systems are compatible with VertexEngine so you can use pygame collision system or PySide6's UI system in VertexEngine.
142
134
 
143
135
  ## Dependencies
144
- Vertex obviously has heavy dependencies since it's a game engine, the following requirements are:
136
+ VertexEngine obviously has heavy dependencies since it's a game engine, the following requirements are:
145
137
 
146
138
  | Dependency | Version |
147
139
  |------------------|--------------------------------------|
148
- | PyQt6 | >=6.7 |
140
+ | PySide6 | >=6.7 |
149
141
  | Pygame | >=2.0 |
150
142
  | Python | >=3.10 |
151
143
 
152
- ## About Me ❔
144
+ ## About Me
153
145
  I’m a solo developer based in Quezon City, building tools and engines for both fun and serious projects.
154
146
 
155
- ## 📄 License
147
+ ## License
156
148
  VertexEngine is licensed under the MIT License.
157
149
 
158
150
  You are free to use, modify, and distribute this project, as long as proper attribution is given. See the LICENSE file for details.
@@ -14,17 +14,23 @@
14
14
  </p>
15
15
 
16
16
  # VertexEngine/Vertex
17
- VertexEngine is a GUI and Game Engine for python applications, it works best if you use py installer
17
+ VertexEngine is a GUI and Game Engine for Python applications.
18
18
 
19
19
  ## Official Extensions:
20
- - [VertexEngine-WebEngine](https://pypi.org/project/VertexEngine-WebEngine)
20
+ - [VertexEngine-JSON](https://pypi.org/project/VertexEngine-json)
21
21
  - [VertexEngine-CLI](https://pypi.org/project/VertexEngine-CLI/1.0/)
22
22
 
23
23
  ## Help
24
24
  - The documentation is in the following link: [Documentation](https://vertexenginedocs.netlify.app/) for help.
25
25
  - Support Email: FinalFacility0828@gmail.com
26
26
 
27
- ## Change Logs (1.7.0 - 1.9.4)
27
+ ## Change Logs (1.8rc1 - 2.0)
28
+ ### 2.0
29
+ - Thanks for ONE YEAR!
30
+ - Added Spritesheets, Delta Time, New Import Shortcuts
31
+ - Fundemental Change: All Code references of PyQt6 have been replaced with the more lenient PySide6.
32
+ ### 1.9.6
33
+ - Engine Optimizations
28
34
  ### 1.9.5
29
35
  - Widget Fixes
30
36
  ### 1.9.4
@@ -38,7 +44,7 @@ VertexEngine is a GUI and Game Engine for python applications, it works best if
38
44
  ### 1.9.1
39
45
  - NEW DEMO
40
46
  - How to Run: python3.x -m VertexEngine.examples.pygwidget_test
41
- - Fixed engine clash bug (pygame and pyqt6 bug)
47
+ - Fixed engine clash bug (pygame and PySide6 bug)
42
48
  ### 1.9
43
49
  - FINALLY fixed the demos!
44
50
  - how to run:
@@ -83,41 +89,27 @@ VertexEngine is a GUI and Game Engine for python applications, it works best if
83
89
  ### 1.8rc1
84
90
  - Patched some runtime errors
85
91
  - Added MATH! (from VertexEngine.math import *)
86
- ### 1.7.3
87
- - Added new functions to collisions!
88
- ### 1.7.2
89
- - Added HIGHLIGHTING to Ocean Code!**
90
- - Fixed a lot of bugs!
91
- - Fixed outdated URLs (2 day server shutdown)
92
- ### 1.7.1
93
- - official VertexEngine Projects Browser! (RainExplorer)
94
- - Accounts Wiped soon.
95
- - Fixed a bit too many bugs.
96
- ### 1.7.0
97
- - Fixed Collision not defined errors
98
- - Added an official3 Tutorial Video!
99
- - Accounts will be wiped soon.
100
92
 
101
- ## How to install VertexEngine/Vertex:
102
- Step 1: Type in pip install VertexEngine
93
+ ## How to install VertexEngine:
94
+ Step 1: Type in `pip install VertexEngine`
103
95
 
104
- Step 2: Wait a few min, don't worry if it takes 1 hr or more, it will finish
96
+ Step 2: Wait a few minutes.
105
97
 
106
- Pygame or PyQt6 systems are compatible with Vertex so you can use pygame collision system or PyQt6's UI system in VertexEngine.
98
+ Pygame or PySide6 systems are compatible with VertexEngine so you can use pygame collision system or PySide6's UI system in VertexEngine.
107
99
 
108
100
  ## Dependencies
109
- Vertex obviously has heavy dependencies since it's a game engine, the following requirements are:
101
+ VertexEngine obviously has heavy dependencies since it's a game engine, the following requirements are:
110
102
 
111
103
  | Dependency | Version |
112
104
  |------------------|--------------------------------------|
113
- | PyQt6 | >=6.7 |
105
+ | PySide6 | >=6.7 |
114
106
  | Pygame | >=2.0 |
115
107
  | Python | >=3.10 |
116
108
 
117
- ## About Me ❔
109
+ ## About Me
118
110
  I’m a solo developer based in Quezon City, building tools and engines for both fun and serious projects.
119
111
 
120
- ## 📄 License
112
+ ## License
121
113
  VertexEngine is licensed under the MIT License.
122
114
 
123
115
  You are free to use, modify, and distribute this project, as long as proper attribution is given. See the LICENSE file for details.
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "VertexEngine"
3
- version = "1.9.5"
3
+ version = "2.0.0"
4
4
  description = "A high-performance SDK for Python Development."
5
5
  authors = [
6
6
  { name = "Tyrel Miguel", email = "annbasilan0828@gmail.com" }
@@ -10,7 +10,7 @@ license = { text = "MIT" }
10
10
  requires-python = ">=3.10"
11
11
 
12
12
  dependencies = [
13
- "PyQt6>=6.7",
13
+ "PySide6>=6.7.0",
14
14
  "pygame>=2.6; python_version < '3.14'",
15
15
  "pygame-ce>=2.5.0; python_version >= '3.14'"
16
16
  ]
@@ -19,7 +19,7 @@ keywords = [
19
19
  "gamedev",
20
20
  "game-development",
21
21
  "game-engine",
22
- "pyqt6",
22
+ "PySide6",
23
23
  "pygame",
24
24
  "pygame-ce",
25
25
  "sdk",
@@ -1,4 +1,4 @@
1
- from PyQt6.QtCore import Qt
1
+ from PySide6.QtCore import Qt
2
2
 
3
3
 
4
4
  class Mouse:
@@ -1,4 +1,4 @@
1
- from PyQt6.QtCore import QTimer, QObject, QEvent
1
+ from PySide6.QtCore import QTimer, QObject, QEvent
2
2
 
3
3
 
4
4
  class ButtonEvents:
@@ -1,5 +1,5 @@
1
- from PyQt6.QtCore import Qt
2
- from PyQt6.QtGui import QShortcut, QKeySequence
1
+ from PySide6.QtCore import Qt
2
+ from PySide6.QtGui import QShortcut, QKeySequence
3
3
 
4
4
  KEY_MAP = {
5
5
  # Arrows
@@ -70,11 +70,11 @@ for key, qt_name in punctuation_map.items():
70
70
  try:
71
71
  KEY_MAP[key] = getattr(Qt.Key, f"Key_{qt_name}")
72
72
  except AttributeError:
73
- # Some symbols might not exist in PyQt6's Qt.Key
73
+ # Some symbols might not exist in PySide6's Qt.Key
74
74
  pass
75
75
 
76
- from PyQt6.QtCore import Qt
77
- from PyQt6.QtGui import QShortcut, QKeySequence
76
+ from PySide6.QtCore import Qt
77
+ from PySide6.QtGui import QShortcut, QKeySequence
78
78
 
79
79
  KEY_MAP = {
80
80
  # Arrows
@@ -145,7 +145,7 @@ for key, qt_name in punctuation_map.items():
145
145
  try:
146
146
  KEY_MAP[key] = getattr(Qt.Key, f"Key_{qt_name}")
147
147
  except AttributeError:
148
- # Some symbols might not exist in PyQt6's Qt.Key
148
+ # Some symbols might not exist in PySide6's Qt.Key
149
149
  pass
150
150
 
151
151
  class Input:
@@ -160,6 +160,12 @@ class Input:
160
160
  cls._just_pressed.clear()
161
161
  cls._just_released.clear()
162
162
 
163
+ @classmethod
164
+ def clear(cls):
165
+ cls._pressed.clear()
166
+ cls._just_pressed.clear()
167
+ cls._just_released.clear()
168
+
163
169
  @classmethod
164
170
  def bind(cls, action, key):
165
171
  """Bind an action name to a key."""
@@ -195,15 +201,15 @@ class Input:
195
201
  # === Direct Key API ===
196
202
  @classmethod
197
203
  def is_pressed(cls, key):
198
- return KEY_MAP[key] in cls._pressed
204
+ return KEY_MAP.get(key, key) in cls._pressed
199
205
 
200
206
  @classmethod
201
207
  def is_just_pressed(cls, key):
202
- return KEY_MAP[key] in cls._just_pressed
208
+ return KEY_MAP.get(key, key) in cls._just_pressed
203
209
 
204
210
  @classmethod
205
211
  def is_released(cls, key):
206
- return KEY_MAP[key] in cls._just_released
212
+ return KEY_MAP.get(key, key) in cls._just_released
207
213
 
208
214
  # === Action API ===
209
215
  @classmethod
@@ -1,11 +1,11 @@
1
1
  """VertexEngine.Vertex: VWidget, Layouts, Dialogs, App Management"""
2
2
 
3
3
  import sys
4
- from PyQt6.QtWidgets import (
4
+ from PySide6.QtWidgets import (
5
5
  QApplication, QWidget, QVBoxLayout, QHBoxLayout,
6
6
  QDialog, QLabel, QPushButton, QLineEdit
7
7
  )
8
- from PyQt6.QtCore import Qt
8
+ from PySide6.QtCore import Qt
9
9
  # ------------------------
10
10
  # Base widget wrapper
11
11
  # ------------------------
@@ -1,5 +1,5 @@
1
1
  """WARNING: This library of Vertex is not made for games, if you want to make a game window, use the `GameEngine` Class instead."""
2
- from PyQt6.QtWidgets import QMainWindow, QVBoxLayout, QWidget, QApplication
2
+ from PySide6.QtWidgets import QMainWindow, QVBoxLayout, QWidget, QApplication
3
3
  import sys
4
4
  from VertexEngine import VertexUI
5
5
  # ===== Base window class =====
@@ -1,5 +1,5 @@
1
- from PyQt6.QtWidgets import QLabel
2
- from PyQt6.QtCore import Qt
1
+ from PySide6.QtWidgets import QLabel
2
+ from PySide6.QtCore import Qt
3
3
 
4
4
  class ChatBubble(QLabel):
5
5
  def __init__(self, text, sender="me"):
@@ -1,4 +1,4 @@
1
- from PyQt6.QtWidgets import QCheckBox
1
+ from PySide6.QtWidgets import QCheckBox
2
2
  class VCheckBox(QCheckBox):
3
3
  def __init__(self, text=""):
4
4
  super().__init__(text)
@@ -1,5 +1,5 @@
1
- from PyQt6.QtCore import pyqtSignal
2
- from PyQt6.QtWidgets import QWidget, QPushButton, QVBoxLayout
1
+ from PySide6.QtCore import pyqtSignal
2
+ from PySide6.QtWidgets import QWidget, QPushButton, QVBoxLayout
3
3
 
4
4
  class CounterWidget(QWidget):
5
5
 
@@ -1,4 +1,4 @@
1
- from PyQt6.QtWidgets import QComboBox
1
+ from PySide6.QtWidgets import QComboBox
2
2
 
3
3
  class VDropdown(QComboBox):
4
4
  def __init__(self, items=None):
@@ -1,4 +1,4 @@
1
- from PyQt6.QtWidgets import QListWidget
1
+ from PySide6.QtWidgets import QListWidget
2
2
 
3
3
  class VList(QListWidget):
4
4
  def __init__(self, items=None):
@@ -1,5 +1,5 @@
1
- from PyQt6.QtWidgets import QWidget, QHBoxLayout, QPushButton, QApplication
2
- from PyQt6.QtCore import pyqtSignal
1
+ from PySide6.QtWidgets import QWidget, QHBoxLayout, QPushButton, QApplication
2
+ from PySide6.QtCore import pyqtSignal
3
3
  import sys
4
4
 
5
5
  # -----------------------------
@@ -1,5 +1,5 @@
1
- from PyQt6.QtWidgets import QWidget
2
- from PyQt6.QtGui import QPainter, QColor
1
+ from PySide6.QtWidgets import QWidget
2
+ from PySide6.QtGui import QPainter, QColor
3
3
 
4
4
  class StatusLight(QWidget):
5
5
  def __init__(self, color="red"):
@@ -1,6 +1,6 @@
1
- from PyQt6.QtWidgets import QWidget
2
- from PyQt6.QtCore import Qt, pyqtSignal, QRect
3
- from PyQt6.QtGui import QPainter, QColor
1
+ from PySide6.QtWidgets import QWidget
2
+ from PySide6.QtCore import Qt, pyqtSignal, QRect
3
+ from PySide6.QtGui import QPainter, QColor
4
4
 
5
5
  class ToggleSwitch(QWidget):
6
6
 
@@ -1,12 +1,12 @@
1
- from PyQt6.QtWidgets import (
1
+ from PySide6.QtWidgets import (
2
2
  QTreeWidget, QTreeWidgetItem,
3
3
  QTableWidget, QTableWidgetItem,
4
4
  QSplitter,
5
5
  QScrollArea,
6
6
  QDockWidget, QWidget
7
7
  )
8
- from PyQt6.QtCore import Qt, QThread, pyqtSignal, QSettings
9
- from PyQt6.QtGui import QPainter, QFont
8
+ from PySide6.QtCore import Qt, QThread, pyqtSignal, QSettings
9
+ from PySide6.QtGui import QPainter, QFont
10
10
 
11
11
  class StarRating(QWidget):
12
12
  def __init__(self, stars=5):
@@ -1,6 +1,6 @@
1
- from PyQt6.QtWidgets import QMessageBox, QFileDialog, QSlider, QProgressBar, QSpinBox, QToolBar
2
- from PyQt6.QtCore import Qt
3
- from PyQt6.QtGui import QAction
1
+ from PySide6.QtWidgets import QMessageBox, QFileDialog, QSlider, QProgressBar, QSpinBox, QToolBar
2
+ from PySide6.QtCore import Qt
3
+ from PySide6.QtGui import QAction
4
4
  class VPopup:
5
5
  @staticmethod
6
6
  def info(text, title="Info"):
@@ -1,9 +1,9 @@
1
- from PyQt6.QtWidgets import QPushButton, QLineEdit
2
- from PyQt6.QtGui import QFont
3
- from PyQt6.QtWidgets import QPushButton
4
- from PyQt6.QtGui import QCursor
5
- from PyQt6.QtCore import Qt
6
- from PyQt6.QtWidgets import QLabel
1
+ from PySide6.QtWidgets import QPushButton, QLineEdit
2
+ from PySide6.QtGui import QFont
3
+ from PySide6.QtWidgets import QPushButton
4
+ from PySide6.QtGui import QCursor
5
+ from PySide6.QtCore import Qt
6
+ from PySide6.QtWidgets import QLabel
7
7
 
8
8
  class LegacyButton(QPushButton):
9
9
  def __init__(
@@ -3,11 +3,10 @@
3
3
  # This library/SDK is free. You can redistribute it.
4
4
  # Tyrel Gomez (email as annbasilan)
5
5
  # annbasilan0828@gmail.com
6
- """VertexEngine is an SDK for Application Development. It's also supported by many others.
6
+ """VertexEngine is an SDK for Application Development. Specifically games, or heavier Applications
7
7
 
8
8
  Supported OSes
9
9
  --------------
10
- - RainOS
11
10
  - Windows
12
11
  - MacOS
13
12
  - OS X
@@ -15,14 +14,14 @@ Supported OSes
15
14
  - FreeBSD
16
15
  - IRIX
17
16
  - and Linux
18
-
19
- It is written on top of the excellent Pygame library which is ran on the even more excellent SDL library which runs on every Desktop OS with SDL."""
20
- import pygame
17
+ """
21
18
  from ._base import *
22
19
  from .engine import GameEngine
23
20
  from .scenes import Scene, SceneManager
24
21
  from .assets import AssetManager
25
22
  from .audio import AudioManager
23
+ from .Vertex import App
24
+ from .InputSystem import *
26
25
  import os
27
26
 
28
27
 
@@ -586,7 +585,7 @@ import os
586
585
  # This comment serves as a warning to the next developer.
587
586
  # If you are reading this, you have probably found a bug or an issue with the code.
588
587
  # Your problem.
589
- # Hours Wasted: 46
588
+ # Hours Wasted: 78
590
589
  # ----------------------------------------------------------------------
591
590
  # Btw ur balls are big and i like them. I hope you have a nice day. :)
592
591
  # ~ VSCode Copilot auto-generated comment.
@@ -1,7 +1,7 @@
1
1
  import pygame
2
- from PyQt6.QtWidgets import QPushButton, QLineEdit, QLabel, QWidget
3
- from PyQt6.QtGui import QFont, QCursor, QFontMetrics
4
- from PyQt6.QtCore import Qt
2
+ from PySide6.QtWidgets import QPushButton, QLineEdit, QLabel, QWidget
3
+ from PySide6.QtGui import QFont, QCursor, QFontMetrics
4
+ from PySide6.QtCore import Qt
5
5
  from VertexEngine.Vertex import VBox
6
6
 
7
7
  class VertexScreen():
@@ -1,5 +1,5 @@
1
1
  import pygame
2
- from PyQt6.QtGui import QImage
2
+ from PySide6.QtGui import QImage
3
3
  import typing_extensions as typing
4
4
 
5
5
  @typing.deprecated('This is not a public API, use AssetManager pls :D')
@@ -46,6 +46,7 @@ class AssetManager:
46
46
  """The `AssetManager` is a class to draw and load images and assets of any kind."""
47
47
  def __init__(self):
48
48
  self.images = {}
49
+ self.spritesheets = {}
49
50
  self._scaled_cache = {} # cache for scaled versions
50
51
 
51
52
  def load_image(self, name: str, path: str):
@@ -58,6 +59,10 @@ class AssetManager:
58
59
  try:
59
60
  surface = pygame.image.load(path)
60
61
  self.images[name] = surface
62
+ self._scaled_cache = {
63
+ key: value for key, value in self._scaled_cache.items()
64
+ if key[0] != name
65
+ }
61
66
  return surface
62
67
 
63
68
  except FileNotFoundError:
@@ -78,7 +83,7 @@ class AssetManager:
78
83
  """
79
84
  img = self.images.get(name)
80
85
 
81
- if not img:
86
+ if img is None:
82
87
  print(f"[Warning] Image '{name}' not loaded!")
83
88
  return
84
89
 
@@ -88,6 +93,7 @@ class AssetManager:
88
93
  return
89
94
 
90
95
  # Use cache key
96
+ size = tuple(size)
91
97
  cache_key = (name, size)
92
98
 
93
99
  # Check if scaled version exists
@@ -98,3 +104,50 @@ class AssetManager:
98
104
  scaled_img = self._scaled_cache[cache_key]
99
105
 
100
106
  target_surface.blit(scaled_img, pos)
107
+
108
+ def load_spritesheet(self, name: str, path: str, frame_size):
109
+ """Load a spritesheet and split it into equally sized frames.
110
+
111
+ ``frame_size`` is ``(width, height)``. Incomplete frames at the
112
+ right or bottom edges are ignored.
113
+ """
114
+ if name in self.spritesheets:
115
+ return self.spritesheets[name]
116
+
117
+ frame_width, frame_height = (int(value) for value in frame_size)
118
+ if frame_width <= 0 or frame_height <= 0:
119
+ raise ValueError("frame_size values must be greater than zero")
120
+
121
+ try:
122
+ sheet = pygame.image.load(path)
123
+ except FileNotFoundError:
124
+ print(f"[Warning] Spritesheet '{path}' not found!")
125
+ return None
126
+
127
+ sheet_width, sheet_height = sheet.get_size()
128
+ frames = [
129
+ sheet.subsurface((x, y, frame_width, frame_height)).copy()
130
+ for y in range(0, sheet_height - frame_height + 1, frame_height)
131
+ for x in range(0, sheet_width - frame_width + 1, frame_width)
132
+ ]
133
+ self.spritesheets[name] = frames
134
+ return frames
135
+
136
+ def get_sprite(self, name: str, index: int):
137
+ """Return one frame from a loaded spritesheet."""
138
+ spritesheet = self.spritesheets.get(name)
139
+ if spritesheet is None:
140
+ print(f"[Warning] Spritesheet '{name}' not loaded!")
141
+ return None
142
+ return spritesheet[index]
143
+
144
+ def draw_sprite(self, target_surface, name: str, index: int,
145
+ pos=(0, 0), size=None):
146
+ """Draw one frame from a loaded spritesheet."""
147
+ sprite = self.get_sprite(name, index)
148
+ if sprite is None:
149
+ return
150
+
151
+ if size is not None:
152
+ sprite = pygame.transform.smoothscale(sprite, tuple(size))
153
+ target_surface.blit(sprite, pos)
@@ -3,7 +3,8 @@ import pygame
3
3
  class AudioManager:
4
4
  """The `AudioManager` class allows you to play audio in your VertexEngine app. It has only 4 functions for sound and music."""
5
5
  def __init__(self):
6
- pygame.mixer.init()
6
+ if not pygame.mixer.get_init():
7
+ pygame.mixer.init()
7
8
  self.sounds = {}
8
9
  self.music = None
9
10
 
@@ -1,6 +1,6 @@
1
- from PyQt6.QtWidgets import QWidget
2
- from PyQt6.QtGui import QImage, QPainter
3
- from PyQt6.QtCore import QTimer, Qt
1
+ from PySide6.QtWidgets import QWidget
2
+ from PySide6.QtGui import QImage, QPainter
3
+ from PySide6.QtCore import QTimer, Qt
4
4
  import pygame
5
5
  from .scenes import SceneManager
6
6
  from VertexEngine.InputSystem.KeyInputs import Input
@@ -42,14 +42,14 @@ class GameEngine(QWidget):
42
42
  """Helper to sync the Pygame surface into a Qt-friendly image buffer."""
43
43
  # Always rebuild the image from the current frame so the Qt widget
44
44
  # doesn't keep rendering the stale black buffer created at startup.
45
- raw = pygame.image.tobytes(self.screen, "RGB")
45
+ self._frame_bytes = pygame.image.tobytes(self.screen, "RGB")
46
46
  self.img = QImage(
47
- raw,
47
+ self._frame_bytes,
48
48
  self.width,
49
49
  self.height,
50
50
  self.width * 3,
51
51
  QImage.Format.Format_RGB888
52
- ).copy()
52
+ )
53
53
 
54
54
  # ---------------------- RENDER ----------------------
55
55
 
@@ -71,13 +71,14 @@ class GameEngine(QWidget):
71
71
 
72
72
  def _update_frame(self):
73
73
  if not self.hasFocus():
74
- self.keys_down.clear()
74
+ Input.clear()
75
75
 
76
76
  # Optimized: Clear and draw into the pygame surface during the update step
77
77
  self.screen.fill(self.color)
78
78
  self.scene_manager._update()
79
79
  self.scene_manager.draw(self.screen)
80
80
  self._sync_qimage()
81
+ Input.input_update()
81
82
 
82
83
  # Schedule the visual swap
83
84
  self.update()
@@ -2,8 +2,8 @@ import sys
2
2
  import random
3
3
  import pygame
4
4
 
5
- from PyQt6.QtWidgets import QApplication
6
- from PyQt6.QtCore import Qt
5
+ from PySide6.QtWidgets import QApplication
6
+ from PySide6.QtCore import Qt
7
7
 
8
8
  from VertexEngine.engine import GameEngine
9
9
  from VertexEngine.scenes import Scene
@@ -1,8 +1,8 @@
1
1
  from VertexEngine.InputSystem.Events import ButtonEvents
2
2
  from VertexEngine import VertexUI
3
- from PyQt6.QtWidgets import QApplication, QWidget, QVBoxLayout
4
- from PyQt6.QtCore import Qt
5
- from PyQt6.QtGui import QFont
3
+ from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout
4
+ from PySide6.QtCore import Qt
5
+ from PySide6.QtGui import QFont
6
6
  import sys
7
7
  import random
8
8
  Buttons = ButtonEvents()
@@ -35,7 +35,7 @@ def random_text():
35
35
  messages = [
36
36
  "VertexEngine 🔥",
37
37
  "Buttons clicked 😄",
38
- "PyQt6 is clean ✨",
38
+ "PySide6 is clean ✨",
39
39
  "Event system FTW 🎮",
40
40
  "Random works 🎲"
41
41
  ]
@@ -57,6 +57,8 @@ class SceneManager:
57
57
  self.current_scene = None
58
58
 
59
59
  def set_scene(self, scene):
60
+ if scene is self.current_scene:
61
+ return
60
62
  if self.current_scene:
61
63
  self.current_scene.on_exit()
62
64
  self.current_scene.hide()
@@ -66,13 +68,16 @@ class SceneManager:
66
68
  self.current_scene.on_enter()
67
69
 
68
70
  def _update(self):
69
- if self.current_scene:
70
- self.current_scene.update()
71
+ scene = self.current_scene
72
+ if scene is not None:
73
+ scene.update()
71
74
 
72
75
  def draw(self, surface):
73
- if self.current_scene:
74
- self.current_scene.draw(surface)
76
+ scene = self.current_scene
77
+ if scene is not None:
78
+ scene.draw(surface)
75
79
 
76
80
  def handle_event(self, event):
77
- if self.current_scene:
78
- self.current_scene.handle_event(event)
81
+ scene = self.current_scene
82
+ if scene is not None:
83
+ scene.handle_event(event)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: VertexEngine
3
- Version: 1.9.5
3
+ Version: 2.0.0
4
4
  Summary: A high-performance SDK for Python Development.
5
5
  Author-email: Tyrel Miguel <annbasilan0828@gmail.com>
6
6
  License: MIT
@@ -11,7 +11,7 @@ Project-URL: Official Tech Site, https://tyrel.onrender.com
11
11
  Project-URL: Source, https://github.com/VertexEngine-Projects/VertexEngine-Code
12
12
  Project-URL: Issues, https://github.com/VertexEngine-Projects/VertexEngine-Code/issues
13
13
  Project-URL: Discord, https://discord.gg/jqG8kQjX
14
- Keywords: gamedev,game-development,game-engine,pyqt6,pygame,pygame-ce,sdk,gui
14
+ Keywords: gamedev,game-development,game-engine,PySide6,pygame,pygame-ce,sdk,gui
15
15
  Classifier: Development Status :: 5 - Production/Stable
16
16
  Classifier: Intended Audience :: Developers
17
17
  Classifier: Topic :: Software Development :: Build Tools
@@ -28,7 +28,7 @@ Classifier: Operating System :: OS Independent
28
28
  Requires-Python: >=3.10
29
29
  Description-Content-Type: text/markdown
30
30
  License-File: LICENSE
31
- Requires-Dist: PyQt6>=6.7
31
+ Requires-Dist: PySide6>=6.7.0
32
32
  Requires-Dist: pygame>=2.6; python_version < "3.14"
33
33
  Requires-Dist: pygame-ce>=2.5.0; python_version >= "3.14"
34
34
  Dynamic: license-file
@@ -49,17 +49,23 @@ Dynamic: license-file
49
49
  </p>
50
50
 
51
51
  # VertexEngine/Vertex
52
- VertexEngine is a GUI and Game Engine for python applications, it works best if you use py installer
52
+ VertexEngine is a GUI and Game Engine for Python applications.
53
53
 
54
54
  ## Official Extensions:
55
- - [VertexEngine-WebEngine](https://pypi.org/project/VertexEngine-WebEngine)
55
+ - [VertexEngine-JSON](https://pypi.org/project/VertexEngine-json)
56
56
  - [VertexEngine-CLI](https://pypi.org/project/VertexEngine-CLI/1.0/)
57
57
 
58
58
  ## Help
59
59
  - The documentation is in the following link: [Documentation](https://vertexenginedocs.netlify.app/) for help.
60
60
  - Support Email: FinalFacility0828@gmail.com
61
61
 
62
- ## Change Logs (1.7.0 - 1.9.4)
62
+ ## Change Logs (1.8rc1 - 2.0)
63
+ ### 2.0
64
+ - Thanks for ONE YEAR!
65
+ - Added Spritesheets, Delta Time, New Import Shortcuts
66
+ - Fundemental Change: All Code references of PyQt6 have been replaced with the more lenient PySide6.
67
+ ### 1.9.6
68
+ - Engine Optimizations
63
69
  ### 1.9.5
64
70
  - Widget Fixes
65
71
  ### 1.9.4
@@ -73,7 +79,7 @@ VertexEngine is a GUI and Game Engine for python applications, it works best if
73
79
  ### 1.9.1
74
80
  - NEW DEMO
75
81
  - How to Run: python3.x -m VertexEngine.examples.pygwidget_test
76
- - Fixed engine clash bug (pygame and pyqt6 bug)
82
+ - Fixed engine clash bug (pygame and PySide6 bug)
77
83
  ### 1.9
78
84
  - FINALLY fixed the demos!
79
85
  - how to run:
@@ -118,41 +124,27 @@ VertexEngine is a GUI and Game Engine for python applications, it works best if
118
124
  ### 1.8rc1
119
125
  - Patched some runtime errors
120
126
  - Added MATH! (from VertexEngine.math import *)
121
- ### 1.7.3
122
- - Added new functions to collisions!
123
- ### 1.7.2
124
- - Added HIGHLIGHTING to Ocean Code!**
125
- - Fixed a lot of bugs!
126
- - Fixed outdated URLs (2 day server shutdown)
127
- ### 1.7.1
128
- - official VertexEngine Projects Browser! (RainExplorer)
129
- - Accounts Wiped soon.
130
- - Fixed a bit too many bugs.
131
- ### 1.7.0
132
- - Fixed Collision not defined errors
133
- - Added an official3 Tutorial Video!
134
- - Accounts will be wiped soon.
135
-
136
- ## How to install VertexEngine/Vertex:
137
- Step 1: Type in pip install VertexEngine
138
-
139
- Step 2: Wait a few min, don't worry if it takes 1 hr or more, it will finish
140
-
141
- Pygame or PyQt6 systems are compatible with Vertex so you can use pygame collision system or PyQt6's UI system in VertexEngine.
127
+
128
+ ## How to install VertexEngine:
129
+ Step 1: Type in `pip install VertexEngine`
130
+
131
+ Step 2: Wait a few minutes.
132
+
133
+ Pygame or PySide6 systems are compatible with VertexEngine so you can use pygame collision system or PySide6's UI system in VertexEngine.
142
134
 
143
135
  ## Dependencies
144
- Vertex obviously has heavy dependencies since it's a game engine, the following requirements are:
136
+ VertexEngine obviously has heavy dependencies since it's a game engine, the following requirements are:
145
137
 
146
138
  | Dependency | Version |
147
139
  |------------------|--------------------------------------|
148
- | PyQt6 | >=6.7 |
140
+ | PySide6 | >=6.7 |
149
141
  | Pygame | >=2.0 |
150
142
  | Python | >=3.10 |
151
143
 
152
- ## About Me ❔
144
+ ## About Me
153
145
  I’m a solo developer based in Quezon City, building tools and engines for both fun and serious projects.
154
146
 
155
- ## 📄 License
147
+ ## License
156
148
  VertexEngine is licensed under the MIT License.
157
149
 
158
150
  You are free to use, modify, and distribute this project, as long as proper attribution is given. See the LICENSE file for details.
@@ -41,4 +41,5 @@ src/VertexEngine/examples/MajorSystemTest/Wangi.png
41
41
  src/VertexEngine/examples/MajorSystemTest/main.py
42
42
  src/VertexEngine/examples/MajorSystemTest/universfield-ui-button-click-147358.mp3
43
43
  src/VertexEngine/examples/games/snake/main.py
44
- tests/test_pygame_vwidgets_style.py
44
+ tests/test_pygame_vwidgets_style.py
45
+ tests/test_spritesheet_manager.py
@@ -1,4 +1,4 @@
1
- PyQt6>=6.7
1
+ PySide6>=6.7.0
2
2
 
3
3
  [:python_version < "3.14"]
4
4
  pygame>=2.6
@@ -0,0 +1,15 @@
1
+ import pygame
2
+
3
+ from VertexEngine import AssetManager
4
+
5
+
6
+ def test_load_spritesheet_splits_frames(monkeypatch):
7
+ sheet = pygame.Surface((20, 10), pygame.SRCALPHA)
8
+ monkeypatch.setattr(pygame.image, "load", lambda path: sheet)
9
+ manager = AssetManager()
10
+
11
+ frames = manager.load_spritesheet("player", "player.png", (10, 10))
12
+
13
+ assert len(frames) == 2
14
+ assert [frame.get_size() for frame in frames] == [(10, 10), (10, 10)]
15
+ assert manager.get_sprite("player", 1).get_size() == (10, 10)
File without changes
File without changes