Пример #1
0
 def f(*args):
     model = kwargs.get('model')
     collision_tag = kwargs.get('tag')
     speed = kwargs.get('speed')
     pos = makePos(*args)
     a = entity.Sprite(model=model, pos=pos)
     a.add_component(
         comp.SmartCollider(flag=vars.flags.foe,
                            mask=vars.flags.player,
                            tag=collision_tag))
     a.add_component(
         comp.Controller2D(mask_up=vars.flags.platform,
                           mask_down=vars.flags.platform
                           | vars.flags.platform_passthrough,
                           size=(14, 16),
                           shift=(0, 8),
                           max_climb_angle=80,
                           max_descend_angle=80,
                           debug=True))
     a.add_component(comp.Dynamics2D(gravity=vars.gravity))
     sm = comp.StateMachine(initial_state='idle')
     sm.states.append(states.SimpleState(uid='idle', anim='walk'))
     sm.states.append(
         platformer.states.FoeWalk(uid='walk',
                                   anim='walk',
                                   speed=speed,
                                   acceleration=0,
                                   flip_horizontal=False,
                                   flip_when_platform_ends=False,
                                   left=1))
     a.add_component(sm)
     return a
Пример #2
0
 def f(*args):
     key = args[0]
     desc = args[1]
     cio = desc.get('create_if_owned', False)
     if (not cio) and vars.someone_owns(key):
         # item is in inventory. don't create it
         return None
     pos = desc.get('pos')
     model = desc.get('model', None)
     #text = monkey.engine.read(desc.get('text'))
     s = None
     if model:
         anim = monkey.engine.read(desc.get('anim', None))
         s = entity.Sprite(model=model, pos=pos, anim= anim)
     else:
         s = entity.Entity(pos = pos)
     #s.tag = desc.get('tag', None)
     s.tag= key
     # if a size is provided, add a hotspot
     size = desc.get('size', None)
     if size:
         prio = desc.get('priority', 0)
         s.add_component(compo.HotSpot(shape=shapes.Rect(width=size[0], height=size[1]), priority=prio,
                                       onenter=func.hover_on(key),
                                       onleave=func.hover_off(key),
                                       onclick=func.prova()))
     return s
Пример #3
0
 def f(*args):
     # the first argument is the callback function
     # the second, if present, is the model
     model = kwargs.get('model', None)
     callback = kwargs.get('func')
     info = kwargs.get('info', None)
     pos = makePos2(*args)
     if model is None:
         a = entity.Entity(pos=pos)
         size = [args[2] * vars.tile_size, args[3] * vars.tile_size, 0]
         a.add_component(
             comp.Collider(debug=True,
                           flag=vars.flags.foe,
                           mask=vars.flags.player,
                           tag=vars.tags.key,
                           shape=sh3d.AABB(size=size)))
         a.add_component(
             comp.Info(func=callback,
                       info=info,
                       args=args,
                       bounds=[0, 0, size[0], size[1]]))
     else:
         a = entity.Sprite(model=model, pos=pos)
         a.add_component(
             comp.SmartCollider(debug=True,
                                flag=vars.flags.foe,
                                mask=vars.flags.player,
                                tag=vars.tags.key))
         a.add_component(comp.Info(func=callback, info=info, args=args))
     return a
Пример #4
0
 def f(*args):
     key = args[0]
     is_player = key == vars.current_player
     desc = args[1]
     model = desc.get('model', None)
     text_color = desc.get('text_color', [255, 255, 255, 255])
     text_offset = desc.get('text_offset', [0, 60])
     pos = desc.get('pos')
     tag = desc.get('tag', key)
     s = None
     dir = desc.get('dir', 's')
     ways = desc.get('ways', 4)
     if model:
         s = entity.Sprite(model=model,
                           pos=pos,
                           tag='player' if is_player else tag)
         #s.add_component(compo.Collider(debug=True, flag=vars.Collision.Flags.player, mask=vars.Collision.Flags.other,
         #                           tag=vars.Collision.Tags.player, shape=shapes.Rect(width=8, height=2, offset=[-4, 0])))
         if is_player:
             s.add_component(compo.Follow())
     else:
         s = entity.Entity(pos=pos, tag='player' if is_player else tag)
     s.add_component(
         scumm.components.CharacterController(dir=dir,
                                              speed=100,
                                              text_color=text_color,
                                              text_offset=text_offset,
                                              ways=ways))
     on_create_script = desc.get('script', None)
     if on_create_script:
         s.on_create = getattr(scripts, on_create_script)
     return s
