Skip to content

Commit 66202fe

Browse files
committed
Optimization
1 parent 86de6ef commit 66202fe

File tree

14 files changed

+129
-149
lines changed

14 files changed

+129
-149
lines changed

Changelog.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
## V 1.1.2 : Patch Update 2 - XX/06/19
44

55
- UISystem : Add a show_debug function
6+
- Optimization
67
- Bug Fix : EntitySystem give wrong id to Entities
78
- Bug Fix : EntitySystem is render after UISystem
89
- Bug Fix : Window is always in debug mode

pyengine/Components/ControlComponent.py

Lines changed: 71 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -44,20 +44,14 @@ def __init__(self, controltype, speed=5):
4444
}
4545

4646
def set_control(self, name, key):
47-
if not type(name) == Controls:
47+
if not isinstance(name, Controls):
4848
raise TypeError("Name must be a Controls type")
49-
try:
50-
self.controles[name] = key
51-
except KeyError:
52-
raise ValueError("Control unknown : "+name)
49+
self.controles[name] = key
5350

5451
def get_control(self, name):
55-
if not type(name) == Controls:
52+
if not isinstance(name, Controls):
5653
raise TypeError("Name must be a Controls type")
57-
try:
58-
return self.controles[name]
59-
except KeyError:
60-
raise ValueError("Control unknown : "+name)
54+
return self.controles[name]
6155

6256
def get_speed(self):
6357
return self.speed
@@ -70,27 +64,26 @@ def set_entity(self, entity):
7064

7165
def update(self):
7266
if self.controltype == ControlType.CLICKFOLLOW and self.goto != (-1, -1):
73-
if not self.entity.has_component(PositionComponent):
74-
raise NoObjectError("Entity must have PositionComponent.")
75-
position = self.entity.get_component(PositionComponent)
76-
if position.x-10 < self.goto[0] < position.x+10 and position.y-10 < self.goto[1] < position.y+10:
77-
self.goto = (-1, -1)
78-
else:
79-
pos = [position.x, position.y]
80-
if position.x-10 > self.goto[0]:
81-
pos[0] = position.x - self.speed
82-
elif position.x+10 < self.goto[0]:
83-
pos[0] = position.x + self.speed
84-
if position.y-10 > self.goto[1]:
85-
pos[1] = position.y - self.speed
86-
elif position.y+10 < self.goto[1]:
87-
pos[1] = position.y + self.speed
88-
89-
cango = True
90-
if self.entity.has_component(PhysicsComponent):
91-
cango = self.entity.get_component(PhysicsComponent).can_go(pos)
92-
if cango:
93-
self.entity.get_component(PositionComponent).set_position(pos)
67+
if self.entity.has_component(PositionComponent):
68+
position = self.entity.get_component(PositionComponent)
69+
if position.x-10 < self.goto[0] < position.x+10 and position.y-10 < self.goto[1] < position.y+10:
70+
self.goto = (-1, -1)
71+
else:
72+
pos = [position.x, position.y]
73+
if position.x-10 > self.goto[0]:
74+
pos[0] = position.x - self.speed
75+
elif position.x+10 < self.goto[0]:
76+
pos[0] = position.x + self.speed
77+
if position.y-10 > self.goto[1]:
78+
pos[1] = position.y - self.speed
79+
elif position.y+10 < self.goto[1]:
80+
pos[1] = position.y + self.speed
81+
82+
cango = True
83+
if self.entity.has_component(PhysicsComponent):
84+
cango = self.entity.get_component(PhysicsComponent).can_go(pos)
85+
if cango:
86+
self.entity.get_component(PositionComponent).set_position(pos)
9487

9588
def mousepress(self, evt):
9689
if self.controltype == ControlType.CLICKFOLLOW and evt.button == MouseButton.LEFTCLICK.value:
@@ -104,51 +97,50 @@ def keyup(self, evt):
10497

