Added springs

This commit is contained in:
theo@manjaro 2021-11-18 17:58:38 +01:00
parent 5b326bda81
commit 03db91acd0
20 changed files with 152 additions and 66 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 857 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 852 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 743 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 852 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@ -1248,13 +1248,13 @@
[-1], [-1],
[-1], [-1],
[-1], [-1],
[5, 4],
[6, 4],
[5, 4],
[6, 4],
[4, 4],
[-1], [-1],
[-1], [10, 4],
[-1],
[-1],
[-1],
[-1],
[-1],
[-1], [-1],
[-1], [-1],
[-1], [-1],
@ -1337,13 +1337,13 @@
[-1], [-1],
[-1], [-1],
[-1], [-1],
[5, 5],
[6, 5],
[5, 5],
[6, 5],
[4, 5],
[-1], [-1],
[-1], [10, 5],
[-1],
[-1],
[-1],
[-1],
[-1],
[-1], [-1],
[-1], [-1],
[-1], [-1],
@ -1426,11 +1426,11 @@
[-1], [-1],
[-1], [-1],
[-1], [-1],
[-1], [7, 4],
[-1], [8, 4],
[-1], [7, 4],
[-1], [8, 4],
[-1], [4, 5],
[-1], [-1],
[-1], [-1],
[-1], [-1],
@ -1515,11 +1515,11 @@
[-1], [-1],
[-1], [-1],
[-1], [-1],
[-1], [7, 5],
[-1], [8, 5],
[-1], [7, 5],
[-1], [8, 5],
[-1], [4, 6],
[-1], [-1],
[-1], [-1],
[-1], [-1],
@ -1604,11 +1604,11 @@
[-1], [-1],
[-1], [-1],
[-1], [-1],
[-1], [0, 5],
[-1], [1, 5],
[-1], [7, 4],
[-1], [8, 4],
[-1], [4, 6],
[-1], [-1],
[-1], [-1],
[-1], [-1],
@ -1693,10 +1693,10 @@
[-1], [-1],
[-1], [-1],
[-1], [-1],
[-1], [0, 6],
[-1], [1, 6],
[-1], [7, 5],
[-1], [8, 5],
[-1], [-1],
[-1], [-1],
[-1], [-1],
@ -1784,8 +1784,8 @@
[-1], [-1],
[-1], [-1],
[-1], [-1],
[-1], [0, 5],
[-1], [1, 5],
[-1], [-1],
[-1], [-1],
[-1], [-1],
@ -1873,8 +1873,8 @@
[-1], [-1],
[-1], [-1],
[-1], [-1],
[-1], [0, 6],
[-1], [1, 6],
[-1], [-1],
[-1], [-1],
[-1], [-1],
@ -2449,7 +2449,8 @@
{"name": "Solid", "id": 38, "_eid": "17026310", "x": 832, "y": 304, "width": 96, "height": 32, "originX": 0, "originY": 0}, {"name": "Solid", "id": 38, "_eid": "17026310", "x": 832, "y": 304, "width": 96, "height": 32, "originX": 0, "originY": 0},
{"name": "Solid", "id": 39, "_eid": "17026310", "x": 848, "y": 336, "width": 64, "height": 96, "originX": 0, "originY": 0}, {"name": "Solid", "id": 39, "_eid": "17026310", "x": 848, "y": 336, "width": 64, "height": 96, "originX": 0, "originY": 0},
{"name": "SemiSolid", "id": 40, "_eid": "59763689", "x": 832, "y": 208, "width": 64, "height": 16, "originX": 0, "originY": 0}, {"name": "SemiSolid", "id": 40, "_eid": "59763689", "x": 832, "y": 208, "width": 64, "height": 16, "originX": 0, "originY": 0},
{"name": "SemiSolid", "id": 42, "_eid": "59763689", "x": 1040, "y": 176, "width": 80, "height": 16, "originX": 0, "originY": 0} {"name": "SemiSolid", "id": 42, "_eid": "59763689", "x": 1040, "y": 176, "width": 80, "height": 16, "originX": 0, "originY": 0},
{"name": "SemiSolid", "id": 43, "_eid": "59763689", "x": 1184, "y": 208, "width": 80, "height": 16, "originX": 0, "originY": 0}
] ]
}, },
{ {
@ -2496,14 +2497,16 @@
{"name": "Crate", "id": 14, "_eid": "16023910", "x": 624, "y": 208, "originX": 0, "originY": 0}, {"name": "Crate", "id": 14, "_eid": "16023910", "x": 624, "y": 208, "originX": 0, "originY": 0},
{"name": "Crate", "id": 15, "_eid": "16023910", "x": 608, "y": 208, "originX": 0, "originY": 0}, {"name": "Crate", "id": 15, "_eid": "16023910", "x": 608, "y": 208, "originX": 0, "originY": 0},
{"name": "Crate", "id": 16, "_eid": "16023910", "x": 592, "y": 208, "originX": 0, "originY": 0}, {"name": "Crate", "id": 16, "_eid": "16023910", "x": 592, "y": 208, "originX": 0, "originY": 0},
{"name": "Balloon", "id": 18, "_eid": "16494694", "x": 912, "y": 160, "originX": 0, "originY": 0}, {
{"name": "Balloon", "id": 19, "_eid": "16494694", "x": 976, "y": 144, "originX": 0, "originY": 0}, "name": "Spring",
{"name": "Balloon", "id": 20, "_eid": "16494694", "x": 800, "y": 160, "originX": 0, "originY": 0}, "id": 35,
{"name": "Crate", "id": 21, "_eid": "16023910", "x": 864, "y": 192, "originX": 0, "originY": 0}, "_eid": "24018769",
{"name": "Crate", "id": 22, "_eid": "16023910", "x": 864, "y": 176, "originX": 0, "originY": 0}, "x": 864,
{"name": "Crate", "id": 23, "_eid": "16023910", "x": 864, "y": 160, "originX": 0, "originY": 0}, "y": 192,
{"name": "Crate", "id": 24, "_eid": "16023910", "x": 864, "y": 144, "originX": 0, "originY": 0}, "originX": 0,
{"name": "Crate", "id": 25, "_eid": "16023910", "x": 864, "y": 128, "originX": 0, "originY": 0} "originY": 0,
"values": {"angle": 45, "strength": 8}
}
] ]
} }
] ]

