Compare commits

...

2 Commits

Author SHA1 Message Date
theo@manjaro ad0dbd135b Removed artefact 2021-11-25 15:12:53 +01:00
theo@manjaro a773aeb4a6 Added shooter ennemy 2021-11-25 15:11:23 +01:00
14 changed files with 144 additions and 44 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 846 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 820 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 812 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 820 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 839 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 663 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.3 KiB

View File

@ -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)

View 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"]])

View 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"]))

View File

@ -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"]])

View File

@ -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()

View File

@ -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