10598
def keypress(self, evt):
10699
eventkey = evt.key
107-
if not self.entity.has_component(PositionComponent):
108-
raise NoObjectError("Entity must have PositionComponent.")
109-
position = self.entity.get_component(PositionComponent)
110-
pos = position.get_position()
111-
cango = True
112-
if eventkey == self.controles[Controls.LEFT]:
113-
if self.controltype == ControlType.FOURDIRECTION or self.controltype == ControlType.CLASSICJUMP \
114-
or self.controltype == ControlType.DOUBLEJUMP or self.controltype == ControlType.LEFTRIGHT:
115-
pos = [position.x - self.speed, position.y]
116-
if self.entity.has_component(PhysicsComponent):
117-
cango = self.entity.get_component(PhysicsComponent).can_go(pos, CollisionCauses.LEFTCONTROL)
118-
if eventkey == self.controles[Controls.RIGHT]:
119-
if self.controltype == ControlType.FOURDIRECTION or self.controltype == ControlType.CLASSICJUMP \
120-
or self.controltype == ControlType.DOUBLEJUMP or self.controltype == ControlType.LEFTRIGHT:
121-
pos = [position.x + self.speed, position.y]
122-
if self.entity.has_component(PhysicsComponent):
123-
cango = self.entity.get_component(PhysicsComponent).can_go(pos, CollisionCauses.RIGHTCONTROL)
124-
if eventkey == self.controles[Controls.UPJUMP]:
125-
if self.controltype == ControlType.FOURDIRECTION or self.controltype == ControlType.UPDOWN:
126-
pos = [position.x, position.y - self.speed]
127-
if self.entity.has_component(PhysicsComponent):
128-
cango = self.entity.get_component(PhysicsComponent).can_go(pos, CollisionCauses.UPCONTROL)
129-
elif self.controltype == ControlType.CLASSICJUMP:
130-
if not self.entity.has_component(PhysicsComponent):
131-
raise NoObjectError("Entity must have PhysicsComponent")
132-
phys = self.entity.get_component(PhysicsComponent)
133-
if phys.grounded and not self.jumping:
134-
phys.grounded = False
135-
self.jumping = True
136-
phys.gravity_force = -phys.max_gravity_force
137-
elif self.controltype == ControlType.DOUBLEJUMP:
138-
if not self.entity.has_component(PhysicsComponent):
139-
raise NoObjectError("Entity must have PhysicsComponent")
140-
phys = self.entity.get_component(PhysicsComponent)
141-
if (phys.grounded or phys.doublejump) and not self.jumping:
142-
if not phys.grounded:
143-
phys.doublejump = False
144-
phys.grounded = False
145-
self.jumping = True
146-
phys.gravity_force = -phys.max_gravity_force
147-
if eventkey == self.controles[Controls.DOWN]:
148-
if self.controltype == ControlType.FOURDIRECTION or self.controltype == ControlType.UPDOWN:
149-
pos = [position.x, position.y + self.speed]
150-
if self.entity.has_component(PhysicsComponent):
151-
cango = self.entity.get_component(PhysicsComponent).can_go(pos, CollisionCauses.DOWNCONTROL)
152-
153-
if cango:
154-
self.entity.get_component(PositionComponent).set_position(pos)
100+
if self.entity.has_component(PositionComponent):
101+
position = self.entity.get_component(PositionComponent)
102+
pos = position.get_position()
103+
cango = True
104+
if eventkey == self.controles[Controls.LEFT]:
105+
if self.controltype == ControlType.FOURDIRECTION or self.controltype == ControlType.CLASSICJUMP \
106+
or self.controltype == ControlType.DOUBLEJUMP or self.controltype == ControlType.LEFTRIGHT:
107+
pos = [position.x - self.speed, position.y]
108+
if self.entity.has_component(PhysicsComponent):
109+
cango = self.entity.get_component(PhysicsComponent).can_go(pos, CollisionCauses.LEFTCONTROL)
110+
if eventkey == self.controles[Controls.RIGHT]:
111+
if self.controltype == ControlType.FOURDIRECTION or self.controltype == ControlType.CLASSICJUMP \
112+
or self.controltype == ControlType.DOUBLEJUMP or self.controltype == ControlType.LEFTRIGHT:
113+
pos = [position.x + self.speed, position.y]
114+
if self.entity.has_component(PhysicsComponent):
115+
cango = self.entity.get_component(PhysicsComponent).can_go(pos, CollisionCauses.RIGHTCONTROL)
116+
if eventkey == self.controles[Controls.UPJUMP]:
117+
if self.controltype == ControlType.FOURDIRECTION or self.controltype == ControlType.UPDOWN:
118+
pos = [position.x, position.y - self.speed]
119+
if self.entity.has_component(PhysicsComponent):
120+
cango = self.entity.get_component(PhysicsComponent).can_go(pos, CollisionCauses.UPCONTROL)
121+
elif self.controltype == ControlType.CLASSICJUMP:
122+
if not self.entity.has_component(PhysicsComponent):
123+
raise NoObjectError("Entity must have PhysicsComponent")
124+
phys = self.entity.get_component(PhysicsComponent)
125+
if phys.grounded and not self.jumping:
126+
phys.grounded = False
127+
self.jumping = True
128+
phys.gravity_force = -phys.max_gravity_force
129+
elif self.controltype == ControlType.DOUBLEJUMP:
130+
if not self.entity.has_component(PhysicsComponent):
131+
raise NoObjectError("Entity must have PhysicsComponent")
132+
phys = self.entity.get_component(PhysicsComponent)
133+
if (phys.grounded or phys.doublejump) and not self.jumping:
134+
if not phys.grounded:
135+
phys.doublejump = False
136+
phys.grounded = False
137+
self.jumping = True
138+
phys.gravity_force = -phys.max_gravity_force
139+
if eventkey == self.controles[Controls.DOWN]:
140+
if self.controltype == ControlType.FOURDIRECTION or self.controltype == ControlType.UPDOWN:
141+
pos = [position.x, position.y + self.speed]
142+
if self.entity.has_component(PhysicsComponent):
143+
cango = self.entity.get_component(PhysicsComponent).can_go(pos, CollisionCauses.DOWNCONTROL)
144+
145+
if cango:
146+
self.entity.get_component(PositionComponent).set_position(pos)

