Пример #1
0
def rect_platform_3d(ciao):
    e = Entity()
    outline = ciao['poly']
    height = ciao.get('height', 1.0)

    y = ciao.get('y', 0.0)
    top_tex = ciao.get('top')
    side_tex = ciao.get('side')
    collision_tag = ciao.get('collision_tag', 0)
    shape = sh3d.Prism(shape=sh.Poly(outline=outline),
                       height=height,
                       walls=ciao.get('walls', []))
    if top_tex and side_tex:
        e.model = {
            'type': 'model.prism',
            'repeat': ciao['repeat'],
            'poly': outline,
            'top': top_tex,
            'side': side_tex,
            'height': height,
            'offset': [0, height, 0]
        }
    # e.add_component(comp.ShapeGfxColor(shape=shape, color=color))
    e.add_component(
        Collider(shape=shape, flag=2, mask=0, tag=collision_tag, debug=True))
    return e
Пример #2
0
def hotspot(key, desc):
    pos = desc.get('pos')
    size = desc.get('size')
    on_enter = desc.get('on_enter')
    on_leave = desc.get('on_leave')
    on_click = desc.get('on_click')
    on_enter_f = None
    on_click_f = None
    on_leave_f = None
    if on_enter:
        on_enter_args = desc.get('on_enter_args', [])
        on_enter_f = on_enter_hotspot(on_enter, on_enter_args)
    if on_click:
        on_click_args = desc.get('on_click_args', [])
        on_click_args.insert(0, key)
        on_click_f = on_click_hotspot(on_click, on_click_args)
    if on_leave:
        on_leave_args = desc.get('on_leave_args', [])
        on_leave_f = on_enter_hotspot(on_leave, on_leave_args)
    #on_enter_f = getattr(mopy.monkey.engine.data.scripts, on_enter) if on_enter else None
    #on_leave_f = getattr(mopy.monkey.engine.data.scripts, on_leave) if on_leave else None
    #on_click_f = getattr(mopy.monkey.engine.data.scripts, on_click) if on_click else None
    s = Entity(pos=pos)
    s.add_component(
        HotSpot(shape=Rect(width=size[0], height=size[1]),
                onclick=on_click_f,
                onenter=on_enter_f,
                onleave=on_leave_f))
    return s
Пример #3
0
def map_room(desc: dict):
    room = ScummRoom(desc)
    room.add_runner(Scheduler())
    # read world size
    width = desc['width']
    height = desc['height']

    device_size = mopy.monkey.engine.device_size
    cam_width = device_size[0]
    cam_height = device_size[1]
    # # add the main node
    room.default_item = 'main'
    main = Entity(tag='main')
    main.camera = OrthoCamera(width,
                              height,
                              cam_width,
                              cam_height, [0, 0, cam_width, cam_height],
                              tag='maincam')
    main.add_component(HotSpotManager(lmbclick=walk_to))
    room.add(main)
    # add static items
    room.add_items(desc)
    # add dynamic items
    room.load_dynamic_items()
    return room
Пример #4
0
def box(args):
    color = args['color']
    size = args['size']
    pos = args['pos']
    mass = args['mass']
    color = utils.hex_to_rgb(color)
    half_size = [size[0] * 0.5, size[1] * 0.5, size[2] * 0.5]
    e = Entity()
    e.auto_pos = True
    e.model = {
        'type': 'model.box3D_color',
        'color': [color[0], color[1], color[2], 1],
        'size': size,
        'offset': [-half_size[0], -half_size[1], -half_size[2]]
    }
    e.components = [{
        'type': 'bullet.rigid_body',
        'pos': pos,
        'mass': mass,
        'shape': {
            'type': 'bullet.box',
            'size': half_size
        }
    }]
    return e
Пример #5
0
def dir_light(ciao):
    e = Entity()
    e.add_component({
        'type': 'light.directional',
        'ambient': ciao.get('ambient'),
        'diffuse': ciao.get('diffuse'),
        'direction': ciao.get('direction')
    })
    return e