View File

@ -2,12 +2,12 @@ from gamedata.objects.combat.ennemies.ennemy import Ennemy
class Balloon(Ennemy): class Balloon(Ennemy):
def __init__(self,x,y,game,nodes=None): def __init__(self,*args):
super().__init__(x,y,game,nodes) super().__init__(*args)
self.sprites = game.getSpriteDir("balloon/") self.sprites = self.game.getSpriteDir("balloon/")
self.deadsprite = game.sprite_lib["balloon/broke.png"] self.deadsprite = self.game.sprite_lib["balloon/broke.png"]
self.rect[2],self.rect[3] = self.sprites[0].get_size() self.rect[2],self.rect[3] = self.sprites[0].get_size()
self.rect[3]*=0.6 self.rect[3]*=0.6

View File

@ -2,12 +2,12 @@ from gamedata.objects.combat.ennemies.ennemy import Ennemy
class Crate(Ennemy): class Crate(Ennemy):
def __init__(self,x,y,game,nodes=None): def __init__(self,*args):
super().__init__(x,y,game,nodes) super().__init__(*args)
self.sprite = game.sprite_lib["crate/crate.png"] self.sprite = self.game.sprite_lib["crate/crate.png"]
self.deadsprite = game.sprite_lib["crate/broke.png"] self.deadsprite = self.game.sprite_lib["crate/broke.png"]
self.size = self.sprite.get_size() self.size = self.sprite.get_size()
self.rect[2],self.rect[3] = self.size self.rect[2],self.rect[3] = self.size

View File