Пример #5
0
 def f(*args):
     pos = makePos2(*args)
     foe_id = kwargs.get('id')
     foe_info = vars.foes[foe_id]
     model = foe_info['model']
     p = entity.Sprite(model=model, pos=pos)
     p.add_component(
         comp.SmartCollider(flag=vars.flags.foe,
                            mask=vars.flags.player,
                            tag=foe_info['tag']))
     p.add_component(
         comp.Controller2D(mask_up=vars.flags.platform,
                           mask_down=vars.flags.platform
                           | vars.flags.platform_passthrough,
                           max_climb_angle=80,
                           max_descend_angle=80,
                           size=foe_info['size'],
                           debug=True))
     p.add_component(comp.Dynamics2D(gravity=vars.gravity))
     sm = comp.StateMachine(initial_state='walk')
     sm.states.append(states.SimpleState(uid='dead', anim='dead'))
     sm.states.append(
         platformer.states.FoeWalk(
             uid='walk',
             anim='walk',
             speed=foe_info['speed'],
             acceleration=0,
             flip_horizontal=foe_info['flip_h'],
             flip_when_platform_ends=foe_info['flip_when_platform_ends'],
             left=1))
     p.add_component(sm)
     return p
Пример #6
0
def m3(x: float, y: float):
    a = entity.Sprite(model='sprites/01/score100',
                      pos=(x * vars.tile_size, (y + 1) * vars.tile_size, 0))
    main = example.get('main')
    id = main.add(a)
    s = script.Script()
    s.add_action(act.Move(speed=100, by=[0, 64], entity_id=id))
    s.add_action(act.RemoveEntity(id))
    example.play(s)
Пример #7
0
    def f(*args):
        pos = (args[0] * vars.tile_size, args[1] * vars.tile_size, args[2])
        current_state = vars.states[vars.state]
        model = current_state['model']
        speed = current_state['speed']
        p = entity.Sprite(model=model, pos=pos, tag='player')
        p.add_component(
            comp.SmartCollider(flag=vars.flags.player,
                               mask=vars.flags.foe | vars.flags.foe_attack,
                               tag=vars.tags.player))
        p.add_component(
            comp.Controller2D(mask_up=vars.flags.platform,
                              mask_down=vars.flags.platform
                              | vars.flags.platform_passthrough,
                              max_climb_angle=80,
                              max_descend_angle=80,
                              size=current_state['size'],
                              debug=True))
        p.add_component(comp.Dynamics2D(gravity=vars.gravity))
        sm = comp.StateMachine(initial_state='walk')
        sm.states.append(states.SimpleState(uid='dead', anim='dead'))
        sm.states.append(
            platformer.states.WalkSide(uid='walk',
                                       speed=speed,
                                       acceleration=0.05,
                                       jump_speed=vars.jump_velocity,
                                       flip_horizontal=True))
        # keys=[
        #     [90,  states.StateCallback(func.fire)],
        #     [264, states.StateCallback(func.enter_pipe)],
        # ]))
        sm.states.append(
            platformer.states.Jump(uid='jump',
                                   speed=speed,
                                   acceleration=0.10,
                                   flip_horizontal=True,
                                   anim_up='jump_up',
                                   anim_down='jump_down'))
        #keys=[
        #    [90, states.StateCallback(func.firej)],
        #]))
        sm.states.append(
            platformer.states.FoeWalk(uid='demo',
                                      anim='walk',
                                      speed=speed,
                                      acceleration=0.05,
                                      flip_horizontal=True,
                                      flip_when_platform_ends=False,
                                      left=1,
                                      flip_on_wall=False))
        sm.states.append(states.SimpleState(uid='pipe', anim='pipe'))
        #sm.states.append(states.SimpleState(uid='slide', anim='slide'))

        p.add_component(sm)
        p.add_component(comp.KeyInput())
        p.add_component(comp.Follow())
        return p