Пример #6
0
def foe(args):
    gl = mopy.monkey.engine.data.globals
    e = Entity()
    e.model = args['model']

    size = args['size']
    max_speed = args['max_speed']
    gravity, jump_speed = utils.compute_gravity(
        monkey.engine.data.globals.jump_height,
        monkey.engine.data.globals.time_to_jump_apex)
    flip_on_edge = args.get('flip_on_edge', False)

    e.add_component({
        'type': 'components.smart_collider',
        'tag': gl.CollisionTags.foe,
        'flag': gl.CollisionFlags.foe,
        'mask': gl.CollisionFlags.player,
        'debug': True
    })
    e.components.append({
        'type': 'components.controller2D',
        'size': [size[0], size[1], 0],
        'offset': [0, size[1] * 0.5, 0],
        'mask_up': 2,
        'mask_down': 2 | 32,
        'debug': True
    })
    e.components.append({'type': 'components.dynamics'})
    e.components.append({
        'type':
        'components.state_machine',
        'initial_state':
        'walk',
        'states': [{
            'id': 'walk',
            'type': 'state.npc_walk',
            'max_speed': max_speed,
            'jump_speed': jump_speed,
            'gravity': gravity,
            'jump_up_anim': 'walk',
            'jump_down_anim': 'walk',
            'direction': args.get('direction', -1),
            'flip_on_edge': flip_on_edge
        }, {
            'id': 'dead',
            'type': 'state.npc_walk',
            'max_speed': 0,
            'jump_speed': jump_speed,
            'gravity': gravity,
            'walk': 'dead',
            'walk_anim': 'dead',
            'jump_up_anim': 'dead',
            'jump_down_anim': 'dead'
        }]
    })
    return e
Пример #7
0
def moving_platform(args):
    e = Entity()
    gl = mopy.monkey.engine.data.globals
    width = args.get('width')
    points = args.get('points')
    points = [x * 16 for x in points]
    speed = args.get('speed')
    e.model = {
        'type': 'model.tiled',
        'tex': 'gfx/wbml.png',
        'img_tile_size': [16, 16],
        'tile_size': [16, 16],
        'size': [width, 1],
        'data': [0, 9] * width
    }
    e.add_component(Platform())
    e.add_component(
        Collider(debug=True,
                 flag=gl.CollisionFlags.platform_passthrough,
                 mask=gl.CollisionFlags.player,
                 tag=0,
                 shape=sh.Line(a=[0, 16, 0], b=[width * 16, 16, 0])))
    e.add_component(PolygonalMover(points=points, speed=speed, mode=1))
    #e.add_component(comp.PolygonalMover(origin=(pos[0],pos[1]), loop=args[6], pct=args[4], moves=[
    #    {'delta': [0, args[5]*vars.tile_size], 'speed': args[7], 'hold': 0}]))
    return e
Пример #8
0
def coin(args):
    e = Entity()
    e.model = args.get('model', 'sprites.pickupcoin')
    e.add_component({
        'type': 'components.smart_collider',
        'tag': data.CollisionTags.pickup_coin,
        'flag': data.CollisionFlags.foe,
        'mask': data.CollisionFlags.player,
        'debug': True
    })
    return e
Пример #9
0
def trap(key, desc):
    pos = desc.get('pos')
    s = Entity(pos=pos)
    s.tag = key
    size = desc.get('size')
    s.add_component(
        Collider(flag=2,
                 mask=1,
                 tag=2,
                 shape=Rect(size[0], size[1]),
                 debug=True))
    return s
Пример #10
0
def bg(data):
    e = Entity()
    if 'image' in data:
        e.model = {
            'type': 'model.rect',
            'tex': data['image'],
            'scale': data.get('scale', (1, 1)),
            'repeat': data.get('repeat', (1, 1)),
        }
    else:
        e.model = data['model']
    e.layer = data.get('layer', 0)
    return e
