-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
123 lines (100 loc) · 5.05 KB
/
Copy pathmain.py
File metadata and controls
123 lines (100 loc) · 5.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
import random
from framework import *
from framework.screen import Screen
from framework.camera import Camera
class DustParticle(Particle):
# [pos: Vector, radius, color:Color]
def renderParticle(self, particle):
Render.circle(particle[0], particle[1], color=particle[2], layer=0, camera=True)
particle[0] += Vector(random.randint(-2, 2), random.randint(-2, 2))
particle[1] -= 0.05+ random.random() * 0.2
particle[2] = Color.RGB(0, particle[2][1]-5, 0)
if particle[1] <= 0 or particle[2][1] <= 0:
self.deleteParticle(particle)
class Player(Object):
def __init__(self, pos: Vector):
super().__init__(pos)
img = loadImg(r"./character.png").convert_alpha()
self.sprite = Sprite(self.position, img)
self.head = HitBox(self.position, Vector(32, 25))
self.body = HitBox(self.position, Vector(75, 65))
self.sprite_collider = Maskcollider(self.position, self.sprite.img)
off = self.head.getCenterToPositionOffset(self.sprite.center() - Vector(0, 32))
self.layer = 1
self.addComponent(self.sprite)
self.addComponent(self.sprite_collider)
self.addComponent(self.head, off)
self.addComponent(self.body, self.body.getCenterToPositionOffset(self.sprite.center() + Vector(0, 15)))
class App(Game):
def __init__(self, width=500, height=500, layers=2) -> None:
super().__init__(width, height, layers)
self.p = DustParticle()
# create all the players
self.player = Player(Vector(10, 10))
self.player2 = Player(Vector(250, 10))
self.player3 = Player(Vector(500, 100))
self.player4 = Player(Vector(500, 190))
self.player5 = Player(Vector(500, 280))
self.start_btn = Button(Screen.center(), Vector(100,75))
self.inp = TextInput(Vector(250,100), Vector(200,75), valign="b", orientation="r")
# add some players to a group
GroupManager.addToGroup("Players", self.player3, self.player4, self.player5)
# create collider in the bottom right
self.collider1 = HitBox(Vector(250, 200), Vector(50, 50))
self.collider1.layer = 1
self.collider1.render = lambda: Render.rect(self.collider1.position, self.collider1.size.x,
self.collider1.size.y, layer=self.collider1.layer, camera=True)
self.timer = RepeatTimer(1, lambda: print("TIMER SIGNAL"))
self.timer.startTimer()
# add all objects to the activly updated scene
# scene can be changed with self.setActiveScene(S:Scene)
self.addToScene(self.collider1, self.player, self.player2, self.player3, self.player4, self.player5)
self.addToScene(self.start_btn, self.inp)
def drawBackground(self):
Screen.DISPLAY.fill(Color.BLUE)
# img = loadImg(r"./City.jpg").convert_alpha()
# self.display(img, Vector(0,0))
def loop(self):
Render.line(Vector(250,0), Vector(250,500), layer=1, color=Color.RED)
Render.line(Vector(0,250), Vector(500,250), layer=1, color=Color.RED)
Camera.set_target(self.player)
Camera.update_offset()
self.p.emit()
Render.text(Vector(250,15),"0000")
""" Main Loop """
for p in GroupManager.getGroup("Players"):
p.position.x -= 100 * Game.DELTA
speed = 300
# keyboard input detection
if Keyboard.pressed(pygame.K_LEFT) or Keyboard.pressed(pygame.K_a):
self.player.position.x -= speed * Game.DELTA
g.p.addParticles([g.player.body.center()+Vector(0,25), 7, Color.WHITE])
if Keyboard.pressed(pygame.K_RIGHT) or Keyboard.pressed(pygame.K_d):
self.player.position.x += speed * Game.DELTA
g.p.addParticles([g.player.body.center()+Vector(0,25), 7, Color.WHITE])
if Keyboard.pressed(pygame.K_UP) or Keyboard.pressed(pygame.K_w):
self.player.position.y -= speed * Game.DELTA
g.p.addParticles([g.player.body.center()+Vector(0,25), 7, Color.WHITE])
if Keyboard.pressed(pygame.K_DOWN) or Keyboard.pressed(pygame.K_s):
self.player.position.y += speed * Game.DELTA
g.p.addParticles([g.player.body.center()+Vector(0,25), 7, Color.WHITE])
# collision detection
# snapback collision adjusts the players position on collision
collision = CollisionHandler.snapbackCollision(self.player.body, self.collider1, self.player)
mc = CollisionHandler.maskcollision(self.player.sprite_collider, self.player2.sprite_collider)
if mc:
print("coll")
for player in GroupManager.getGroup("Players"):
pass
#CollisionHandler.snapbackCollision(self.player.head, player.body, self.player)
#CollisionHandler.snapbackCollision(player.body, self.player.head, player)
# mouse input
@onMouseButtonDown
def click(event):
if event.button == LEFT_MOUSE_BUTTON:
Camera.shakeScreen(intensity=5,durration=20)
else:
print(f"clicked {event.button}")
if __name__ == "__main__":
g = App()
g.run(60)