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])
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))
def spawn(self, entity, position=None): if position: entity.dpos = Vector3(position) entity.reset() self.entities.append(entity) self.scene.add(entity) return entity
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
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()
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)
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()
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)
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
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()
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
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
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)
def spawn(self, child, position=None): if position: child.dpos = Vector3(position) self.add(child) return child
def on_touch_up(self, touch): self.inputVector = Vector3([0, 0, 0]) self.joystick.opacity = 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