Пример #11
0
 def f():
     aa = mopy.monkey.engine.read(msg_id)
     id = example.get('main').add(
         Text(font='sprites.mario_font',
              size=8,
              text=aa,
              color=[0, 0, 0, 0],
              maxwidth=160,
              align=TextAlignment.center,
              pos=[96, 132, 1.01]))
     text_size = example.getById(id).getTextSize()
     tw = (text_size[2] - text_size[0])
     th = (text_size[3] - text_size[1])
     width = math.ceil(tw / 8.0)
     height = math.ceil(th / 8.0)
     data = [22, 8]
     data.extend([23, 8] * width)
     data.extend([24, 8])
     md = [22, 7]
     md.extend([23, 7] * width)
     md.extend([24, 7])
     data.extend(md * height)
     data.extend([22, 6])
     data.extend([23, 6] * width)
     data.extend([24, 6])
     e = Entity(tag='msg_wrap')
     e.model = {
         'type': 'model.tiled',
         'tex': 'gfx/wbml.png',
         'img_tile_size': [8, 8],
         'tile_size': [8, 8],
         'size': [width + 2, height + 2],
         'data': data
     }
     e.pos = [96 - 0.5 * tw - 8, 132 - 0.5 * th - 8, 1]
     example.get('main').add(e)
     #s = Script()
     #acts=[]
     #print('positioned ' + str(text_size))
     id1 = example.get('main').add(
         Text(tag='ciaone',
              font='sprites.mario_font',
              size=8,
              text='',
              mode=1,
              color=[255, 255, 255, 255],
              shade_color=(255, 0, 0, 255),
              maxwidth=160,
              align=TextAlignment.top_left,
              pos=[96 - 0.5 * tw, 132 + 0.5 * th, 1.02]))
Пример #12
0
def setup_bar():
    ra = mopy.monkey.engine.room_args
    gl = mopy.monkey.engine.data.globals
    bonus_left = Entity()
    bonus_left.model = gl.bonus_list[ra[0]]['gfx']
    bonus_left.pos = (2.5*16, 10.2*16, 0.11)
    example.get('main').add(bonus_left)
    bonus_right = Entity()
    bonus_right.model = gl.bonus_list[ra[2]]['gfx']
    bonus_right.pos = (9.5*16, 10.2*16, 0.11)
    example.get('main').add(bonus_right)




    from wbml.data.actions import WBM

    # check if player has enough gold to buy items
    min_cost = min(int(ra[1]), int(ra[3]))
    if gl.gold < min_cost:
        s = Script()
        s.seq([WBM('$msg/8'), act.ChangeRoom('citywl')])
        example.play(s)
    else:
        mopy.monkey.engine.data.globals.pos = [(2, 7.625, 0.1), (5.25, 7.625, 0.1), (9.5, 7.625, 0.1)]
        mopy.monkey.engine.data.globals.cpos = 1
        s = Script()
        s.seq([WBM('$msg/5')])
        example.play(s)
Пример #13
0
def sitem(key, desc):
    eng = mopy.monkey.engine
    data = eng.data
    cio = desc.get('create_if_owned', False)
    if (not cio) and key in data.globals.inventory:
        # item is in inventory. don't create it
        return None
    pos = desc.get('pos')
    model = desc.get('model', None)
    s = None
    if model:
        anim = desc.get('anim', None)
        s = Sprite(model=model, pos=pos, anim=anim)
    else:
        s = Entity(pos=pos)
    s.tag = key
    # if a size is provided, add a hotspot
    size = desc.get('size', None)
    if size:
        print('size is ' + str(size))
        s.add_component(
            HotSpot(shape=Rect(width=size[0], height=size[1]),
                    onclick=run_action_sci()))
    cbox = desc.get('collision', None)
    if cbox:
        add_collision_box(s, cbox)

    return s