Пример #8
0
def make_piece(pos, vx, vy, model, parent: example.Wrap1):
    a = entity.Sprite(model=model, pos=pos)
    id = parent.add(a)
    s = Script()
    s.add_action(
        act.MoveAccelerated(entity_id=id,
                            v0=[vx, vy],
                            a=[0, 0.5 * vars.gravity],
                            yStop=0))
    s.add_action(act.RemoveEntity(entity_id=id))
    example.play(s)
Пример #9
0
def m2(x: float, y: float):
    def score():
        m3(x, y + 1)

    a = entity.Sprite(model='sprites/01/flyingcoin',
                      pos=(x * vars.tile_size, (y + 1) * vars.tile_size, 0))
    main = example.get('main')
    id = main.add(a)
    s = script.Script()
    s.add_action(
        act.MoveAccelerated(v0=[0, 100],
                            a=[0, -100],
                            yStop=(y * vars.tile_size) + 16,
                            entity_id=id))
    s.add_action(act.RemoveEntity(id))
    s.add_action(act.CallFunc(score))
    example.play(s)
Пример #10
0
def load_sprite_from_file(filename):
	global SPRITE
	zipFile = res_zip.ressourceFile(filename)
	
	for f in zipFile.file_list: # Pour tout les fichier du zip
		if f.endswith(".json"): # Si fini par json
			img = f[:-4] + "png"
			if img in zipFile.file_list: # Et qu'il y a une ressource associé
				try:
					logging.info("Chargement de "+str(f))
					surface = zipFile.get_texture(img)
					new_entity = entity.Sprite(surface)
					data = zipFile.get_file(f).read()
					new_entity.data = json.loads(data.decode())
					if new_entity.data["ID"] in SPRITE:
						logging.error("Recouvrement de l'id %s par %s"%(new_entity.data["ID"], f))
					SPRITE[new_entity.data["ID"]] = new_entity
				except Exception:
					logging.error("Erreur de chargement de "+str(f))
					continue
Пример #11
0
 def f(*args):
     key = args[0]
     is_player = key == vars.current_player
     desc = args[1]
     model = desc.get('model', None)
     text_color = monkey.engine.read(desc.get('text_color', [255, 255, 255, 255]))
     #text_color =
     text_offset = desc.get('text_offset', [0, 60])
     pos = desc.get('pos')
     tag = desc.get('tag', key)
     s = None
     dir = desc.get('dir', 's')
     if model:
         s = entity.Sprite(model=model, pos=pos, tag='player' if is_player else tag)
         s.add_component(compo.Collider(debug=True, flag=vars.Collision.Flags.player, mask=vars.Collision.Flags.other,
                                    tag=vars.Collision.Tags.player, shape=shapes.Rect(width=8, height=2, offset=[-4, 0])))
         if is_player:
             s.add_component(compo.Follow())
     else:
         s = entity.Entity(pos=pos, tag='player' if is_player else tag)
     s.add_component(scumm.components.CharacterController(dir=dir, speed=vars.speed, text_color=text_color, text_offset=text_offset))
     return s
Пример #12
0
def _brick(x, y, model, hits, callback):
    pos = makePos2(x, y)
    a = entity.Sprite(model=model, pos=pos)
    a.add_component(
        comp.Collider(flag=vars.flags.platform,
                      mask=0,
                      tag=0,
                      shape=sh.Rect(width=vars.tile_size,
                                    height=vars.tile_size)))
    a.add_component(comp.Info(hitsLeft=hits, callback=callback))
    b = entity.Entity()
    b.pos = (2, -0.5, 0)
    b.add_component(
        comp.Collider(flag=vars.flags.foe,
                      mask=vars.flags.player,
                      tag=vars.tags.bonus_brick_sensor,
                      debug=True,
                      shape=sh3d.AABB(size=(vars.tile_size - 4, 1, 0))
                      #shape=sh.Rect(width=vars.tile_size - 4, height=1.0)
                      ))
    a.add(b)
    return a