@ -2,7 +2,7 @@ from gamedata.objects.combat.movable import Movable
class Ennemy(Movable): class Ennemy(Movable):
def __init__(self,x,y,game,nodes=None): def __init__(self,x,y,game,nodes,customvalues):
super().__init__(game,x,y) super().__init__(game,x,y)
@ -20,6 +20,9 @@ class Ennemy(Movable):
self.candie = True self.candie = True
self.cancombo = True self.cancombo = True
self.nodes = nodes
self.customvalues = customvalues
self.dustparticles = game.getSpriteDir("particles/dust/") self.dustparticles = game.getSpriteDir("particles/dust/")
def step(self): def step(self):
@ -37,9 +40,7 @@ class Ennemy(Movable):
hor = 1 hor = 1
else: else:
hor = -1 hor = -1
self.player.horkb = hor*6 self.player.yeet(hor*6,self.player.gravityway*-3)
self.player.verkb = self.player.gravityway*-3
self.player.combo = 0
if self.candie and self.player.canhit: if self.candie and self.player.canhit:
if self.rect.colliderect(self.player.hitrect): if self.rect.colliderect(self.player.hitrect):
# Die # Die

View File

@ -2,13 +2,13 @@ from gamedata.objects.combat.ennemies.ennemy import Ennemy
class Robot(Ennemy): class Robot(Ennemy):
def __init__(self,x,y,game,nodes=None): def __init__(self,*args):
super().__init__(x,y,game,nodes) super().__init__(*args)
self.sprites = game.getSpriteDir("robot/") self.sprites = self.game.getSpriteDir("robot/")
self.sprite = self.sprites[0] self.sprite = self.sprites[0]
self.deadsprite = game.sprite_lib["robot/death.png"] self.deadsprite = self.game.sprite_lib["robot/death.png"]
self.rect[2],self.rect[3] = self.deadsprite.get_size() self.rect[2],self.rect[3] = self.deadsprite.get_size()
@ -20,11 +20,11 @@ class Robot(Ennemy):
self.walkingway = 1 # Horizontal flip self.walkingway = 1 # Horizontal flip
# Offset it correctly # Offset it correctly
self.rect[0] = x+8-self.rect[2]/2 self.rect[0] += 8-self.rect[2]/2
# Movement boundaries # Movement boundaries
if nodes: if self.nodes:
self.endpoints = [x["x"] for x in nodes[:2]] # Get only x positions self.endpoints = [x["x"] for x in self.nodes[:2]] # Get only x positions
self.endpoints.sort() self.endpoints.sort()
else: else:
self.endpoints = None self.endpoints = None

View File

@ -0,0 +1,69 @@
from gamedata.objects.combat.ennemies.ennemy import Ennemy
class Spring(Ennemy):
def __init__(self,*args):
super().__init__(*args)
spritesnormal = self.game.getSpriteDir("spring/normal/")
spritesside = self.game.getSpriteDir("spring/side/")
spritesdiagonal = self.game.getSpriteDir("spring/diagonal/")
self.sprite = spritesnormal[0]
self.rect[2],self.rect[3] = self.sprite.get_width(),round(self.sprite.get_height()/2)
self.spriteindex = 0
self.animspeed = 8
# Zone in with the player is colliding
# Formatting the angle ( clockwise, in degrees, starting at the top )
if "angle" in self.customvalues:
angle = self.customvalues["angle"]
else:
angle = 0
# Sprite,flipx,flipy
self.orientations = [[spritesnormal,False,False],[spritesdiagonal,False,False],[spritesside,False,False],[spritesdiagonal,False,True],[spritesnormal,False,True],[spritesdiagonal,True,True],[spritesside,True,False],[spritesdiagonal,True,False]]
orientation = self.orientations[int((angle/360*len(self.orientations))+0.5)%len(self.orientations)]
self.sprites = []
for i in orientation[0]:
self.sprites.append(self.game.pygame.transform.flip(i,orientation[1],orientation[2]))
self.sprite = self.sprites[0]
angle = self.game.math.radians(angle-90)
# Offsetting the zone
distance = self.rect[3]
self.ratiox = self.game.math.cos(angle)
self.ratioy = self.game.math.sin(angle)
offx = self.ratiox*distance
offy = self.ratioy*distance
self.jumpcenter = [self.rect.center[0]+offx,self.rect.center[1]+offy]
self.jumpradius = 10
if "strength" in self.customvalues:
self.jumpstrength = self.customvalues["strength"]
else:
self.jumpstrength = 5
self.candie = False
self.canhit = False
def step(self):
super().step()
# Check for collision with player
if self.player.verspd*self.ratioy<0 or abs(self.ratioy)<0.3:
if self.game.math.sqrt((self.player.rect.center[0]-self.jumpcenter[0])**2+(self.player.rect.center[1]-self.jumpcenter[1])**2)<self.jumpradius and not self.player.onground:
# Yeet the player
force = self.jumpstrength
if self.player.fastfall:
force*=1.5
self.player.yeet(self.ratiox*force,self.ratioy*force)
self.spriteindex = len(self.sprites)
self.spriteindex-=self.animspeed*self.game.dt
if self.spriteindex<0:
self.spriteindex=0
self.sprite = self.sprites[int(self.spriteindex)]
def draw(self):
self.game.window.blit(self.sprite,[self.rect[0]-self.game.globals["camerax"],self.rect[1]-self.game.globals["cameray"]])