Пример #14
0
def line_platform(ciao):
    e = Entity()
    tile_size = getattr(monkey.engine.data.globals, 'tile_size', [1, 1])
    pass_thru = ciao.get('pass_thru', False)
    moving = ciao.get('moving', False)
    pos = tiles_to_world(ciao.get('size'), tile_size)
    e.components.append({
        'type': 'components.collider',
        'shape': {
            'type': 'line',
            'A': (0, 0),
            'B': pos
        },
        'tag': 0,
        'flag': 32 if pass_thru else 2,
        'mask': 0,
        'debug': True
    })
    mp = ciao.get('move', None)
    if mp:
        e.components.append({'type': 'components.platform'})
        path = mp['path']
        e.components.append({
            'type':
            'components.polymover',
            'points':
            [path[i] * tile_size[i % 2] for i in range(0, len(path))],
            'speed':
            mp['speed'],
            'mode':
            mp['mode']
        })
    return e
Пример #15
0
def trunk(args):
    door = args.get('door')
    model = args.get('model', 'model.trunk')
    width = args.get('width', 6)
    xs = (width - 4) / 2
    tag = 'door_' + str(door)
    e = Entity()
    e.model = model
    door_info = mopy.monkey.engine.data.globals.doors[door]
    if door_info['open'] == 1:
        anim = door_info['anim']
    else:
        anim = 'barred'
    e.children.append(
        build_entity({
            'type': '_line',
            'size': [4, 0],
            'pass_thru': True
        }, [xs, 4]))

    e.children.append(
        build_entity(
            {
                'type': 'bg',
                'model': 'sprites.door',
                'anim': anim,
                'tag': tag
            }, [xs + 1, 0, 0]))
    # check if door is available
    if door_info['open'] == 1:
        coll = Entity()
        coll.add_component(
            Collider(
                shape={
                    'type': 'shape3d.aabb',
                    'size': [16, 32, 0]
                },
                flag=12,
                mask=mopy.monkey.engine.data.globals.CollisionFlags.player,
                tag=mopy.monkey.engine.data.globals.CollisionTags.door,
                debug=True))
        coll.pos = [(xs + 1.5) * 16, 0, 0]
        coll.add_component(Info(door_id=door))

        e.children.append(coll)
    return e
Пример #16
0
def dialogue_room(desc: dict):
    gl = mopy.monkey.engine.data.globals
    room = ScummRoom(desc)
    room.add_runner(Scheduler())
    room.init.append([refresh_inventory])
    # read world size
    width = desc['width']
    height = desc['height']

    device_size = mopy.monkey.engine.device_size
    cam_width = device_size[0]
    cam_height = device_size[1] - gl.ui_height

    # add the main node
    room.default_item = 'main'
    main = Entity(tag='main')
    main.camera = OrthoCamera(width,
                              height,
                              cam_width,
                              cam_height,
                              [0, gl.ui_height, cam_width, cam_height],
                              tag='maincam')
    room.add(main)

    # add the ui node
    ui = Entity(tag='ui')
    ui.camera = OrthoCamera(cam_width,
                            gl.ui_height,
                            cam_width,
                            gl.ui_height, [0, 0, cam_width, gl.ui_height],
                            tag='uicam')
    room.add(ui)

    # dialogue node
    dialogue_node = TextView(factory=make_dialogue_button,
                             pos=(0, 0),
                             size=(320, 56),
                             font_size=8,
                             lines=7,
                             delta_x=26,
                             tag='dialogue')
    dialogue_node.add_component(HotSpotManager())
    room.add(dialogue_node)

    inventory_node = Entity(tag='inventory')
    ui.add(inventory_node)

    # add static items
    room.add_items(desc)
    room.load_dynamic_items()
    return room
Пример #17
0
def bonus(model, speed, tag):
    e = Entity()
    e.model = model
    size = data.globals.tile_size
    max_speed = speed
    gravity, jump_speed = utils.compute_gravity(
        monkey.engine.data.globals.jump_height,
        monkey.engine.data.globals.time_to_jump_apex)
    e.add_component({
        'type': 'components.smart_collider',
        'tag': tag,
        'flag': data.CollisionFlags.foe,
        'mask': data.CollisionFlags.player,
        'debug': True
    })
    e.components.append({
        'type': 'components.controller2D',
        'size': [size[0], size[1], 0],
        'offset': [0, size[1] * 0.5, 0],
        'mask_up': 2,
        'mask_down': 2 | 32,
        'debug': True
    })
    e.components.append({'type': 'components.dynamics'})
    e.components.append({
        'type':
        'components.state_machine',
        'initial_state':
        'idle',
        'states': [{
            'id': 'walk',
            'type': 'state.npc_walk',
            'flip_hor': False,
            'max_speed': max_speed,
            'jump_speed': jump_speed,
            'gravity': gravity,
            'jump_up_anim': 'walk',
            'jump_down_anim': 'walk',
            'flip_on_edge': False
        }, {
            'id': 'idle',
            'type': 'state.null',
        }]
    })
    return e
