def loop(self, screen): Image.loop(self, screen) if self.anim.boum: self.anim.explosion.update_animation(state="boum") explosion_pos = Vector2() if self.anim.player.anim.direction: explosion_pos = ( self.anim.player.pos + engine.screen_size * self.anim.player.screen_relative_pos + Vector2(self.anim.player.size.x, 0) ) else: explosion_pos = ( self.anim.player.pos + engine.screen_size * self.anim.player.screen_relative_pos - Vector2(self.anim.player.size.x, 0) ) img_manager.show_image( self.anim.explosion.img, engine.screen, pos=explosion_pos - level_manager.level.screen_pos, new_size=Vector2(36, 36), ) if self.anim.explosion.index == 6: self.anim.boum = False
def __init__(self,pos,size=None, angle=0, relative=False, path="", parallax_factor=1.0, move=False): Image.__init__(self, pos, size=size, angle=angle, relative=relative, path=path, parallax_factor=parallax_factor) self.move = move
def init(self): self.font = sfml.Font.from_file("data/font/SILKWONDER.ttf") self.screen_pos = Vector2() self.time = 0 self.player = Image(Vector2()) self.dialog = False self.last_checkpoint = Vector2() self.cat = Image(Vector2(),path="data/sprites/text/CatPortrait.png",size=Vector2(79,74)) self.cat.init_image(size=Vector2(79,74)) self.cat.pos = engine.screen_size-self.cat.size self.ferret = Image(Vector2(),path="data/sprites/text/FerretPortrait.png",size=Vector2(73,74)) self.ferret.init_image(size=Vector2(73,74)) self.ferret.pos = Vector2(0,engine.screen_size.y)-Vector2(0,self.cat.size.y)
def init(self): self.text = Image(path='data/sprites/text/logo-dorian_sred-2b_gameboy.png', pos=Vector2(0,16), size=Vector2(160, 128)) self.text.init_image() snd_manager.set_playlist(['data/sound/logo_dorian_8bit.ogg']) self.screen_pos = Vector2()
class Kwakwa(Scene): def init(self): self.loading_screen = LoadingScreen() self.loading_screen.init_method = [GameState(CONST.startup)] self.loading_screen.init() self.text = Image('data/sprites/text/kwakwa.png', engine.get_screen_size()/2) self.text.pos = self.text.pos-self.text.size/2 self.count = 4 * CONST.framerate snd_manager.play_music("data/sound/pissed_off_duck.wav") def loop(self, screen): img_manager.draw_rect(screen,Vector2(),Rect(Vector2(0,0),engine.get_screen_size()),(255,255,255)) self.text.loop(screen, Vector2()) if snd_manager.check_music_status(): from engine.level_manager import switch_level switch_level(self.loading_screen)
class Dorian(Scene): def init(self): self.text = Image(path='data/sprites/text/logo-dorian_sred-2b_gameboy.png', pos=Vector2(0,16), size=Vector2(160, 128)) self.text.init_image() snd_manager.set_playlist(['data/sound/logo_dorian_8bit.ogg']) self.screen_pos = Vector2() def loop(self, screen): img_manager.draw_rect(screen, Vector2(), Rect(Vector2(0, 0), engine.get_screen_size()), (255, 255, 255)) self.text.loop(screen) if snd_manager.get_music_status(): from engine.level_manager import switch_level switch_level(TitleScreen()) snd_manager.update_music_status()
def init(self): self.loading_screen = LoadingScreen() self.loading_screen.init_method = [GameState(CONST.startup)] self.loading_screen.init() self.text = Image('data/sprites/text/kwakwa.png', engine.get_screen_size()/2) self.text.pos = self.text.pos-self.text.size/2 self.count = 4 * CONST.framerate snd_manager.play_music("data/sound/pissed_off_duck.wav")
def init(self): snd_manager.set_playlist(['data/music/menu_gbjam.ogg']) self.img = img_manager.load_image("data/sprites/text/Title.png") self.font = sfml.Font.from_file("data/font/SILKWONDER.ttf") self.text = sfml.Text("PRESS START", self.font, 10) self.text.position = (58,63) self.text.color = sfml.Color.BLACK self.screen_pos = Vector2() self.time = 0 self.dialog = False self.cat = Image(Vector2(),path="data/sprites/text/CatPortrait.png",size=Vector2(79,74)) self.cat.init_image(size=Vector2(79,74)) self.cat.pos = engine.screen_size-self.cat.size self.ferret = Image(Vector2(),path="data/sprites/text/FerretPortrait.png",size=Vector2(73,74)) self.ferret.init_image(size=Vector2(73,74)) self.ferret.pos = Vector2(0,engine.screen_size.y)-Vector2(0,self.cat.size.y)
def __init__(self,pos,size,button_img='',button_text='',font='',show=False,margin=10): GameObject.__init__(self) self.pos = pos self.size = size self.update_rect(self) self.button_image = None self.show = show if button_img != '': self.button_image = Image(button_img, pos, size=size) self.text = Text(pos, size[1]-margin, font, text=button_text)
class TitleScreen(Scene): def init(self): snd_manager.set_playlist(['data/music/menu_gbjam.ogg']) self.img = img_manager.load_image("data/sprites/text/Title.png") self.font = sfml.Font.from_file("data/font/SILKWONDER.ttf") self.text = sfml.Text("PRESS START", self.font, 10) self.text.position = (58,63) self.text.color = sfml.Color.BLACK self.screen_pos = Vector2() self.time = 0 self.dialog = False self.cat = Image(Vector2(),path="data/sprites/text/CatPortrait.png",size=Vector2(79,74)) self.cat.init_image(size=Vector2(79,74)) self.cat.pos = engine.screen_size-self.cat.size self.ferret = Image(Vector2(),path="data/sprites/text/FerretPortrait.png",size=Vector2(73,74)) self.ferret.init_image(size=Vector2(73,74)) self.ferret.pos = Vector2(0,engine.screen_size.y)-Vector2(0,self.cat.size.y) def loop(self, screen): img_manager.draw_rect(screen, Vector2(), Rect(Vector2(0, 0), engine.get_screen_size()), (255, 255, 255)) self.cat.loop(screen) self.ferret.loop(screen) if not self.dialog: img_manager.show_image(self.img,screen,Vector2(0,-48)) if (self.time % 20) > 10: img_manager.buffer.draw(self.text) self.time += 1 if not self.dialog and (input_manager.get_button("A") or input_manager.get_button("B")): snd_manager.set_playlist(["data/music/intro_BOSS1_gbjam.ogg","data/music/BOSS1_gbjam.ogg"]) self.dialog = 1 engine.show_dialog = True engine.textbox.set_text("Fury", "General Meow, you are still alive") if self.dialog == 1 and engine.textbox.finished: if input_manager.get_button('A') or input_manager.get_button('B'): self.dialog = 2 engine.textbox.set_text("General Meow", "I'm not easy to kill. Don't forget it") if self.dialog == 2 and engine.textbox.finished: if input_manager.get_button('A') or input_manager.get_button('B'): self.dialog = 3 engine.textbox.set_text("Fury","I won't miss you next time") if self.dialog == 3 and engine.textbox.finished: if input_manager.get_button('A') or input_manager.get_button('B'): engine.show_dialog = False from engine.level_manager import switch_level switch_level(GameState(CONST.startup)) snd_manager.update_music_status()
def init(self): #self.loading_screen = LoadingScreen() #self.loading_screen.init_method = [GameState(CONST.startup)] #self.loading_screen.init() self.text = Image(path='data/sprites/text/kwakwa_logo.png', pos=Vector2(), size=Vector2(160,144)) self.text.init_image() self.count = 4 * CONST.framerate snd_manager.play_music("data/sound/logo_kwa_8bit.ogg") self.screen_pos = Vector2() self.game_over = False
class Kwakwa(Scene): def init(self): #self.loading_screen = LoadingScreen() #self.loading_screen.init_method = [GameState(CONST.startup)] #self.loading_screen.init() self.text = Image(path='data/sprites/text/kwakwa_logo.png', pos=Vector2(), size=Vector2(160,144)) self.text.init_image() self.count = 4 * CONST.framerate snd_manager.play_music("data/sound/logo_kwa_8bit.ogg") self.screen_pos = Vector2() self.game_over = False def loop(self, screen): img_manager.draw_rect(screen,Vector2(),Rect(Vector2(0,0),engine.get_screen_size()),(255,255,255)) self.text.loop(screen) if snd_manager.get_music_status(): from engine.level_manager import switch_level switch_level(Dorian()) snd_manager.update_music_status()
class ButtonGUI(GameObject): def __init__(self,pos,size,button_img='',button_text='',font='',show=False,margin=10): GameObject.__init__(self) self.pos = pos self.size = size self.update_rect(self) self.button_image = None self.show = show if button_img != '': self.button_image = Image(button_img, pos, size=size) self.text = Text(pos, size[1]-margin, font, text=button_text) def set_text(self,text): self.text.change_text(text) def loop(self,screen,screen_pos): if self.show: if self.button_image: self.button_image.loop(screen,screen_pos) if self.button_text: self.button_text.loop(screen,screen_pos) def execute_event(self): GameObject.execute_event(self)
def init_dialog_text(self): self.dialog_text = Text(pos=engine.get_screen_size()*Vector2(self.dialog_margin,1-self.dialog_y_size+self.dialog_margin), size=engine.get_screen_size()*Vector2(1-2*self.dialog_margin,self.dialog_y_size/2-1.5*self.dialog_margin).y, font=self.dialog_font, text="", relative=True) self.dialog_text2 = Text(pos=engine.get_screen_size()*Vector2(self.dialog_margin,1-self.dialog_y_size/2+self.dialog_margin), size=engine.get_screen_size()*Vector2(1-2*self.dialog_margin,self.dialog_y_size/2-1.5*self.dialog_margin).y, font=self.dialog_font, text="", relative=True) self.dialog_box = Image(path=self.dialog_box_image, pos=(engine.get_screen_size()*Vector2(0,1-self.dialog_y_size)).get_tuple(), size=(engine.get_screen_size()*Vector2(1.0, self.dialog_y_size)).get_tuple(), relative=True)
class Dialog(Scene): def init(self): self.font = sfml.Font.from_file("data/font/SILKWONDER.ttf") self.screen_pos = Vector2() self.time = 0 self.player = Image(Vector2()) self.dialog = False self.last_checkpoint = Vector2() self.cat = Image(Vector2(),path="data/sprites/text/CatPortrait.png",size=Vector2(79,74)) self.cat.init_image(size=Vector2(79,74)) self.cat.pos = engine.screen_size-self.cat.size self.ferret = Image(Vector2(),path="data/sprites/text/FerretPortrait.png",size=Vector2(73,74)) self.ferret.init_image(size=Vector2(73,74)) self.ferret.pos = Vector2(0,engine.screen_size.y)-Vector2(0,self.cat.size.y) def loop(self, screen): img_manager.draw_rect(screen, Vector2(), Rect(Vector2(0, 0), engine.get_screen_size()), (255, 255, 255)) self.cat.loop(screen) self.ferret.loop(screen) if not self.dialog: snd_manager.set_playlist(["data/music/intro_BOSS1_gbjam.ogg","data/music/BOSS1_gbjam.ogg"]) self.dialog = 1 engine.show_dialog = True engine.textbox.set_text("Fury", "I'm coming for you, General Meow") if self.dialog == 1 and engine.textbox.finished: if input_manager.get_button('A') or input_manager.get_button('B'): self.dialog = 3 engine.textbox.set_text("General Meow", "I have a surprise for you, Fury") if self.dialog == 3 and engine.textbox.finished: if input_manager.get_button('A') or input_manager.get_button('B'): engine.show_dialog = False from levels.gamestate import GameState boss_level = GameState("data/json/boss_level.json") boss_level.last_checkpoint = self.last_checkpoint level_manager.switch_level(boss_level) snd_manager.update_music_status()
def load_image_from_json(image_data, level, image_type=None): global global_object_id image = None if image_type is None: try: image_type = image_data["type"] except KeyError: log("Error: No image_type for:" + str(image_data),1) return pos = get_element(image_data, "pos") size = get_element(image_data, "size") layer = get_element(image_data, "layer") angle = get_element(image_data, "angle") object_id = get_element(image_data, "id") if object_id is None: object_id = global_object_id if angle is None: angle = 0 if image_type == "GameObject": image = GameObject() image.pos = Vector2(pos) image.size = Vector2(size) image.update_rect() image.angle = angle image.id = object_id elif image_type == "Image": image = Image.parse_image(image_data, pos, size, angle) if image is not None: image.id = object_id elif image_type == "Text": font = get_element(image_data, "font") text = get_element(image_data, "text") color = get_element(image_data, "color") if font and text: font = CONST.path_prefix+font else: log("Invalid arg font and text not defined for Text",1) return if not color: color = [0,0,0] image = Text(pos, size, font, text, angle,color) image.id = object_id else: if not isinstance(image_type,CONST.string_type): log("image_type not a string",1) return for c in image_type: if c != '.' and c != '_' and not c.isalpha(): return dir_list = image_type.split(".") try: exec('''from %s import %s'''%(".".join(dir_list[0:len(dir_list)-1]), dir_list[len(dir_list)-1])) except ImportError: log("Error: ImportError with: "+str(image_type),1) return try: d = locals() exec('''image = %s.parse_image(image_data, pos, size, angle)'''%(dir_list[len(dir_list)-1]),globals(),d) image = d['image'] except Exception as e: import traceback log('Error with loading image_type: %s'%(image_type)+" "+str(e),1) traceback.print_exc() return physic_objects = get_element(image_data, "physic_objects") if physic_objects: load_physic_objects(physic_objects, image) event_path = get_element(image_data, "event") if image and event_path: image.event = load_event(event_path) if not layer or layer < 0: layer = 1 elif layer > len(level.objects)-1: layer = len(level.objects)-1 if image: level.objects[layer-1].append(image) global_object_id += 1 return image
class GUI(): def __init__(self): self.dialog = False self.answers_text = [] self.answers_image = [] self.dialog_event = None self.dialog_box_image = 'data/sprites/gui/dialog_box.png' self.show_mouse = True self.dialog_font = "data/font/pixel_arial.ttf" self.dialog_y_size = 1.0 / 3.0 self.answer_size = Vector2(1.0 / 4.0, 1.0 / 6.0) self.dialog_margin = 0.05 self.answer_margin = 0.0 self.gui_click = False self.init_dialog_text() def init_dialog_text(self): self.dialog_text = Text(pos=engine.get_screen_size()*Vector2(self.dialog_margin,1-self.dialog_y_size+self.dialog_margin), size=engine.get_screen_size()*Vector2(1-2*self.dialog_margin,self.dialog_y_size/2-1.5*self.dialog_margin).y, font=self.dialog_font, text="", relative=True) self.dialog_text2 = Text(pos=engine.get_screen_size()*Vector2(self.dialog_margin,1-self.dialog_y_size/2+self.dialog_margin), size=engine.get_screen_size()*Vector2(1-2*self.dialog_margin,self.dialog_y_size/2-1.5*self.dialog_margin).y, font=self.dialog_font, text="", relative=True) self.dialog_box = Image(path=self.dialog_box_image, pos=(engine.get_screen_size()*Vector2(0,1-self.dialog_y_size)).get_tuple(), size=(engine.get_screen_size()*Vector2(1.0, self.dialog_y_size)).get_tuple(), relative=True) def set_dialog(self, text, text2=''): pass def set_answers(self, answers): del self.answers_text[:] del self.answers_image[:] i = 0 answer_nmb = len(answers) for answer in answers: pos = (engine.get_screen_size()*Vector2((1 - self.answer_size.x), ((1 - self.dialog_y_size) - (answer_nmb - i) * self.answer_size.y))) size = (engine.get_screen_size()*Vector2(self.answer_size.x, self.answer_size.y)) self.answers_text.append(Text(pos=pos, size=size.y, font=self.dialog_font, text=answer, relative=True)) if self.dialog_box_image: self.answers_image.append(Image(self.dialog_box_image, pos, size=size, relative=True)) i += 1 def loop(self, screen): """Loop of the GUI part of the Gamestate""" '''Event If mouse_click on element, execute its event, of not null''' if self.show_mouse: show_mouse() mouse_pos, pressed = get_mouse() if pressed[0] and not self.gui_click: event = None self.gui_click = True if not self.dialog: for layer in self.objects: for image in layer: if image.check_click(mouse_pos, self.screen_pos): event = image.event else: if self.dialog_text2.time >= self.dialog_text2.gradient: if len(self.answers_image) == 0: self.dialog = False self.dialog_event.answer() for i, answer_image in enumerate(self.answers_image): if answer_image.check_click(mouse_pos, self.screen_pos): self.dialog = False self.dialog_event.answer(self.answers_text[i].text) break else: self.dialog_text.end_gradient() self.dialog_text2.end_gradient() if event: event.execute() elif not pressed[0]: self.gui_click = False '''Dialog''' if self.dialog and self.dialog_text and not self.editor: show_mouse() if self.dialog_text.time >= self.dialog_text.gradient: for button in self.answers_image: '''show answers''' button.loop(screen, self.screen_pos) for answer in self.answers_text: answer.loop(screen, self.screen_pos) self.dialog_box.loop(screen, self.screen_pos) self.dialog_text.loop(screen, self.screen_pos) if self.dialog_text.time >= self.dialog_text.gradient: self.dialog_text2.loop(screen, self.screen_pos) @staticmethod def load_gui_json(json_dict, level): pass