Пример #13
0
 def f(*args):
     model = kwargs.get('model')
     piece = kwargs.get('piece')
     pos = makePos2(*args)
     a = entity.Sprite(model=model, pos=pos)
     a.add_component(
         comp.Collider(flag=vars.flags.platform,
                       mask=0,
                       tag=0,
                       shape=sh.Rect(width=vars.tile_size,
                                     height=vars.tile_size)))
     a.add_component(comp.Info(piece=piece))
     b = entity.Entity()
     b.pos = (2, -0.5, 0)
     b.add_component(
         comp.Collider(flag=vars.flags.foe,
                       mask=vars.flags.player,
                       tag=vars.tags.brick_sensor,
                       shape=sh3d.AABB(size=(vars.tile_size - 4, 1, 1))
                       #shape=sh.Rect(width=vars.tile_size-4, height=1.0)
                       ))
     a.add(b)
     return a
Пример #14
0
def _fire(a: example.Wrap1, state: str):
    if vars.state >= 2:
        a.setState(state, {})
        b = entity.Sprite(model='fire',
                          pos=(a.x + (-2 if a.flipx else 2), a.y + 16, 0))
        b.flipx = a.flipx
        b.add_component(
            comp.Controller2D(mask_up=vars.flags.platform,
                              mask_down=vars.flags.platform
                              | vars.flags.platform_passthrough,
                              max_climb_angle=80,
                              max_descend_angle=80))
        b.add_component(comp.GarbageCollect(10))
        b.add_component(comp.Dynamics2D(gravity=vars.gravity))
        b.add_component(
            comp.SmartCollider(flag=vars.flags.player_attack,
                               mask=vars.flags.foe | vars.flags.platform,
                               tag=vars.tags.player_fire))
        sm = comp.StateMachine(initial_state='jmp')
        sm.states.append(
            platformer.states.Bounce(uid='jmp', speed=300, a=0, b=200))
        b.add_component(sm)
        example.get('main').add(b)
Пример #15
0
 def f(*args):
     pos = makePos2(*args)
     model = kwargs.get('model')
     pct = kwargs.get('pct', 0)
     s = entity.Sprite(model=model, pos=pos)
     s.add_component(
         comp.SmartCollider(flag=vars.flags.foe,
                            mask=vars.flags.player,
                            tag=vars.tags.plant,
                            debug=True))
     s.add_component(
         comp.PolygonalMover(origin=pos,
                             pct=pct,
                             loop=True,
                             moves=[{
                                 'delta': (0, -64),
                                 'speed': 100,
                                 'hold': 1
                             }, {
                                 'delta': (0, 64),
                                 'speed': 100,
                                 'hold': 1
                             }]))
     return s
