Added shooter ennemy
BIN
gamedata/assets/shooter/0.png
Normal file
After Width: | Height: | Size: 846 B |
BIN
gamedata/assets/shooter/1.png
Normal file
After Width: | Height: | Size: 839 B |
BIN
gamedata/assets/shooter/2.png
Normal file
After Width: | Height: | Size: 820 B |
BIN
gamedata/assets/shooter/3.png
Normal file
After Width: | Height: | Size: 812 B |
BIN
gamedata/assets/shooter/4.png
Normal file
After Width: | Height: | Size: 820 B |
BIN
gamedata/assets/shooter/5.png
Normal file
After Width: | Height: | Size: 839 B |
BIN
gamedata/assets/shooter/spike.png
Normal file
After Width: | Height: | Size: 663 B |
@ -22,6 +22,8 @@ class Ennemy(Movable):
|
||||
self.candie = True
|
||||
self.cancombo = True
|
||||
|
||||
self.onscreen = True
|
||||
|
||||
self.nodes = nodes
|
||||
self.customvalues = customvalues
|
||||
|
||||
@ -32,6 +34,16 @@ class Ennemy(Movable):
|
||||
|
||||
def step(self):
|
||||
|
||||
self.onscreen = True
|
||||
if self.rect.center[0] < self.game.globals["camerax"]-self.respawnmargin:
|
||||
self.onscreen = False
|
||||
if self.rect.center[0] > self.game.globals["camerax"]+self.game.globals["cameraw"]+self.respawnmargin:
|
||||
self.onscreen = False
|
||||
if self.rect.center[1] < self.game.globals["cameray"]-self.respawnmargin:
|
||||
self.onscreen = False
|
||||
if self.rect.center[1] > self.game.globals["cameray"]+self.game.globals["camerah"]+self.respawnmargin:
|
||||
self.onscreen = False
|
||||
|
||||
if not self.dead:
|
||||
super().step()
|
||||
# Check for collision with player
|
||||
@ -65,11 +77,7 @@ class Ennemy(Movable):
|
||||
self.player.canfastfall = True
|
||||
self.player.upcombo()
|
||||
elif self.respawn:
|
||||
|
||||
if self.rect.center[0] < self.game.globals["camerax"]-self.respawnmargin:
|
||||
self.dead = False # Respawn
|
||||
if self.rect.center[0] > self.game.globals["camerax"]+self.game.globals["cameraw"]+self.respawnmargin:
|
||||
self.dead = False # Respawn
|
||||
|
||||
if not self.onscreen:
|
||||
self.dead = False
|
||||
else:
|
||||
self.game.gameloop.delid(self.id)
|
||||
|
34
gamedata/objects/ingame/ennemies/projectile.py
Normal file
@ -0,0 +1,34 @@
|
||||
from gamedata.objects.ingame.ennemies.ennemy import Ennemy
|
||||
|
||||
class Projectile(Ennemy):
|
||||
|
||||
def __init__(self,*args):
|
||||
|
||||
super().__init__(*args)
|
||||
|
||||
self.flip = self.customvalues["flip"]
|
||||
self.sprite = self.game.pygame.transform.flip(self.game.sprite_lib["shooter/spike.png"],self.flip,False)
|
||||
self.rect[2],self.rect[3] = self.sprite.get_size()
|
||||
self.rect[0]-=(self.rect[2])/2
|
||||
self.rect[1]-=(self.rect[3])/2
|
||||
|
||||
self.spd = 120
|
||||
self.candie = False
|
||||
self.collisions = False
|
||||
|
||||
def step(self):
|
||||
|
||||
movement = -self.spd*self.game.dt
|
||||
if self.flip:
|
||||
movement*=-1
|
||||
|
||||
self.horspd=movement
|
||||
|
||||
super().step()
|
||||
|
||||
if not self.onscreen:
|
||||
self.game.gameloop.delid(self.id)
|
||||
|
||||
def draw(self):
|
||||
|
||||
self.game.window.blit(self.sprite,[self.rect[0]-self.game.globals["camerax"],self.rect[1]-self.game.globals["cameray"]])
|
44
gamedata/objects/ingame/ennemies/shooter.py
Normal file
@ -0,0 +1,44 @@
|
||||
from gamedata.objects.ingame.ennemies.ennemy import Ennemy
|
||||
from gamedata.objects.ingame.ennemies.projectile import Projectile
|
||||
|
||||
class Shooter(Ennemy):
|
||||
|
||||
def __init__(self,*args):
|
||||
|
||||
super().__init__(*args)
|
||||
|
||||
self.sprites = self.game.getSpriteDir("shooter/")
|
||||
self.projectilesprite = self.game.getSpriteDir("shooter/spike.png")
|
||||
self.sprite = self.sprites[0]
|
||||
self.spriteindex = 0
|
||||
self.animspeed = 6
|
||||
|
||||
self.rect[2],self.rect[3] = self.sprite.get_size()
|
||||
|
||||
self.rect[0]+=(16-self.rect[2])/2
|
||||
self.rect[1]+=(16-self.rect[3])/2
|
||||
|
||||
self.shoottimer = self.game.lib.Timer(2)
|
||||
|
||||
self.candie = False
|
||||
|
||||
def step(self):
|
||||
|
||||
if self.spriteindex == 0:
|
||||
self.sprite = self.sprites[0]
|
||||
if self.shoottimer.tick(self.game.dt):
|
||||
self.spriteindex+=self.animspeed*self.game.dt
|
||||
# Shoot
|
||||
p = Projectile(self.rect.center[0],self.rect.center[1],self.game,self.nodes,self.customvalues)
|
||||
self.game.gameloop.summon(p)
|
||||
else:
|
||||
self.spriteindex+=self.animspeed*self.game.dt
|
||||
self.sprite = self.sprites[int(self.spriteindex)%len(self.sprites)]
|
||||
if int(self.spriteindex)>=len(self.sprites):
|
||||
self.spriteindex = 0
|
||||
|
||||
super().step()
|
||||
|
||||
def draw(self):
|
||||
sprite = self.game.pygame.transform.flip(self.sprite,self.customvalues["flip"],False)
|
||||
self.game.window.blit(sprite,(self.rect[0]-self.game.globals["camerax"],self.rect[1]-self.game.globals["cameray"]))
|
@ -12,6 +12,8 @@ class Squid(Ennemy):
|
||||
|
||||
self.rect[2],self.rect[3] = self.deadsprite.get_size()
|
||||
|
||||
self.flip = False
|
||||
|
||||
self.speed = 40
|
||||
self.spriteindex = 0
|
||||
|
||||
@ -54,6 +56,9 @@ class Squid(Ennemy):
|
||||
|
||||
self.spriteindex += self.speed*self.game.dt*0.15
|
||||
|
||||
if self.player:
|
||||
self.flip = self.player.rect.center[0]>self.rect.center[0]
|
||||
|
||||
super().step() # Actually move
|
||||
|
||||
|
||||
@ -63,4 +68,5 @@ class Squid(Ennemy):
|
||||
self.sprite = self.sprites[int(self.spriteindex)%len(self.sprites)]
|
||||
if self.fallingway>0:
|
||||
self.sprite = self.sprites[1]
|
||||
self.game.window.blit(self.sprite,[self.rect[0]-self.game.globals["camerax"],self.rect[1]-self.game.globals["cameray"]])
|
||||
sprite = self.game.pygame.transform.flip(self.sprite,self.flip,False)
|
||||
self.game.window.blit(sprite,[self.rect[0]-self.game.globals["camerax"],self.rect[1]-self.game.globals["cameray"]])
|
||||
|
@ -21,55 +21,62 @@ class Movable(BaseObject):
|
||||
self.hrest = 0
|
||||
self.vrest = 0
|
||||
|
||||
self.collisions = True
|
||||
|
||||
|
||||
def step(self):
|
||||
|
||||
self.move(self.horspd,self.verspd)
|
||||
self.move(self.horspd,self.verspd,collisions=self.collisions)
|
||||
|
||||
def move(self,movex,movey):
|
||||
def move(self,movex,movey,collisions = True):
|
||||
hstoped = False
|
||||
hor = int(movex+self.hrest)
|
||||
self.hrest = movex+self.hrest-hor
|
||||
while abs(hor)>0:
|
||||
if hor>=self.tilew:
|
||||
diffx = self.tilew
|
||||
elif hor<=-self.tilew:
|
||||
diffx = -self.tilew
|
||||
else:
|
||||
diffx = hor
|
||||
rect = self.checkcollisions(diffx,0)
|
||||
if rect:
|
||||
hor = 0
|
||||
self.hrest = 0
|
||||
hstopped = True
|
||||
if diffx>0:
|
||||
self.rect.right = rect.left
|
||||
if collisions:
|
||||
while abs(hor)>0:
|
||||
if hor>=self.tilew:
|
||||
diffx = self.tilew
|
||||
elif hor<=-self.tilew:
|
||||
diffx = -self.tilew
|
||||
else:
|
||||
self.rect.left = rect.right
|
||||
else:
|
||||
hor-=diffx
|
||||
self.rect[0]+=diffx
|
||||
diffx = hor
|
||||
rect = self.checkcollisions(diffx,0)
|
||||
if rect:
|
||||
hor = 0
|
||||
self.hrest = 0
|
||||
hstopped = True
|
||||
if diffx>0:
|
||||
self.rect.right = rect.left
|
||||
else:
|
||||
self.rect.left = rect.right
|
||||
else:
|
||||
hor-=diffx
|
||||
self.rect[0]+=diffx
|
||||
|
||||
vstoped = False
|
||||
ver = int(movey+self.vrest)
|
||||
self.vrest = movey+self.vrest-ver
|
||||
while abs(ver)>0:
|
||||
if abs(ver)>self.tileh:
|
||||
diffy = self.tileh*abs(ver)/ver
|
||||
else:
|
||||
diffy = ver
|
||||
rect = self.checkcollisions(0,diffy)
|
||||
if rect:
|
||||
vstopped = True
|
||||
ver = 0
|
||||
self.vrest = 0
|
||||
if diffy>0:
|
||||
self.rect.bottom = rect.top
|
||||
if collisions:
|
||||
while abs(ver)>0:
|
||||
if abs(ver)>self.tileh:
|
||||
diffy = self.tileh*abs(ver)/ver
|
||||
else:
|
||||
self.rect.top = rect.bottom
|
||||
else:
|
||||
ver-=diffy
|
||||
self.rect[1]+=diffy
|
||||
diffy = ver
|
||||
rect = self.checkcollisions(0,diffy)
|
||||
if rect:
|
||||
vstopped = True
|
||||
ver = 0
|
||||
self.vrest = 0
|
||||
if diffy>0:
|
||||
self.rect.bottom = rect.top
|
||||
else:
|
||||
self.rect.top = rect.bottom
|
||||
else:
|
||||
ver-=diffy
|
||||
self.rect[1]+=diffy
|
||||
else:
|
||||
self.rect[0]+=hor
|
||||
self.rect[1]+=ver
|
||||
|
||||
def checkcollisions(self,offx,offy,classic=True,semi=True):
|
||||
temprect = self.rect.copy()
|
||||
|
@ -6,6 +6,7 @@ from gamedata.objects.ingame.ennemies.spring import Spring
|
||||
from gamedata.objects.ingame.ennemies.waterchange import WaterChange
|
||||
from gamedata.objects.ingame.ennemies.trashbag import TrashBag
|
||||
from gamedata.objects.ingame.ennemies.squid import Squid
|
||||
from gamedata.objects.ingame.ennemies.shooter import Shooter
|
||||
from gamedata.objects.ingame.endflag import EndFlag
|
||||
from gamedata.objects.levels import Levels
|
||||
from gamedata.objects.ripple import Ripple
|
||||
@ -84,7 +85,7 @@ class TilesetRenderer(BaseObject):
|
||||
self.bgm.set_volume(self.game.globals["bgmvolume"])
|
||||
self.bgm.play(-1)
|
||||
spawnlists = {"Spawns":self.spawns}
|
||||
ennemies = {"Robot":Robot,"Crate":Crate,"Balloon":Balloon,"Spring":Spring,"WaterChange":WaterChange,"Levels":Levels,"End":EndFlag,"TrashBag":TrashBag,"Ripple":Ripple,"Squid":Squid}
|
||||
ennemies = {"Robot":Robot,"Crate":Crate,"Balloon":Balloon,"Spring":Spring,"WaterChange":WaterChange,"Levels":Levels,"End":EndFlag,"TrashBag":TrashBag,"Ripple":Ripple,"Squid":Squid,"Shooter":Shooter}
|
||||
self.queue = [] # For spawning ennemies after beeing initialized
|
||||
if "layers" in json.keys() and type(json["layers"]).__name__=="list":
|
||||
solidlayer = False
|
||||
|