Lemming control
This commit is contained in:
parent
74becc583c
commit
56db421672
@ -3,3 +3,7 @@
|
|||||||
## Tileset
|
## Tileset
|
||||||
|
|
||||||
[Buch - OpenGameArt](https://opengameart.org/content/the-field-of-the-floating-islands)
|
[Buch - OpenGameArt](https://opengameart.org/content/the-field-of-the-floating-islands)
|
||||||
|
|
||||||
|
## Little characters
|
||||||
|
|
||||||
|
[GraphxKid - OpenGameArt](https://opengameart.org/content/arcade-platformer-assets)
|
||||||
|
@ -61,7 +61,7 @@ class Game():
|
|||||||
self.pasttime = time.time()
|
self.pasttime = time.time()
|
||||||
|
|
||||||
# Je charge la scene de base
|
# Je charge la scene de base
|
||||||
scenes.main(self)
|
scenes.ingame(self)
|
||||||
|
|
||||||
def set_camera(self,posx,posy):
|
def set_camera(self,posx,posy):
|
||||||
self.globals["camerax"], self.globals["cameray"] = posx,posy
|
self.globals["camerax"], self.globals["cameray"] = posx,posy
|
||||||
@ -114,44 +114,7 @@ class Game():
|
|||||||
"realtime" : 0, # Temps réel préssé
|
"realtime" : 0, # Temps réel préssé
|
||||||
"pressed" : False,
|
"pressed" : False,
|
||||||
"keycode" : pygame.K_ESCAPE # Code pygame de la touche en question
|
"keycode" : pygame.K_ESCAPE # Code pygame de la touche en question
|
||||||
},
|
|
||||||
"backspace":{
|
|
||||||
"timer" : 0, # Timer de la touche
|
|
||||||
"realtime" : 0, # Temps réel préssé
|
|
||||||
"pressed" : False,
|
|
||||||
"keycode" : pygame.K_BACKSPACE # Code pygame de la touche en question
|
|
||||||
},
|
|
||||||
"enter":{
|
|
||||||
"timer" : 0, # Timer de la touche
|
|
||||||
"realtime" : 0, # Temps réel préssé
|
|
||||||
"pressed" : False,
|
|
||||||
"keycode" : pygame.K_RETURN # Code pygame de la touche en question
|
|
||||||
},
|
|
||||||
"left":{
|
|
||||||
"timer" : 0, # Timer de la touche
|
|
||||||
"realtime" : 0, # Temps réel préssé
|
|
||||||
"pressed" : False,
|
|
||||||
"keycode" : pygame.K_q # Code pygame de la touche en question
|
|
||||||
},
|
|
||||||
"right":{
|
|
||||||
"timer" : 0, # Timer de la touche
|
|
||||||
"realtime" : 0, # Temps réel préssé
|
|
||||||
"pressed" : False,
|
|
||||||
"keycode" : pygame.K_d # Code pygame de la touche en question
|
|
||||||
},
|
|
||||||
"up":{
|
|
||||||
"timer" : 0, # Timer de la touche
|
|
||||||
"realtime" : 0, # Temps réel préssé
|
|
||||||
"pressed" : False,
|
|
||||||
"keycode" : pygame.K_z # Code pygame de la touche en question
|
|
||||||
},
|
|
||||||
"down":{
|
|
||||||
"timer" : 0, # Timer de la touche
|
|
||||||
"realtime" : 0, # Temps réel préssé
|
|
||||||
"pressed" : False,
|
|
||||||
"keycode" : pygame.K_s # Code pygame de la touche en question
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
self.no_unicode = [pygame.K_ESCAPE,pygame.K_BACKSPACE,pygame.K_RETURN]
|
self.no_unicode = [pygame.K_ESCAPE,pygame.K_BACKSPACE,pygame.K_RETURN]
|
||||||
|
70
gamedata/objects/ingame/lemmings.py
Normal file
70
gamedata/objects/ingame/lemmings.py
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
from gamedata.objects.base import BaseObject
|
||||||
|
import random,math
|
||||||
|
|
||||||
|
class Lemming(BaseObject):
|
||||||
|
def __init__(self,x,y,game):
|
||||||
|
super().__init__(x,y,game)
|
||||||
|
self.direction = random.randint(0,360)
|
||||||
|
self.radius = 30 # Radius in which the mouse can click
|
||||||
|
self.basespeed = 80 # Speed that he normally walks by
|
||||||
|
self.normalspeed = self.basespeed # Speed "objective"
|
||||||
|
self.speed = self.normalspeed # Current speed, leaning towards objective speed
|
||||||
|
|
||||||
|
self.selected = False # If beeing redirected
|
||||||
|
|
||||||
|
self.cachedrel = [] # Storing relative movement of mouse
|
||||||
|
self.cachedrelsize = 10
|
||||||
|
self.mincachedsize = 5
|
||||||
|
|
||||||
|
# Used for movement
|
||||||
|
self.restx = 0
|
||||||
|
self.resty = 0
|
||||||
|
|
||||||
|
def step(self):
|
||||||
|
|
||||||
|
# Lean towards the normal speed
|
||||||
|
if self.selected:
|
||||||
|
self.normalspeed = 0
|
||||||
|
else:
|
||||||
|
self.normalspeed = self.basespeed
|
||||||
|
self.speed += (self.normalspeed-self.speed)*self.game.dt*3
|
||||||
|
|
||||||
|
# Getting x and y velocity
|
||||||
|
diffx = math.cos(math.radians(self.direction))*self.speed
|
||||||
|
diffy = math.sin(math.radians(self.direction))*self.speed
|
||||||
|
|
||||||
|
self.move(diffx*self.game.dt,diffy*self.game.dt)
|
||||||
|
|
||||||
|
# Mouse selection
|
||||||
|
mouse=self.game.inputs["mouse"]
|
||||||
|
distance = math.sqrt((mouse["pos"][0]-self.rect.center[0])**2+(mouse["pos"][1]-self.rect.center[1])**2)
|
||||||
|
if self.selected:
|
||||||
|
# Caching mouse relative movement
|
||||||
|
self.cachedrel.append(mouse["rel"])
|
||||||
|
if len(self.cachedrel)>self.cachedrelsize:
|
||||||
|
self.cachedrel.pop(0)
|
||||||
|
# Releasing it
|
||||||
|
if mouse["click"]==0 or distance>4*self.radius:
|
||||||
|
self.launch()
|
||||||
|
if self.game.inputs["mouse"]["click"]==1:
|
||||||
|
if distance<=self.radius:
|
||||||
|
self.selected = True
|
||||||
|
|
||||||
|
def launch(self):
|
||||||
|
# Launch itself in the mouse direction
|
||||||
|
if len(self.cachedrel)>self.mincachedsize:
|
||||||
|
averagerel = [sum([x[i] for x in self.cachedrel])/len(self.cachedrel) for i in range(2)]
|
||||||
|
self.direction = math.degrees(math.atan2(averagerel[1],averagerel[0]))
|
||||||
|
|
||||||
|
self.speed = self.basespeed*2
|
||||||
|
self.cachedrel = []
|
||||||
|
self.selected = False
|
||||||
|
|
||||||
|
def move(self,x,y):
|
||||||
|
# Remember the digits, pygame rects only move with integers
|
||||||
|
velx = x+self.restx
|
||||||
|
vely = y+self.resty
|
||||||
|
self.restx = velx-int(velx)
|
||||||
|
self.resty = vely-int(vely)
|
||||||
|
self.rect[0]+=int(velx)
|
||||||
|
self.rect[1]+=int(vely)
|
@ -3,9 +3,9 @@ import gamedata.objects.menu.menu as menu
|
|||||||
class MainMenu(menu.Menu):
|
class MainMenu(menu.Menu):
|
||||||
def __init__(self,x,y,game,w=100,h=100):
|
def __init__(self,x,y,game,w=100,h=100):
|
||||||
super().__init__(x,y,game,w,h) # initialise l'objet de base avec les bons arguments
|
super().__init__(x,y,game,w,h) # initialise l'objet de base avec les bons arguments
|
||||||
# Les dicos des boutons
|
# Buttons dictionnaries
|
||||||
def fnPlay(self,game):
|
def fnPlay(self,game):
|
||||||
pass
|
game.scene = game.scenes.ingame
|
||||||
btnPlay = {"name":"Play","function":fnPlay}
|
btnPlay = {"name":"Play","function":fnPlay}
|
||||||
def fnOptions(self,game):
|
def fnOptions(self,game):
|
||||||
game.scene = game.scenes.options
|
game.scene = game.scenes.options
|
||||||
|
@ -4,15 +4,20 @@ from gamedata.objects.bg.menubackground import MenuBackground
|
|||||||
from gamedata.objects.menu.optionmenu import OptionMenu
|
from gamedata.objects.menu.optionmenu import OptionMenu
|
||||||
from gamedata.objects.sliders.bgmslider import BGMSlider
|
from gamedata.objects.sliders.bgmslider import BGMSlider
|
||||||
from gamedata.objects.sliders.sfxslider import SFXSlider
|
from gamedata.objects.sliders.sfxslider import SFXSlider
|
||||||
|
from gamedata.objects.ingame.lemmings import Lemming
|
||||||
|
|
||||||
def main(game):
|
def main(game):
|
||||||
game.scaleCamera()
|
game.scaleCamera()
|
||||||
game.gameloop.reinit() # Je réinitialis la boucle
|
game.gameloop.reinit()
|
||||||
bg = MenuBackground(game)
|
bg = MenuBackground(game)
|
||||||
menu = MainMenu(game.DISPLAY_WIDTH/4,round(game.DISPLAY_HEIGHT*3/8),game,game.DISPLAY_WIDTH//2,game.DISPLAY_HEIGHT//2)
|
menu = MainMenu(game.DISPLAY_WIDTH/4,round(game.DISPLAY_HEIGHT*3/8),game,game.DISPLAY_WIDTH//2,game.DISPLAY_HEIGHT//2)
|
||||||
game.gameloop.summon(bg)
|
game.gameloop.summon(bg)
|
||||||
game.gameloop.summon(menu)
|
game.gameloop.summon(menu)
|
||||||
|
|
||||||
|
def ingame(game):
|
||||||
|
game.gameloop.reinit()
|
||||||
|
game.gameloop.summon(Lemming(200,200,game))
|
||||||
|
|
||||||
def options(game):
|
def options(game):
|
||||||
game.gameloop.reinit()
|
game.gameloop.reinit()
|
||||||
game.globals["camerax"] = 0
|
game.globals["camerax"] = 0
|
||||||
|
Loading…
x
Reference in New Issue
Block a user