Пример #16
0
    def f(*args):
        pos = (args[0], args[1], args[2])
        scale = kwargs.get('scale', vars.player_scale)
        #char_info = vars.  xcharactersgft```<
        speed = vars.player_speed
        model = vars.player_model
        width = 10
        p = entity.Sprite(model=model, pos=pos, tag='player')
        # TODO shadow
        #shadow = entity.Entity()
        #shadow.add_component(comp.ShadowRenderer(angle=20.0))
        #p.add(shadow)
        #p.layer = 2
        #p.depth = 0x0207
        #p.scale = scale * vars.scale
        p.scale = scale
        p.add_component(
            comp.Controller3D(size=[1, 1, 1],
                              shift=[0, 0.5],
                              debug=True,
                              mask_up=vars.flags.platform,
                              mask_down=vars.flags.platform
                              | vars.flags.platform_passthrough,
                              max_climb_angle=80,
                              max_descend_angle=80))
        p.add_component(comp.Dynamics2D(gravity=vars.gravity))
        p.add_component(
            comp.SmartCollider(flag=vars.flags.player,
                               mask=vars.flags.foe_attack,
                               tag=vars.tags.player,
                               cast_tag=vars.tags.player_attack,
                               cast_mask=vars.flags.foe,
                               debug=True))
        sm = comp.StateMachine(initial_state='walk')
        sm.states.append(
            pstates.WalkSide3D(
                uid='walk',
                speed=speed,
                acceleration=0.05,
                jump_speed=vars.jump_velocity,
                animator=pstates.YAnimator(idle_up='idle_up',
                                           idle_down='idle',
                                           walk_up='walk_up',
                                           walk_down='walk'),
                keys=[
                    [90, states.StateCallback(func.punch)
                     ],  #StateTransition('attack1')],
                    [265, states.StateCallback(func.climb_bottom)],
                    [264, states.StateCallback(func.climb_top)]
                ],
                flip_horizontal=True))
        sm.states.append(
            pstates.Jump3D(uid='jump',
                           speed=speed,
                           acceleration=0.10,
                           flip_horizontal=True,
                           keys=[],
                           anim_up='jump_up',
                           anim_down='jump_down'))
        # attack states
        sm.states.append(states.Attack(uid='attack0', anim='punch1'))
        sm.states.append(states.Attack(uid='attack1', anim='punch2'))
        sm.states.append(states.Attack(uid='attack2', anim='punch3'))
        sm.states.append(
            pstates.IsHit(uid='hit', anim='hit', acceleration=10, dist=4))

        #sm.states.append(states.Attack(uid='attack2', anim='attack2'))
        sm.states.append(
            pstates.Climb(uid='climb',
                          speed=50,
                          idle_anim='climb',
                          climb_anim='climb'))
        p.add_component(sm)
        p.add_component(comp.KeyInput())
        p.add_component(
            comp.DynamicFollow(
                world_width=5216,
                cam_width=384,
                cam_height=224,
                origin=(0, 256),
                path=[
                    3, 256, 2, 256, 3, 16, 2, 64, 3, 16, 2, 624, 0, 16, 2, 336,
                    3, 48, 2, 256, 3, 64, 2, 48, 3, 64, 2, 96, 3, 32, 2, 608,
                    0, 128, 2, 16, 0, 96, 2, 64, 0, 112, 2, 192, 0, 16, 2,
                    1536, 3, 16, 2, 320, 0, 32, 2, 16, 0, 16, 2, 16, 0, 48, 2,
                    144, 3, 160, 2, 192, 3, 32, 2, 432, 0, 336, 1, 80, 0, 48,
                    1, 112, 0, 112, 1, 672, 3, 32, 1, 256, 3, 96, 1, 2048, 3,
                    192, 1, 64, 0, 64, 1, 1984
                ]))
        #p.add_component(comp.Follow(relpos=(0, 0, 5), z=1))
        return p