Пример #18
0
def map_room(desc: dict):
    gl = mopy.monkey.engine.data.globals
    room = ScummRoom(desc)
    room.add_runner(Scheduler())
    width = desc['width']
    height = desc['height']
    device_size = mopy.monkey.engine.device_size
    cam_width = device_size[0]
    cam_height = device_size[1]
    # add the main node
    room.default_item = 'main'
    main = Entity(tag='main')
    main.camera = OrthoCamera(width,
                              height,
                              cam_width,
                              cam_height, [0, 0, cam_width, cam_height],
                              tag='maincam')
    main.add_component(HotSpotManager(lmbclick=walk_to))
    room.add(main)
    cursor = Text(font=gl.default_font,
                  size=8,
                  text='#',
                  color=(255, 255, 255, 255),
                  tag='_cursor')
    cursor.add_component(Cursor())
    main.add(cursor)
    # add static items
    room.add_items(desc)
    # add dynamic items
    room.load_dynamic_items()
    return room
Пример #19
0
def rect_platform(ciao):
    e = Entity()
    tile_size = getattr(monkey.engine.data.globals, 'tile_size', [1, 1])
    size = tiles_to_world(ciao.get('size'), tile_size)
    e.components.append({
        'type': 'components.collider',
        'shape': {
            'type': 'rect',
            'width': size[0],
            'height': size[1],
        },
        'tag': 0,
        'flag': 2,
        'mask': 0,
        'debug': True
    })
    e.model = ciao.get('model')
    return e
Пример #20
0
def brick(ciao):
    e = Entity()
    e.model = ciao.get('model', None)
    hits_left = ciao.get('hits_left', 1)
    bonus_item = ciao.get('item', None)
    collision_tag = data.CollisionTags.bonus_brick_sensor if bonus_item else data.CollisionTags.basic_brick_sensor
    tile_size = getattr(monkey.engine.data.globals, 'tile_size', [1, 1])
    hidden = ciao.get('hidden', False)
    if hidden:
        collision_tag = data.CollisionTags.hidden_brick_sensor
    e.components.append({
        'type': 'components.collider',
        'shape': {
            'type': 'rect',
            'width': tile_size[0],
            'height': tile_size[1],
        },
        'tag': 0,
        'flag': 0 if hidden else 2,
        'mask': 0,
        'debug': True
    })
    e.components.append({
        'type': 'components.info',
        'stuff': {
            'hits_left': hits_left,
            'item': bonus_item
        }
    })
    e.components.append({'type': 'components.dynamics'})
    e.components.append({'type': 'components.platform'})
    e.components.append({
        'type': 'components.line_dynamic_mover',
        'direction': (0, 1),
        'acceleration': (0, -data.globals.gravity),
        'min': 0
    })
    # add brick sensor
    sensor = Entity()
    sensor.pos = [0.1 * tile_size[0], -0.1 * tile_size[1], 0]
    sensor.components.append({
        'type': 'components.collider',
        'shape': {
            'type': 'shape3d.aabb',
            'size': [0.8 * tile_size[0], 0.2 * tile_size[1], 0]
        },
        'tag': collision_tag,
        'mask': data.CollisionFlags.player,
        'flag': data.CollisionFlags.foe,
        'debug': True
    })

    e.add(sensor)
    return e
