Ejemplo n.º 1
0
 def __init__(self, level=None, **kwargs):
     super(Entity, self).__init__(**kwargs)
     self.level = level
     self.age = 0
     self.velocity = Vector3([0, 0, 0])
     self.dpos = Vector3([0,0,0])
     self.dvel = Vector3([0,0,0])
Ejemplo n.º 2
0
 def __init__(self, **kwargs):
     super(Joystick, self).__init__(**kwargs)
     self.vector = Vector3(0, 0, 0)
     self.opacity = 0
     with self.canvas:
         self.base = Line(circle=(75, 75, 60))
         self.stick = Line(circle=(75, 75, 75))
Ejemplo n.º 3
0
    def spawn(self, entity, position=None):
        if position:
            entity.dpos = Vector3(position)
            entity.reset()

        self.entities.append(entity)
        self.scene.add(entity)
        return entity
Ejemplo n.º 4
0
 def _set_rotation(self, val):
     if isinstance(val, Vector3):
         self._rotation = val
     else:
         self._rotation = Vector3(val)
     self._rotation.set_change_cb(self.on_angle_change)
     self._rotors["x"].angle = self._rotation.x
     self._rotors["y"].angle = self._rotation.y
     self._rotors["z"].angle = self._rotation.z
Ejemplo n.º 5
0
    def on_touch_move(self, touch):
        v = Vector3([touch.x, 0, touch.y]) - self.touchStart
        l = v.length()
        if l > 0:
            v = v * (1 / v.length())

        v = v * (min(60, l) / 60)
        self.inputVector = v
        self.update_joystick()
Ejemplo n.º 6
0
    def tick(self, df):
        super(Player, self).tick(df)

        target = Vector3([0, 0, 0])
        l = self.velocity.length()
        if self.enforce_speed and l > 0:
            target = self.velocity * (1 / l)

        self.velocity = self.velocity + (target - self.velocity) * min(
            self.acceleration * df, 1.)
        print(self.velocity.length(), self.velocity)
        if self.velocity.length() > self.speed:
            self.velocity = self.velocity.normalize()
        print(self.velocity.length(), self.velocity)
Ejemplo n.º 7
0
    def __init__(self, **kw):

        super(Object3D, self).__init__(**kw)
        self.name = kw.pop('name', '')
        self.children = list()
        self.parent = None

        self._scale = Scale(1., 1., 1.)
        self._position = Vector3(0, 0, 0)
        self._rotation = Vector3(0, 0, 0)
        self._position.set_change_cb(self.on_pos_changed)
        self._rotation.set_change_cb(self.on_angle_change)

        # general instructions
        self._pop_matrix = PopMatrix()
        self._push_matrix = PushMatrix()
        self._translate = Translate(*self._position)
        self._rotors = {
            "x": Rotate(self._rotation.x, 1, 0, 0),
            "y": Rotate(self._rotation.y, 0, 1, 0),
            "z": Rotate(self._rotation.z, 0, 0, 1),
        }

        self._instructions = InstructionGroup()
Ejemplo n.º 8
0
	def __init__(self, material, depth, radius, **kwargs):
		super(Rotor, self).__init__(**kwargs)
		self.material = material
		self.depth = depth
		self.radius = radius
		self.rotors = []
		for i in range(3):
			x = math.cos(math.radians(i*120)) * radius
			y = math.sin(math.radians(i*120)) * radius
			self.add(Lines(material, [[0,0,0], [x,0,y]]))
			if depth > 0:
				rotor = Rotor(material, depth-1, radius / 2.)
				rotor.dpos = Vector3([x,0,y])
				self.rotors.append(rotor)
				self.add(rotor)
Ejemplo n.º 9
0
    def spawn_stalker(self, position, size=0.1, callback=None):
        stalker = Stalker(level=self)
        stalker.dpos = Vector3(position)
        stalker.reset()
        self.entities.append(stalker)
        self.scene.add(stalker)

        if callback is not None:
            collider = SphereCollider(position=(0, 0, 0),
                                      radius=size,
                                      parent=stalker,
                                      callback=callback)
            self.colliders.append(collider)
            return (stalker, collider)
        return stalker
Ejemplo n.º 10
0
    def load_level(self, level):
        self.level = level
        self.inputVector = Vector3([0, 0, 0])

        # (re)create renderer
        if self.renderer:
            self.remove_widget(self.renderer)
        self.renderer = Renderer(size_hint=(5, 5), shader_file="flat.glsl")
        self.add_widget(self.renderer, index=1)
        self.renderer.set_clear_color((0, 0, 0, 1))  # rgba

        # e.g. when added to parent
        self.renderer.bind(size=self._adjust_aspect)

        self.renderer.render(level.scene, level.camera)
        self.resizeRenderer()
Ejemplo n.º 11
0
 def tick(self, df):
     self.time += df
     v = self.game.inputVector
     self.player.velocity.add(v * df * 10 * Vector3(-1, 0, 1))
     for e in self.entities:
         e.tick(df)
     self.camera.pos.x = self.player.pos.x + 0.3
     self.camera.pos.z = self.player.pos.z - 3
     self.camera.look_at(self.player.pos)
     for c in self.colliders:
         if c.callback is not None:
             if c.check(self.player.pos, self.player.size):
                 if len(inspect.getargspec(c.callback)[0]) > 1:
                     if c.callback(c):
                         break
                 else:
                     if c.callback():
                         break
Ejemplo n.º 12
0
 def spawn_wireframe_cube(self,
                          location,
                          size=(1, 1, 1),
                          color=(1, 1, 1, 0.5),
                          callback=None):
     mat = Material(color=color[0:3], transparency=color[3])
     cube = Cube(material=mat, size=size)
     cube.dpos = Vector3(location)
     cube.reset()
     self.spawn(cube)
     if callback is not None:
         collider = BoxCollider(p1=p1,
                                p2=p2,
                                parent=cube,
                                callback=callback)
         self.colliders.append(collider)
         return (cube, collider)
     return cube
Ejemplo n.º 13
0
 def _set_position(self, val):
     if isinstance(val, Vector3):
         self._position = val
     else:
         self._position = Vector3(val)
     self._position.set_change_cb(self.on_pos_changed)
Ejemplo n.º 14
0
    def spawn(self, child, position=None):
        if position:
            child.dpos = Vector3(position)

        self.add(child)
        return child
Ejemplo n.º 15
0
 def on_touch_up(self, touch):
     self.inputVector = Vector3([0, 0, 0])
     self.joystick.opacity = 0
Ejemplo n.º 16
0
 def on_touch_down(self, touch):
     self.touchStart = Vector3([touch.x, 0, touch.y])
     self.inputVector = Vector3([0, 0, 0])
     self.update_joystick()
     self.joystick.opacity = 1