Пример #17
0
def run(Display, network, map_name):

    Map_Data = maps.load_map(map_name)

    Pos_Ecran_Actuelle = [0, 0]

    Size = (Map_Data["size"][0] * 32, Map_Data["size"][1] * 32)

    Maps_Surface = pygame.Surface(Size)

    ScreenSize = Display.get_rect()
    Menu_Width = 0

    pos_curs = (50, 50)

    Default_Sprite = entity.Sprite(pygame.Surface((32, 32)))

    Scheduler = pygame.time.Clock()

    logging.info("Tentative de connection...")

    while True:
        if network.loginok:
            break
        time.sleep(0.1)

    logging.info("Connection ok...")

    network.join_room("serdtfyugiohjpk")

    while True:
        if network.room_joined:
            break
        time.sleep(0.1)

    network.create_entity(1, network.player_uuid, UUID.uuid4(),
                          (random.randint(0, 10), random.randint(0, 10)))
    network.create_entity(1, network.player_uuid, UUID.uuid4(),
                          (random.randint(0, 10), random.randint(0, 10)))

    logging.info("Lancement de la bouble principale...")

    Sprite_cliqué = False
    GameRun = True
    while GameRun:

        for event in pygame.event.get():  #Attente des événements
            if event.type == MOUSEMOTION:
                pos_curs = event.pos
            if event.type == MOUSEBUTTONDOWN:
                if event.button == 1:
                    clic_x = event.pos[0]
                    clic_y = event.pos[1]
                    bloc_x = (Pos_Ecran_Actuelle[0] + clic_x) // 32
                    bloc_y = (Pos_Ecran_Actuelle[1] + clic_y) // 32
                    Sprite_cliqué = False
                    for Player in network.Player_list.values():
                        for sprite in Player.Entity:
                            sprite_x = sprite.rect.x // 32
                            sprite_y = sprite.rect.y // 32
                            if sprite_x == bloc_x and sprite_y == bloc_y:
                                Sprite_cliqué = sprite
                                logging.debug("Entitée cliqué: %s %s %s" %
                                              (bloc_x, bloc_y, Sprite_cliqué))
                                break
                if event.button == 3:
                    clic_x = event.pos[0]
                    clic_y = event.pos[1]
                    bloc_x = (Pos_Ecran_Actuelle[0] + clic_x) // 32
                    bloc_y = (Pos_Ecran_Actuelle[1] + clic_y) // 32
                    if Sprite_cliqué:
                        network.move_entity(Sprite_cliqué, (bloc_x, bloc_y))
                        logging.debug("Entitée déplacé: %s %s %s" %
                                      (bloc_x, bloc_y, Sprite_cliqué))

            if event.type == QUIT:
                logging.info("Demande de fermeture...")
                GameRun = False
            if event.type == KEYDOWN:
                if event.key == K_LEFT:
                    divers.move_screen(Pos_Ecran_Actuelle, Size, ScreenSize,
                                       Menu_Width * 32, (-15, 0))
                if event.key == K_RIGHT:
                    divers.move_screen(Pos_Ecran_Actuelle, Size, ScreenSize,
                                       Menu_Width * 32, (15, 0))
                if event.key == K_UP:
                    divers.move_screen(Pos_Ecran_Actuelle, Size, ScreenSize,
                                       Menu_Width * 32, (0, -15))
                if event.key == K_DOWN:
                    divers.move_screen(Pos_Ecran_Actuelle, Size, ScreenSize,
                                       Menu_Width * 32, (0, 15))
                if event.key == K_s:
                    maps.save_map(map_name, Map_Data)

        if pos_curs[0] < 10:
            divers.move_screen(Pos_Ecran_Actuelle, Size, ScreenSize,
                               Menu_Width * 32, (-5, 0))
        if pos_curs[0] > config.CFG["screen.size"][0] - 10:
            divers.move_screen(Pos_Ecran_Actuelle, Size, ScreenSize,
                               Menu_Width * 32, (5, 0))
        if pos_curs[1] < 10:
            divers.move_screen(Pos_Ecran_Actuelle, Size, ScreenSize,
                               Menu_Width * 32, (0, -5))
        if pos_curs[1] > config.CFG["screen.size"][1] - 10:
            divers.move_screen(Pos_Ecran_Actuelle, Size, ScreenSize,
                               Menu_Width * 32, (0, 5))

        y = 0
        for y in range(0, Map_Data["size"][1]):
            for x in range(0, Map_Data["size"][0]):
                try:
                    sprite = ressource.SPRITE[Map_Data["data"][y][x]]
                except Exception:
                    sprite = Default_Sprite

                Maps_Surface.blit(sprite.image, (x * 32, y * 32))

        for Player in network.Player_list.values():
            Player.Entity.draw(Maps_Surface)

        Pos_inversé = (-Pos_Ecran_Actuelle[0], -Pos_Ecran_Actuelle[1])
        Display.blit(Maps_Surface, Pos_inversé)

        Scheduler.tick_busy_loop(int(config.CFG["screen.fps"]))

        pygame.display.flip()
        Maps_Surface.fill(0)
        Display.fill(0)