pyengine/Components/MoveComponent.py

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from pyengine.Components.PositionComponent import PositionComponent
22
from pyengine.Components.PhysicsComponent import PhysicsComponent, CollisionCauses
3-
from pyengine.Exceptions import NoObjectError
43

54
__all__ = ["MoveComponent"]
65

@@ -27,21 +26,20 @@ def get_direction(self):
2726
return self.direction
2827

2928
def update(self):
30-
if not self.entity.has_component(PositionComponent):
31-
raise NoObjectError("Entity must have PositionComponent.")
32-
position = self.entity.get_component(PositionComponent)
33-
pos = position.get_position()
34-
if self.direction[0] == 1:
35-
pos[0] += self.speed
36-
elif self.direction[0] == -1:
37-
pos[0] -= self.speed
38-
if self.direction[1] == 1:
39-
pos[1] += self.speed
40-
elif self.direction[1] == -1:
41-
pos[1] -= self.speed
42-
cango = True
43-
if self.entity.has_component(PhysicsComponent):
44-
cango = self.entity.get_component(PhysicsComponent).can_go(pos, CollisionCauses.MOVECOMPONENT)
45-
if cango:
46-
self.entity.get_component(PositionComponent).set_position(pos)
29+
if self.entity.has_component(PositionComponent):
30+
position = self.entity.get_component(PositionComponent)
31+
pos = position.get_position()
32+
if self.direction[0] == 1:
33+
pos[0] += self.speed
34+
elif self.direction[0] == -1:
35+
pos[0] -= self.speed
36+
if self.direction[1] == 1:
37+
pos[1] += self.speed
38+
elif self.direction[1] == -1:
39+
pos[1] -= self.speed
40+
cango = True
41+
if self.entity.has_component(PhysicsComponent):
42+
cango = self.entity.get_component(PhysicsComponent).can_go(pos, CollisionCauses.MOVECOMPONENT)
43+
if cango:
44+
self.entity.get_component(PositionComponent).set_position(pos)
4745

pyengine/Components/PhysicsComponent.py

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ def set_callback(self, function):
4040
self.callback = function
4141

4242
def can_go(self, position, createdby=CollisionCauses.UNKNOWN):
43-
if not self.entity.has_component(SpriteComponent):
44-
raise NoObjectError("Entity must have SpriteComponent.")
4543
gosprite = pygame.sprite.Sprite()
4644
gosprite.rect = pygame.rect.Rect(position[0], position[1], self.entity.image.get_width(),
4745
self.entity.image.get_height())
@@ -54,19 +52,18 @@ def can_go(self, position, createdby=CollisionCauses.UNKNOWN):
5452
return True
5553

5654
def update_gravity(self):
57-
if not self.entity.has_component(PositionComponent):
58-
raise NoObjectError("Entity must have PositionComponent.")
59-
position = self.entity.get_component(PositionComponent)
60-
if self.affectbygravity:
61-
if self.can_go([position.x, position.y + self.gravity_force], CollisionCauses.GRAVITY):
62-
self.grounded = False
63-
position.set_position([position.x, position.y + self.gravity_force])
64-
elif self.gravity_force > 0:
65-
self.grounded = True
66-
self.doublejump = True
67-
self.gravity_force = 2
55+
if self.entity.has_component(PositionComponent):
56+
position = self.entity.get_component(PositionComponent)
57+
if self.affectbygravity:
58+
if self.can_go([position.x, position.y + self.gravity_force], CollisionCauses.GRAVITY):
59+
self.grounded = False
60+
position.set_position([position.x, position.y + self.gravity_force])
61+
elif self.gravity_force > 0:
62+
self.grounded = True
63+
self.doublejump = True
64+
self.gravity_force = 2
6865