View File

@ -222,6 +222,8 @@ class Player(Movable):
self.verspd = self.maxgravity/5 self.verspd = self.maxgravity/5
if self.leaptimer>0: if self.leaptimer>0:
self.verspd*=self.gravityway self.verspd*=self.gravityway
else:
self.leaptimer = 0
self.canfastfall = False self.canfastfall = False
self.fastfall = self.gravityway self.fastfall = self.gravityway
else: else:
@ -244,6 +246,13 @@ class Player(Movable):
self.combo+=1 self.combo+=1
self.combotimer = 1 self.combotimer = 1
def yeet(self,hor,ver):
self.verspd = 0
self.combo = 0
self.horkb = hor
self.verkb = ver
self.canfastfall = True
def draw(self): def draw(self):
flipy = (self.gravityway<0 and not self.leaptimer<0) flipy = (self.gravityway<0 and not self.leaptimer<0)
if self.fastfall: if self.fastfall:

View File

@ -2,6 +2,7 @@ from gamedata.objects.base import BaseObject
from gamedata.objects.combat.ennemies.robot import Robot from gamedata.objects.combat.ennemies.robot import Robot
from gamedata.objects.combat.ennemies.crate import Crate from gamedata.objects.combat.ennemies.crate import Crate
from gamedata.objects.combat.ennemies.balloon import Balloon from gamedata.objects.combat.ennemies.balloon import Balloon
from gamedata.objects.combat.ennemies.spring import Spring
class TilesetRenderer(BaseObject): class TilesetRenderer(BaseObject):
@ -23,7 +24,7 @@ class TilesetRenderer(BaseObject):
# Spawning ennemies # Spawning ennemies
while len(self.queue)>0: while len(self.queue)>0:
props = self.queue.pop() props = self.queue.pop()
e = props[0](props[1],props[2],self.game,nodes=props[3]) e = props[0](props[1],props[2],self.game,props[3],props[4])
self.game.gameloop.summon(e) self.game.gameloop.summon(e)
def draw(self): def draw(self):
@ -39,7 +40,7 @@ class TilesetRenderer(BaseObject):
self.layers = [] self.layers = []
self.spawns = [] self.spawns = []
spawnlists = {"Spawns":self.spawns} spawnlists = {"Spawns":self.spawns}
ennemies = {"Robot":Robot,"Crate":Crate,"Balloon":Balloon} ennemies = {"Robot":Robot,"Crate":Crate,"Balloon":Balloon,"Spring":Spring}
self.queue = [] # For spawning ennemies after beeing initialized self.queue = [] # For spawning ennemies after beeing initialized
if "layers" in json.keys() and type(json["layers"]).__name__=="list": if "layers" in json.keys() and type(json["layers"]).__name__=="list":
solidlayer = False solidlayer = False
@ -62,9 +63,12 @@ class TilesetRenderer(BaseObject):
for entity in layer["entities"]: for entity in layer["entities"]:
x,y = entity["x"],entity["y"] x,y = entity["x"],entity["y"]
nodes = [] nodes = []
customvalues = {}
if "nodes" in entity.keys(): if "nodes" in entity.keys():
nodes = entity["nodes"] nodes = entity["nodes"]
self.queue.append((ennemies[entity["name"]],x,y,nodes)) if "values" in entity.keys():
customvalues = entity["values"]
self.queue.append((ennemies[entity["name"]],x,y,nodes,customvalues))
else: # J'ajoute un layer de tiles else: # J'ajoute un layer de tiles