Пример #18
0
def run(Display, map_name, size):
	import logging
	
	
	Map_Data = maps.load_map(map_name)
	
	if Map_Data == False:
		Map_Data = maps.new_maps(size)

	Pos_Ecran_Actuelle = [0, 0]

	Size = (Map_Data["size"][0]*32, Map_Data["size"][1]*32)
	
	Default_Sprite = entity.Sprite(pygame.Surface((32, 32)))
	
	ScreenSize = Display.get_rect()

	Maps_Surface = pygame.Surface(Size)
	
	Menu_Width = int(config.CFG["mapeditor.menu_width"])
	Menu_Surface = pygame.Surface((Menu_Width*32, ScreenSize.height))
	Pos_Menu_Surface = Menu_Surface.get_rect()
	Pos_Menu_Surface.x = ScreenSize.width - Menu_Width*32

	pos_curs = (50, 50)

	Scheduler = pygame.time.Clock()

	SpriteGroup = entity.EntityGroup()

	ListeSprite = []
	Position = 0
	for Sp_i in sorted(ressource.SPRITE):
		if Sp_i < 1000:
			continue
		Sp = ressource.SPRITE[Sp_i]
		Pos_x = (Position%Menu_Width) * 32
		Pos_y = (Position//Menu_Width) * 32
		Position += 1
		Menu_Surface.blit(Sp.image, (Pos_x, Pos_y))
		
		ListeSprite.append({"id":Sp.data["ID"]})

	Texture_Séléctionné = 0

	GameRun = True
	while GameRun:
		
		for event in pygame.event.get():	#Attente des événements
			if event.type == MOUSEMOTION:
				pos_curs = event.pos
			if event.type == MOUSEBUTTONDOWN:
				if event.button == 1:
					clic_x = event.pos[0]
					clic_y = event.pos[1]
					
					if clic_x > Pos_Menu_Surface.x: # Si clique dans le menu de gauche
						bloc_x = (clic_x - Pos_Menu_Surface.x) // 32
						bloc_y = (clic_y) // 32
						Texture_Séléctionné = bloc_y*Menu_Width + bloc_x
					if clic_x < Pos_Menu_Surface.x:
						bloc_x = (Pos_Ecran_Actuelle[0] + clic_x) // 32
						bloc_y = (Pos_Ecran_Actuelle[1] + clic_y) // 32
						Id = int(ListeSprite[Texture_Séléctionné]["id"])
						if bloc_y>=0 and bloc_y<len(Map_Data["data"]):
							if bloc_x>=0 and bloc_x<len(Map_Data["data"][bloc_y]):
								Map_Data["data"][bloc_y][bloc_x] = Id
							logging.debug("Bloc cliqué: %s %s %s"%(bloc_x, bloc_y, Id))
							
				if event.button == 2:
					clic_x = event.pos[0]
					clic_y = event.pos[1]
					
					if clic_x < Pos_Menu_Surface.x:
						bloc_x = (Pos_Ecran_Actuelle[0] + clic_x) // 32
						bloc_y = (Pos_Ecran_Actuelle[1] + clic_y) // 32
						Id = Map_Data["data"][bloc_y][bloc_x]
						for i in range(0, len(ListeSprite)):
							if Id == ListeSprite[i]["id"]:
								Texture_Séléctionné = i
								logging.debug("Bloc pipette: %s %s %s %s"%(bloc_x, bloc_y, Id, Texture_Séléctionné))
			
			if event.type == QUIT:
				maps.save_map(map_name, Map_Data)
				GameRun = False
			if event.type == KEYDOWN:
				if event.key == K_LEFT:
					divers.move_screen(Pos_Ecran_Actuelle, Size, ScreenSize, Menu_Width*32, (-15, 0))
				if event.key == K_RIGHT:
					divers.move_screen(Pos_Ecran_Actuelle, Size, ScreenSize, Menu_Width*32, (15, 0))
				if event.key == K_UP:
					divers.move_screen(Pos_Ecran_Actuelle, Size, ScreenSize, Menu_Width*32, (0, -15))
				if event.key == K_DOWN:
					divers.move_screen(Pos_Ecran_Actuelle, Size, ScreenSize, Menu_Width*32, (0, 15))
				if event.key == K_s:
					maps.save_map(map_name, Map_Data)

		if pos_curs[0] < 10:
			divers.move_screen(Pos_Ecran_Actuelle, Size, ScreenSize, Menu_Width*32, (-5, 0))
		if pos_curs[0] > config.CFG["screen.size"][0]-10:
			divers.move_screen(Pos_Ecran_Actuelle, Size, ScreenSize, Menu_Width*32, (5, 0))
		if pos_curs[1] < 10:
			divers.move_screen(Pos_Ecran_Actuelle, Size, ScreenSize, Menu_Width*32, (0, -5))
		if pos_curs[1] > config.CFG["screen.size"][1]-10:
			divers.move_screen(Pos_Ecran_Actuelle, Size, ScreenSize, Menu_Width*32, (0, 5))


		y=0
		for y in range(0, Map_Data["size"][1]):
			for x in range(0, Map_Data["size"][0]):
				try:
					sprite = ressource.SPRITE[ Map_Data["data"][y][x] ]
				except Exception:
					sprite = Default_Sprite
				
				Maps_Surface.blit(sprite.image, (x*32, y*32))
				
		SpriteGroup.draw(Maps_Surface)
		
		Pos_inversé = (-Pos_Ecran_Actuelle[0], -Pos_Ecran_Actuelle[1])
		Display.blit(Maps_Surface, Pos_inversé)
		
		Display.blit(Menu_Surface, Pos_Menu_Surface)
		
		Pos_x = ScreenSize.width - Menu_Width*32 + ((Texture_Séléctionné%Menu_Width) * 32)
		Pos_y = (Texture_Séléctionné//Menu_Width) * 32
		
		Display.blit(ressource.SPRITE[ 200 ].image, (Pos_x, Pos_y))
		
		Scheduler.tick_busy_loop(int(config.CFG["screen.fps"]))
		pygame.display.flip()
		Maps_Surface.fill(0)
		Display.fill(0)
Пример #19
0
def foe(pos, info):
    model = info.get('model')
    scale = info.get('scale', 1.0)
    speed = info.get('speed', 50)
    energy = info.get('energy', 2)
    p = entity.Sprite(model=model, pos=pos)
    # shadow = entity.Entity()
    # shadow.add_component(comp.ShadowRenderer(angle=20.0))
    # p.add(shadow)
    p.layer = 1
    p.scale = scale
    p.add_component(
        comp.Controller3D(mask_up=vars.flags.platform,
                          mask_down=vars.flags.platform
                          | vars.flags.platform_passthrough,
                          size=[1, 1, 1],
                          shift=[0, 0.5],
                          max_climb_angle=80,
                          max_descend_angle=80,
                          debug=True))
    p.add_component(comp.Dynamics2D(gravity=vars.gravity))
    p.add_component(
        comp.SmartCollider(flag=vars.flags.foe,
                           mask=vars.flags.player_attack,
                           tag=vars.tags.foe,
                           cast_tag=vars.tags.foe_attack,
                           cast_mask=vars.flags.player,
                           debug=True))
    p.add_component(comp.Info(energy=energy))
    sm = comp.StateMachine(initial_state='walk')

    attacks = [{'state': 'attack0', 'prob': 0, 'in_range': True}]
    sm.states.append(states.Attack(uid='attack0', anim='punch'))
    # for i in range(0, n_attacks):
    #     attack_id = 'attack' + str(i+1)
    #     attack_list.append({'state': attack_id, 'prob': patt[i], 'in_range': True})
    #     sm.states.append(states.Attack(uid=attack_id, anim=attack_id))
    #     hp_map[attack_id] = hp[i]

    sm.states.append(
        pstates.FoeChase3D(uid='walk',
                           walk_anim='walk',
                           idle_anim='idle',
                           speed=speed,
                           acceleration=0.05,
                           attacks=attacks,
                           prob_attack=0))
    #     prob_attack=prob_attack))
    sm.states.append(
        pstates.IsHit(uid='hit', anim='hit', acceleration=10, dist=4))
    v0y = math.sqrt(2 * abs(vars.gravity) * 32)
    v0x = 64 * abs(vars.gravity) / v0y
    sm.states.append(
        pstates.Fly(uid='dead',
                    anim_up='dead_up',
                    anim_down='dead_down',
                    anim_lie='dead_lie',
                    v0=(v0x, v0y)))
    # sm.states.append(states.SimpleState(uid='dead', anim='hit'))
    p.add_component(sm)
    return p