sverpykit 0.2.15__tar.gz → 0.2.16__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 (27) hide show
  1. {sverpykit-0.2.15 → sverpykit-0.2.16}/PKG-INFO +3 -1
  2. {sverpykit-0.2.15 → sverpykit-0.2.16}/README.md +2 -0
  3. {sverpykit-0.2.15 → sverpykit-0.2.16}/pyproject.toml +1 -1
  4. sverpykit-0.2.15/sverpykit/Objects/Entity.py → sverpykit-0.2.16/sverpykit/Objects/Object.py +60 -16
  5. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit/Ui/SearchBar.py +6 -3
  6. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit/Ui/TextBlock.py +26 -3
  7. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit/__init__.py +6 -2
  8. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit/core/Config.py +8 -0
  9. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit/core/Runtime.py +1 -1
  10. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit.egg-info/PKG-INFO +3 -1
  11. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit.egg-info/SOURCES.txt +1 -2
  12. sverpykit-0.2.15/sverpykit/Objects/Block.py +0 -28
  13. {sverpykit-0.2.15 → sverpykit-0.2.16}/LICENSE +0 -0
  14. {sverpykit-0.2.15 → sverpykit-0.2.16}/setup.cfg +0 -0
  15. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit/Collide/Collide.py +0 -0
  16. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit/Draw/Draw.py +0 -0
  17. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit/Shapes/Circle.py +0 -0
  18. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit/Ui/Button.py +0 -0
  19. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit/Ui/DropDown.py +0 -0
  20. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit/Ui/Window.py +0 -0
  21. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit/core/FileManager.py +0 -0
  22. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit/core/Json.py +0 -0
  23. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit/core/Objects.py +0 -0
  24. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit/core/initialize.py +0 -0
  25. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit.egg-info/dependency_links.txt +0 -0
  26. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit.egg-info/requires.txt +0 -0
  27. {sverpykit-0.2.15 → sverpykit-0.2.16}/sverpykit.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sverpykit
3
- Version: 0.2.15
3
+ Version: 0.2.16
4
4
  Summary: A wrapper for pygame.
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -10,6 +10,8 @@ Dynamic: license-file
10
10
  # Sverrys PygameTools
11
11
  Sverrys PygameTools is a wrapper for the library "pygame" that adds a UI and game logic.
12
12
 
13
+ <img src="sverpykit_icon.svg" height=200 width=200>
14
+
13
15
  How to use:<br>
14
16
  To use Sverrys PygameTools you must install it from github by executing this command
15
17
  in your terminal:<br>
@@ -1,6 +1,8 @@
1
1
  # Sverrys PygameTools
2
2
  Sverrys PygameTools is a wrapper for the library "pygame" that adds a UI and game logic.
3
3
 
4
+ <img src="sverpykit_icon.svg" height=200 width=200>
5
+
4
6
  How to use:<br>
5
7
  To use Sverrys PygameTools you must install it from github by executing this command
6
8
  in your terminal:<br>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "sverpykit"
7
- version = "0.2.15"
7
+ version = "0.2.16"
8
8
  description = "A wrapper for pygame."
9
9
  readme = "README.md"