Пример #21
0
def box_platform_3d(ciao):
    e = Entity()
    size = ciao['size']
    top_tex = ciao['top']
    side_tex = ciao['side']
    collision_tag = ciao.get('collision_tag', 0)
    shape = sh3d.AABB(size=size, offset=(0, 0, -size[2]))
    e.model = {
        'type': 'model.prism',
        'repeat': ciao['repeat'],
        'poly': [0, 0, size[0], 0, size[0], size[2], 0, size[2]],
        'top': top_tex,
        'side': side_tex,
        'height': size[1],
        'offset': [0, size[1], 0]
    }
    e.add_component(
        Collider(shape=shape, flag=2, mask=0, tag=collision_tag, debug=True))
    return e
Пример #22
0
def entity(ciao):
    e = Entity()
    e.model = ciao.get('model', None)
    e.scale = ciao.get('scale')
    e.components = ciao.get('components', [])
    e.tag = ciao.get('tag', None)
    children = ciao.get('children')
    if children:
        tile_size = getattr(
            monkey.engine.data.globals, 'tile_size',
            [1, 1])  # monkey.engine.room_vars.get('tile_size', [1, 1])
        for c in children:
            entity_desc = c
            positions = c.get('pos', [0, 0, 0])
            if 'ref' in c:
                entity_desc = monkey.engine.get_asset(entity_desc, c['ref'])
            factory = monkey.engine.get_item_factory(entity_desc['type'])
            if not factory:
                print('Don' 't have factory for item: ' + entity_desc['type'])
                exit(1)
            for ip in range(0, len(positions), 3):
                pos = positions[ip:ip + 3]
                child = factory(entity_desc)
                child.pos = tiles_to_world(pos, tile_size)
                e.children.append(child)

    return e
Пример #23
0
def ramp(args):
    e = Entity()
    pos = args['pos']
    e.model = {
        'type': 'model.ramp3D_wireframe',
        'width': args['width'],
        'length': args['length'],
        'height': args['height']
    }
    e.components = [{
        'type': 'bullet.rigid_body',
        'pos': pos,
        'mass': 0,
        'shape': {
            'type': 'bullet.ramp',
            'width': args['width'],
            'length': args['length'],
            'height': args['height']

        }
    }]
    return e
Пример #24
0
def bg(args):
    e = Entity()
    asset = copy.deepcopy(monkey.engine.get_asset(args.get('model', None)))
    e.anim = args.get('anim', None)
    e.tag = args.get('tag')
    if 'tile_size' not in asset:
        asset['tile_size'] = [16, 16]
    e.model = asset

    print('THE TAG IS ' + str(e.tag))
    e.read_children(args)
    return e
Пример #25
0
    def __init__(self, desc):
        super().__init__(desc) #, 384, 224)
        #width =
        #height = 240
        #device_width = monkey.engine.device_size[0]
        #device_height = monkey.engine.device_size[1]
        device_size = mopy.monkey.engine.device_size
        device_width = device_size[0]
        device_height = device_size[1]
        width = desc['width']
        height = desc['height']

        keyl = KeyListener()
        keyl.add_key(key=299, func=restart)
        self.add_runner(keyl)

        main = Entity(tag='main')
        cam = Camera25(width, height, device_width, device_height, [0, 0, device_width, device_height])
        #cam = camera.PerspectiveCamera(viewport=[0, 0, 320, 240])
        cam.tag = 'maincam'
        cam.pos = (5, 0, 1)
        #cam.bounds = world_bounds
        #cam.boundsz = [-100, 22]
        main.camera = cam

        self.main = main
        self.add(main)

        ce = CollisionEngine3D(80, 80, 80)            # this will be a 3d engine
        #ce.add_response(vars.tags.player, vars.tags.ladder, runners.CollisionResponse(on_enter=func.on_enter_ladder_area, on_leave=func.on_leave_ladder_area))
        #ce.add_response(vars.tags.player, vars.tags.spawn, runners.CollisionResponse(on_enter=func.spawn))
        #ce.add_response(vars.tags.player_attack, vars.tags.foe, runners.CollisionResponse(on_enter=func.player_hits_foe))
        #ce.add_response(vars.tags.foe_attack, vars.tags.player, runners.CollisionResponse(on_enter=func.foe_hits_player))

        self.add_runner(ce)
        self.add_runner(Scheduler())