69-
if self.timegravity <= 0 and self.gravity_force < self.max_gravity_force and not self.grounded:
70-
self.gravity_force += 1
71-
self.timegravity = 5
72-
self.timegravity -= 1
66+
if self.timegravity <= 0 and self.gravity_force < self.max_gravity_force and not self.grounded:
67+
self.gravity_force += 1
68+
self.timegravity = 5
69+
self.timegravity -= 1

pyengine/Components/TextComponent.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,7 @@
55

66

77
class TextComponent:
8-
def __init__(self, texte, color=None, font=None):
9-
if font is None:
10-
font = Font()
11-
if color is None:
12-
color = Colors.WHITE.value
13-
8+
def __init__(self, texte, color=Colors.WHITE.value, font=Font):
149
if not isinstance(font, Font):
1510
raise TypeError("Font have not a Font type")
1611
if not isinstance(color, Color):

pyengine/Entity.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,9 @@ def get_component(self, component):
5757
def update(self):
5858
if self.has_component(PhysicsComponent):
5959
self.get_component(PhysicsComponent).update_gravity()
60+
6061
if self.has_component(PositionComponent):
62+
# Verify if entity is not out of window
6163
position = self.get_component(PositionComponent)
6264
if position.y >= self.system.state.window.height - self.image.get_rect().height:
6365
self.system.state.call(StateCallbacks.OUTOFWINDOW, self, position.get_position())
@@ -67,7 +69,9 @@ def update(self):
6769
self.system.state.call(StateCallbacks.OUTOFWINDOW, self, position.get_position())
6870
elif position.x < 0:
6971
self.system.state.call(StateCallbacks.OUTOFWINDOW, self, position.get_position())
72+
7073
if self.has_component(ControlComponent):
7174
self.get_component(ControlComponent).update()
75+
7276
if self.has_component(MoveComponent):
7377
self.get_component(MoveComponent).update()

pyengine/GameState.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def set_callback(self, callback, function):
3636
def call(self, callback, *param):
3737
if type(callback) == StateCallbacks:
3838
if self.callbacks[callback] is not None:
39-
self.callbacks[callback](*param)
39+
self.callbacks[callback](*param) # Call function which is represented by the callback
4040
else:
4141
raise TypeError("Callback must be a StateCallback (from StateCallbacks Enum)")
4242

@@ -59,8 +59,8 @@ def run(self):
5959
raise NoObjectError("GameState is attached to any Window.")
6060

6161
self.systems["Entity"].update()
62-
self.systems["Entity"].show(self.window.screen)
6362
self.systems["UI"].update()
63+
self.systems["Entity"].show(self.window.screen)
6464
self.systems["UI"].show(self.window.screen)
6565
if self.window.debug:
6666
self.systems["Entity"].show_debug(self.window.screen)

pyengine/Systems/EntitySystem.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,7 @@ def add_entity(self, entity):
3636
return entity
3737

3838
def has_entity(self, entity):
39-
if entity in self.entities:
40-
return True
41-
return False
39+
return entity in self.entities
4240

4341
def remove_entity(self, entity):
4442
if entity.has_component(SpriteComponent):

pyengine/Systems/UISystem.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,16 @@ def get_widget(self, identity):
1919
def add_widget(self, widget):
2020
if not isinstance(widget, Widget):
2121
raise TypeError("Argument is not type of "+str(Widget)+" but "+str(type(widget))+".")
22-
widget.set_id(len(self.widgets))
22+
if len(self.widgets):
23+
widget.set_id(self.widgets.sprites()[-1].id + 1)
24+
else:
25+
widget.set_id(0)
2326
self.widgets.add(widget)
2427
widget.set_system(self)
2528
return widget
2629

2730
def has_widget(self, widget):
28-
if widget in self.widgets:
29-
return True
30-
return False
31+
return widget in self.widgets
3132

3233
def remove_widget(self, widget):
3334
if widget in self.widgets:

pyengine/Widgets/Image.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,9 @@ def __init__(self, position, image, size=None):
1717
def get_image(self):
1818
return self.istr
1919

20-
def set_image(self, image, size=None):
20+
def set_image(self, image):
2121
self.istr = image
2222
self.image = pygame.image.load(image)
23-
if size is not None:
24-
self.image = pygame.transform.scale(self.image, size)
2523
self.update_rect()
2624

2725
def get_size(self):

0 commit comments

Comments
 (0)