10
10
  dependencies = [
@@ -2,14 +2,15 @@ from sverpykit.core import Config, Runtime
2
2
  from typing import Callable, Any
3
3
  import pygame
4
4
 
5
- class Entity:
5
+ class Object:
6
6
  def __init__(
7
7
  self,
8
8
  hitbox: pygame.Rect,
9
9
  surface: pygame.Surface,
10
10
  events: dict[str, Callable] | None = None,
11
11
  statistics: dict[str, Any] | None = None,
12
- states: dict[str, Any] | None = None
12
+ states: dict[str, Any] | None = None,
13
+ resize_surface: bool = True
13
14
  ):
14
15
  events = events if isinstance(events, dict)\
15
16
  else {}
@@ -19,10 +20,17 @@ class Entity:
19
20
  else {}
20
21
  self.hitbox = hitbox
21
22
  self.surface = surface
22
-
23
- self.states = {
24
- "vy": 0,
25
- "vx": 0,
23
+ if resize_surface:
24
+ self.surface = pygame.transform.scale(surface, (hitbox.w, hitbox.h))
25
+
26
+ self.states: dict[str, str | int | float | bool | dict[str, str | int | float | bool]] = {
27
+ "surface": "solid", # Will be used later with slippery and bouncy.
28
+ "physics": {
29
+ "enabled": False,
30
+ "terminal_velocity": 1 # This is a multiplier, but 0 = off (Keep speeding up forever).
31
+ },
32
+ "vy": 0.0,
33
+ "vx": 0.0,
26
34
  "show_hitbox": False
27
35
  }
28
36
  self.states.update(states)
@@ -34,17 +42,24 @@ class Entity:
34
42
  self.stats.update(statistics)
35
43
 
36
44
  self.accepted_events = {
37
- "key": Entity.key_events,
38
- "mouse": Entity.mouse_events
45
+ "key": Object.key_events,
46
+ "mouse": Object.mouse_events,
47
+ "random": Object.random_event
39
48
  }
40
49
  self.accepted_events.update(events)
41
50
 
51
+ self.standing_on: Object | None = None
52
+ self.on_ground = False
53
+
42
54
  def key_events(self, keys: dict):
43
55
  pass
44
56
 
45
57
  def mouse_events(self, button: int, pos: tuple[int, int]):
46
58
  pass
47
59
 
60
+ def random_event(self, number):
61
+ pass
62
+
48
63
  def draw(self):
49
64
  Config.screen.blit(
50
65
  self.surface, self.hitbox
@@ -57,11 +72,25 @@ class Entity:
57
72
  width=1
58
73
  )
59
74
 
60
- def events(self):
61
- self.hitbox.y += self.states["vy"] * Config.delta_time
75
+ def physics(self):
76
+ mass = self.hitbox.w * self.hitbox.h
77
+ terminal_velocity = mass * Config.terminal_velocity
78
+ self.states["vy"] = min(terminal_velocity, max(-terminal_velocity, self.states["vy"] - Config.delta_time * Config.gravity))
79
+
80
+ friction_force_x = int(
81
+ Config.slippery_friction if self.standing_on.states["surface"] == "slippery" else Config.solid_friction* (mass * Config.gravity)
82
+ ) if self.standing_on else Config.air_friction
83
+ if self.states["vx"] > 0:
84
+ self.states["vx"] = max(0, self.states["vx"] - friction_force_x)
85
+ if self.states["vx"] < 0:
86
+ self.states["vx"] = min(0, self.states["vx"] + friction_force_x)
87
+
88
+ self.hitbox.y -= self.states["vy"] * Config.delta_time * Config.gravity
62
89
  self.check_y_collision()
63
- self.hitbox.x += self.states["vx"] * Config.delta_time
90
+ self.hitbox.x += self.states["vx"] * Config.delta_time * Config.gravity
64
91
  self.check_x_collision()
92
+
93
+ def events(self):
65
94
  click = pygame.mouse.get_pressed()
66
95
  mp = pygame.mouse.get_pos()
67
96
  if any(click):
@@ -69,6 +98,8 @@ class Entity:
69
98
  keys = pygame.key.get_pressed()
70
99
  if any(keys):
71
100
  self.accepted_events["key"](self, keys)
101
+ if self.states["physics"]:
102
+ self.physics()
72
103
 
73
104
  def check_x_collision(self) -> None:
74
105
  """
@@ -82,12 +113,14 @@ class Entity:
82
113
  continue
83
114
  if not obj.collides(self.hitbox):
84
115
  continue
116
+ if obj is self:
117
+ continue
85
118
 
86
119
  if self.states["vx"] > 0:
87
- self.hitbox.x = obj.rect.x - self.hitbox.w
120
+ self.hitbox.x = obj.hitbox.x - self.hitbox.w
88
121
  reset_velocity = True
89
122
  elif self.states["vx"] < 0:
90
- self.hitbox.x = obj.rect.x + obj.rect.w
123
+ self.hitbox.x = obj.hitbox.x + obj.rect.w
91
124
  reset_velocity = True
92
125
 
93
126
  if reset_velocity:
@@ -98,20 +131,31 @@ class Entity:
98
131
  This check should be run after every time you update the y-position of the entity.
99
132
  """
100
133
 
134
+ self.on_ground = False
101
135
  reset_velocity = False
136
+ collides_on = None
102
137
 
103
138
  for obj in Runtime.game_objects:
139
+ print(hasattr(obj, "collides"))
104
140
  if not hasattr(obj, "collides"):
105
141
  continue
106
142
  if not obj.collides(self.hitbox):
107
143
  continue
144
+ if obj is self:
145
+ continue
108
146
 
109
147
  if self.states["vy"] > 0:
110
- self.hitbox.y = obj.rect.y - self.hitbox.h
148
+ self.hitbox.y = obj.hitbox.y + obj.hitbox.h
111
149
  reset_velocity = True
112
150
  elif self.states["vy"] < 0:
113
- self.hitbox.y = obj.rect.y + obj.rect.h
151
+ self.hitbox.y = obj.hitbox.y - self.hitbox.h
114
152
  reset_velocity = True
153
+ collides_on = obj
154
+ self.on_ground = True
115
155
 
116
156
  if reset_velocity:
117
- self.states["vy"] = 0
157
+ self.states["vy"] = 0
158
+ self.standing_on = collides_on
159
+
160
+ def collides(self, hitbox: pygame.Rect):
161
+ return self.hitbox.colliderect(hitbox)
@@ -12,17 +12,20 @@ class SearchBar:
12
12
  display: pygame.Surface,
13
13
  function: Callable = lambda x: None,
14
14
  color: pygame.Color | tuple[int, int, int] = (50, 50, 50),
15
+ preset: str = "",
15
16
  **kwargs
16
17
  ):
17
18
  self.rect: pygame.Rect = rect
18
19
  self.hitbox_offset = (0, 0)
19
20
 
21
+ self.preset = preset
22
+
20
23
  self.display: pygame.Surface = display
21
24
  self.color: pygame.Color | tuple[int, int, int] = color
22
25
 
23
26
  self.stored: str = ""
24
27
  self.last_stored: str = ""
25
- self.stored_surf: pygame.Surface = Config.fonts['default'].render(self.stored, True, Config.BEIGE)
28
+ self.stored_surf: pygame.Surface = Config.fonts['default'].render(f"{self.preset}: {self.stored}", True, Config.BEIGE)
26
29
 
27
30
  self.selected: bool = False
28
31
 
@@ -84,13 +87,13 @@ class SearchBar:
84
87
  self.stored += event.unicode
85
88
 
86
89
  if self.stored != self.last_stored:
87
- self.stored_surf = Draw.render_text(self.stored)
90
+ self.stored_surf = Draw.render_text(f"{self.preset}: {self.stored}")
88
91
  self.last_stored = self.stored
89
92
 
90
93
  if not click:
91
94
  return
92
95
 
93
- if Collide.rect_point(
96
+ if Collide.collides.rect_point(
94
97
  rect=pygame.Rect(
95
98
  self.rect.x + self.hitbox_offset[0],
96
99
  self.rect.y + self.hitbox_offset[1],
@@ -1,6 +1,6 @@
1
1
  from sverpykit.core import Config
2
2
  from sverpykit.Draw import Draw
3
- from sverpykit.Ui import Window
3
+ from sverpykit.Ui import Window, SearchBar
4
4
  from typing import Callable, Any
5
5
  import pygame
6
6
 
@@ -15,6 +15,7 @@ class TextBlock:
15
15
  self.rect = rect
16
16
  self.text = text
17
17
  self.text_surfs: list[dict] = [{"text": Draw.render_text(str(text), name=font), "newline": newline}]
18
+ self.searchbars: list[SearchBar.SearchBar] = []
18
19
  self.font = font
19
20
 
20
21
  self.owner = None
@@ -28,6 +29,7 @@ class TextBlock:
28
29
 
29
30
  offset_x = 0
30
31
  offset_y = 0
32
+ searchbars_index = 0
31
33
  for payload in self.text_surfs:
32
34
  Draw.draw_surface(
33
35
  payload["text"], (
@@ -52,7 +54,17 @@ class TextBlock:
52
54
  offset_x = 0
53
55
  else:
54
56
  offset_x += payload["text"].get_width()
57
+
58
+ if payload.get("input", False) and payload["input"][0]:
59
+ sb = self.searchbars[searchbars_index]
60
+ if self.owner:
61
+ sb.hitbox_offset = (self.owner.rect.x, self.owner.rect.y)
62
+ sb.rect.x = offset_x
63
+ sb.rect.y = offset_y
64
+ searchbars_index += 1
55
65
  self.last_size = offset_y
66
+ [sb.draw(display) for sb in self.searchbars]
67
+ [sb.events() for sb in self.searchbars]
56
68
 
57
69
  def events(self):
58
70
  mp = pygame.mouse.get_pos()
@@ -112,14 +124,25 @@ class TextBlock:
112
124
  font: str,
113
125
  color: tuple[int, int, int],
114
126
  hyperlink: tuple[Callable, list[Any]] | None = None,
127
+ input_: tuple[bool, Callable, list[Any], str] = (False, lambda : None, [], ""),
115
128
  newline: bool = False
116
129
  ):
117
- self.text = self.text + "\n" + text
130
+ self.text = self.text + text
118
131
  self.text_surfs.append({
119
132
  "text": Draw.render_text(text, True, color, font),
120
133
  "hyperlink": hyperlink,
121
- "newline": newline
134
+ "newline": newline,
135
+ "input": input_
122
136
  })
137
+ if input_[0]:
138
+ print(input_)
139
+ self.searchbars.append(SearchBar.SearchBar(
140
+ *input_[2],
141
+ rect=pygame.Rect(0, 0, 200, Config.fonts[self.font].get_height()),
142
+ display=Config.screen,
143
+ function=input_[1],
144
+ preset=input_[3]
145
+ ))
123
146
 
124
147
  def reset(self):
125
148
  self.text = ""
@@ -16,8 +16,9 @@ from .Collide.Collide import collides
16
16
 
17
17
  # Drawing
18
18
  from .Draw.Draw import draw_surface, draw_rect, draw_circle, render_text
19
- from .Objects.Entity import Entity
20
- from .Objects.Block import Platform
19
+
20
+ # Object
21
+ from .Objects.Object import Object
21
22
 
22
23
  # Ui parts
23
24
  from .Ui.Button import Button
@@ -26,6 +27,9 @@ from .Ui.DropDown import DropDown
26
27
  from .Ui.Window import Window
27
28
  from .Ui.TextBlock import TextBlock
28
29
 
30
+ # Colors
31
+ from .core.Config import BEIGE
32
+
29
33
  __all__ = [
30
34
  "Config",
31
35
  "Runtime",
@@ -24,6 +24,14 @@ events: list[pygame.event.Event] = []
24
24
  clock: pygame.time.Clock = pygame.time.Clock()
25
25
  delta_time: int
26
26
 
27
+ # Physics
28
+ gravity = 20
29
+ terminal_velocity = 10
30
+
31
+ solid_friction = 1
32
+ slippery_friction = 0.7
33
+ air_friction = 0.25
34
+
27
35
  # Functions
28
36
  exit_function: Callable = default_exit
29
37
  frame_function: Callable = frame
@@ -107,9 +107,9 @@ def update():
107
107
  register_tick()
108
108
 
109
109
  Config.screen.fill(Config.background_color)
110
- Config.frame_function()
111
110
  [layer.draw() for layer in ui_layers]
112
111
  [obj.draw() for obj in game_objects]
112
+ Config.frame_function()
113
113
 
114
114
  pygame.display.flip()
115
115
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sverpykit
3
- Version: 0.2.15
3
+ Version: 0.2.16
4
4
  Summary: A wrapper for pygame.
5
5
  Description-Content-Type: text/markdown
6
6
  License-File: LICENSE
@@ -10,6 +10,8 @@ Dynamic: license-file
10
10
  # Sverrys PygameTools
11
11
  Sverrys PygameTools is a wrapper for the library "pygame" that adds a UI and game logic.
12
12
 
13
+ <img src="sverpykit_icon.svg" height=200 width=200>
14
+
13
15
  How to use:<br>
14
16
  To use Sverrys PygameTools you must install it from github by executing this command
15
17
  in your terminal:<br>
@@ -9,8 +9,7 @@ sverpykit.egg-info/requires.txt
9
9
  sverpykit.egg-info/top_level.txt
10
10
  sverpykit/Collide/Collide.py
11
11
  sverpykit/Draw/Draw.py
12
- sverpykit/Objects/Block.py
13
- sverpykit/Objects/Entity.py
12
+ sverpykit/Objects/Object.py
14
13
  sverpykit/Shapes/Circle.py
15
14
  sverpykit/Ui/Button.py
16
15
  sverpykit/Ui/DropDown.py
@@ -1,28 +0,0 @@
1
- import pygame
2
-
3
- class Platform:
4
- def __init__(
5
- self,
6
- rect: pygame.Rect,
7
- surface: pygame.Surface,
8
- display: pygame.Surface,
9
- resize_surface: bool = True
10
- ):
11
- self.rect = rect
12
- self.surface = pygame.transform.scale(
13
- surface, (self.rect.w, self.rect.h)
14
- ) if resize_surface else surface
15
- self.display = display
16
-
17
- def draw(self, display: pygame.Surface | None = None):
18
- display = display if display else self.display
19
-
20
- display.blit(
21
- self.surface, self.rect
22
- )
23
-
24
- def events(self):
25
- pass
26
-
27
- def collides(self, rect: pygame.Rect):
28
- return self.rect.colliderect(rect)
File without changes
File without changes