Пример #26
0
def walkarea(data):
    e = Entity()
    e.tag = 'walkarea_' + str(data.get('id', 0))
    walkarea = {
        'type': 'components.walkarea',
        'depth': data.get('depth', None),
        'scale': data.get('scale', None),
        'walls': data.get('walls', None)
    }

    if 'poly' in data:
        walkarea['shape'] = {
            'type': 'shape.polygon',
            'outline': data['poly'],
            'holes': data.get('holes')
        }
    else:
        walkarea['shape'] = {
            'type': 'shape.polyline',
            'nodes': data['nodes'],
            'edges': data['edges']
        }
    e.add_component(walkarea)
    return e
Пример #27
0
def character(key, desc):
    gl = mopy.monkey.engine.data.globals
    is_player = key == gl.current_player
    model = desc.get('model', None)
    text_color = desc.get('text_color', [255, 255, 255, 255])
    text_offset = desc.get('text_offset', gl.default_text_offset)
    pos = desc.get('pos')
    tag = desc.get('tag', key)
    speed = desc.get('speed', gl.default_speed)
    s = None
    dir = desc.get('dir', 's')

    if model:
        s = Sprite(model=model, pos=pos, tag='player' if is_player else tag)
        # s.add_component(Collider(debug=True, flag=data.Collision.Flags.player, mask=data.Collision.Flags.other,
        #                                tag=data.Collision.Tags.player,
        #                                shape=shapes.Rect(width=8, height=2, offset=[-4, 0])))
        if is_player:
            s.add_component(Follow())
    else:
        s = Entity(pos=pos, tag='player' if is_player else tag)
    s.add_component({
        'type': 'components.character_controller',
        'dir': dir,
        'speed': speed,
        'text_offset': text_offset,
        'text_color': text_color,
        'use_keyboard': gl.use_keyboard if is_player else False
    })
    if is_player and gl.use_keyboard:
        s.add_component({'type': 'components.keyinput'})

    #cumm.components.CharacterController(dir=dir, speed=speed, text_color=text_color, text_offset=text_offset))
    # if a size is provided, add a hotspot
    size = desc.get('size', None)
    if size:
        s.add_component(
            HotSpot(shape=Rect(width=size[0],
                               height=size[1],
                               offset=[-0.5 * size[0], 0]),
                    onenter=hover_on(key),
                    onleave=hover_off(key),
                    onclick=run_action()))
    cbox = desc.get('collision', None)
    if cbox:
        add_collision_box(s, cbox)
    return s
Пример #28
0
def poly_platform(ciao):
    e = Entity()
    tile_size = getattr(monkey.engine.data.globals, 'tile_size', [1, 1])
    px = ciao.get('points')
    points = [px[i] * tile_size[i % 2] for i in range(0, len(px))]
    e.components.append({
        'type': 'components.collider',
        'shape': {
            'type': 'convex_polygon',
            'points': points,
        },
        'tag': 0,
        'flag': 2,
        'mask': 0,
        'debug': True
    })
    return e
Пример #29
0
def collider(ciao):
    e = Entity()
    dt = monkey.engine.data.globals
    size = ciao['size']
    e.add_component(
        Collider(shape=sh3d.AABB(size),
                 flag=dt.CollisionFlags.foe,
                 mask=dt.CollisionFlags.player,
                 tag=dt.CollisionTags.player_callback,
                 debug=dt.show_boxes))
    e.add_component(Info(func=ciao['func']))
    return e
Пример #30
0
def hotspot(args):
    glo = mopy.monkey.engine.data.globals
    hotspot = Entity()
    size = args['size']
    hotspot.add_component(
        Collider(debug=True,
                 flag=glo.CollisionFlags.foe,
                 mask=glo.CollisionFlags.player,
                 tag=glo.CollisionTags.hotspot,
                 shape=mopy.shapes3d.AABB([size[0], size[1], 1])))
    hotspot.add_component(
        Info(callback=args['callback'], args=args.get('args', [])))
    return hotspot