def __init__(self): ShowBase.__init__(self) simplepbr.init() self.accept('escape', sys.exit) self.accept('f11', self.debug) m = loader.load_model("pbrcube.bam") m.reparent_to(render) # Camera self.cam_gimbal = NodePath('gimbal') self.cam_gimbal.reparent_to(render) base.cam.reparent_to(self.cam_gimbal) base.cam.set_pos(0, -10, 0) base.cam.look_at(0, 0, 0) self.add_task(self.update_camera) # Light light = PointLight('plight') light.set_color((10, 10, 10, 10)) light.set_attenuation((1, 0, 1)) light_np = base.cam.attach_new_node(light) render.set_light(light_np) light_np.set_pos(0, 0, 2) # Debug info render.ls() render.analyze()
class TheGameWindow(ShowBase): SPEED = 50 def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.set_background_color(0.2, 0.2, 0.2, 0.6) # disables the default mouse camera control # self.disable_mouse() self.cam.set_pos(0, -100, 0) # lights self.plight = PointLight("pl") self.plight.set_color((1, 1, 1, 1)) self.plight.set_color((1, 1, 1, 1)) self.plight.set_attenuation((1, 0, 0)) self.plnp = self.render.attach_new_node(self.plight) self.plnp.set_pos(0, 0, 100) self.render.set_light(self.plnp) self.amblight = AmbientLight("ambl") self.amblight.set_color((0.1, 0.1, 0.1, 1)) self.ambnp = self.render.attach_new_node(self.amblight) self.render.set_light(self.ambnp) # shadows self.plight.set_shadow_caster(True, 2048, 2048) self.render.set_shader_auto() # floor self.floor = self.loader.loadModel(str(settings.egg / "floor.egg")) self.floor.reparent_to(self.render) self.floor.set_name("floor") self.sphere = self.loader.loadModel("models/misc/sphere") self.sphere.set_pos(0, 0, 20) self.sphere.set_name("sphere") self.sphere.set_scale(3.0) self.sphere.set_color((1, 1, 1, 1)) self.sphere.reparent_to(self.render) # key assigment self.accept("w", update_key_map, ["w", True]) self.accept("w-up", update_key_map, ["w", False]) self.accept("s", update_key_map, ["s", True]) self.accept("s-up", update_key_map, ["s", False]) self.accept("a", update_key_map, ["a", True]) self.accept("a-up", update_key_map, ["a", False]) self.accept("d", update_key_map, ["d", True]) self.accept("d-up", update_key_map, ["d", False]) self.accept("e", update_key_map, ["e", True]) self.accept("e-up", update_key_map, ["e", False]) self.accept("q", update_key_map, ["q", True]) self.accept("q-up", update_key_map, ["q", False]) # collision self.cTrav = CollisionTraverser() self.col_pusher = CollisionHandlerPusher() # self.handler = CollisionHandlerEvent() # self.handler.addInPattern('%fn-into-%in') # self.accept('player-into-Floor', self.handle_collision) sphere_collider = self.sphere.attachNewNode(CollisionNode('player')) sphere_collider.node().addSolid(CollisionSphere(0, 0, 0, 1)) sphere_collider.show() # floor_collider = self.floor.attachNewNode(CollisionNode('ground_zero')) # floor_collider.node().addSolid(CollisionPlane(Plane(Vec3(0, 0, 1), Point3(0, 0, 0)))) # floor_collider.show() self.col_pusher.addCollider(sphere_collider, self.sphere) self.cTrav.showCollisions(self.render) # self.cTrav.addCollider(sphere_collider, self.handler) self.cTrav.addCollider(sphere_collider, self.col_pusher) # uppdate self.task_mgr.add(self.update) def handle_collision(self, entry): print(self.floor.get_name()) for k in KEY_MAP: KEY_MAP[k] = False print(entry) def update(self, task: Task): dt = globalClock.getDt() if KEY_MAP["e"]: pos = self.sphere.get_pos() pos.z += self.SPEED * dt self.sphere.set_pos(pos) if KEY_MAP["q"]: pos = self.sphere.get_pos() pos.z -= self.SPEED * dt self.sphere.set_pos(pos) if KEY_MAP["a"]: pos = self.sphere.get_pos() pos.x -= self.SPEED * dt self.sphere.set_pos(pos) if KEY_MAP["d"]: pos = self.sphere.get_pos() pos.x += self.SPEED * dt self.sphere.set_pos(pos) if KEY_MAP["w"]: pos = self.sphere.get_pos() pos.y += self.SPEED * dt self.sphere.set_pos(pos) if KEY_MAP["s"]: pos = self.sphere.get_pos() pos.y -= self.SPEED * dt self.sphere.set_pos(pos) return task.cont
class TheGameWindow(ShowBase): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.set_background_color(0, 0, 0, 0.6) # disables the default mouse camera control # self.disable_mouse() self.cam.set_pos(0, -100, 0) self.sphere = self.loader.loadModel("models/misc/sphere") self.sphere.reparent_to(self.render) self.sphere.set_pos(10, 10, 10) self.sphere.set_scale(0.2) self.empty = NodePath("empty") self.empty.reparent_to(self.render) self.plight = PointLight("pl") self.plight.set_color((1, 1, 1, 1)) self.plight.set_color((1, 1, 1, 1)) self.plight.set_attenuation((1, 0, 0)) self.plnp = self.render.attach_new_node(self.plight) self.render.set_light(self.plnp) self.plnp.reparent_to(self.sphere) self.bc304 = self.loader.loadModel(str(settings.egg / "bc304.egg")) # left-rigth, far-from-camera, vertical-movement # x, y, z self.bc304.set_pos(0, 0, 0) self.bc304.set_scale(0.1) self.bc304.reparent_to(self.render) # heading, pitch,, roll self.bc304.set_hpr(280, 10, 0) self.x, self.y, self.z = 0.0, 0.0, 0.0 self.h, self.p = 0.0, 0.0 self.task_mgr.add(self.update) # self.accept("mouse1", self.to_pegasus) self.accept("mouse1-up", self.to_pegasus) # self.accept("mouse2", self.to_pegasus) self.accept("mouse2-up", self.to_pegasus) # self.accept("mouse3", self.to_pegasus) self.accept("mouse3-up", self.to_pegasus) self.accept("arrow_left", update_key_map, ["left", True]) self.accept("arrow_left-up", update_key_map, ["left", False]) self.accept("arrow_right", update_key_map, ["right", True]) self.accept("arrow_right-up", update_key_map, ["right", False]) self.accept("arrow_up", update_key_map, ["up", True]) self.accept("arrow_up-up", update_key_map, ["up", False]) self.accept("arrow_down", update_key_map, ["down", True]) self.accept("arrow_down-up", update_key_map, ["down", False]) self.accept("space", update_key_map, ["space", True]) self.accept("space-up", update_key_map, ["space", False]) self.accept("w", update_key_map, ["w", True]) self.accept("w-up", update_key_map, ["w", False]) self.accept("s", update_key_map, ["s", True]) self.accept("s-up", update_key_map, ["s", False]) self.accept("a", update_key_map, ["a", True]) self.accept("a-up", update_key_map, ["a", False]) self.accept("d", update_key_map, ["d", True]) self.accept("d-up", update_key_map, ["d", False]) def to_pegasus(self): # mouse_pos = self.mouseWatcherNode.getMouse() # mouse_pos_3d = (mouse_pos[0], 0, mouse_pos[1]) # mouse_pos_button = self.button.getRelativePoint(render, mouse_pos_3d) # print(mouse_pos_3d) # pointer = self.win.get_pointer(0) # self.z = -(pointer.get_y() - (720 / 2)) / 10 # print(self.z) # self.bc304.set_pos(pointer.get_x(), 0, self.z) pass def update(self, task: Task): dt = globalClock.getDt() if KEY_MAP["up"]: self.bc304.set_pos(self.x, self.y, self.z) self.z += 2.0 * dt if KEY_MAP["down"]: self.bc304.set_pos(self.x, self.y, self.z) self.z -= 2.0 * dt if KEY_MAP["right"]: self.bc304.set_pos(self.x, self.y, self.z) self.x += 2.0 * dt if KEY_MAP["left"]: self.bc304.set_pos(self.x, self.y, self.z) self.x -= 2.0 * dt if KEY_MAP["w"]: pos = self.sphere.get_pos() pos.z += 3 * dt self.sphere.set_pos(pos) if KEY_MAP["s"]: pos = self.sphere.get_pos() pos.z -= 3 * dt self.sphere.set_pos(pos) if KEY_MAP["a"]: pos = self.sphere.get_pos() pos.x -= 3 * dt self.sphere.set_pos(pos) if KEY_MAP["d"]: pos = self.sphere.get_pos() pos.x += 3 * dt self.sphere.set_pos(pos) # self.z -= 0.5 * dt # self.bc304.set_hpr(self.h, self.p, 0) # self.h += 0.1 # self.p += 0.1 return task.cont
class TheGameWindow(ShowBase): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.speed = 50 self.set_background_color(0, 0, 0, 0.6) # disables the default mouse camera control # self.disable_mouse() self.cam.set_pos(0, -100, 0) self.floor = self.loader.loadModel(str(settings.egg / "floor.egg")) self.bc304 = self.loader.loadModel(str(settings.egg / "bc304.egg")) self.floor.set_color((0.5, 0.5, 0.5, 1)) self.floor.reparent_to(self.render) self.sphere = self.loader.loadModel("models/misc/sphere") self.sphere.reparent_to(self.render) self.sphere.set_pos(10, 10, 10) self.sphere.set_scale(2.0) self.amblight = AmbientLight("ambl") self.amblight.set_color((0.1, 0.1, 0.1, 1)) self.ambnp = self.render.attach_new_node(self.amblight) self.plight = PointLight("pl") self.plight.set_shadow_caster(True, 2048, 2048) self.render.set_shader_auto() self.plight.set_color((1, 1, 1, 1)) self.plight.set_attenuation((1, 0, 0)) self.plnp = self.sphere.attach_new_node(self.plight) self.bc304.set_light(self.plnp) self.floor.set_light(self.plnp) self.bc304.set_light(self.ambnp) self.floor.set_light(self.ambnp) self.filter = CommonFilters(self.win, self.cam) self.filter.set_bloom(mintrigger=0.9, size="large") # left-rigth, far-from-camera, vertical-movement # x, y, z self.bc304.set_pos(0, 0, 50) self.bc304.set_scale(0.1) self.bc304.reparent_to(self.render) # heading, pitch,, roll self.bc304.set_hpr(280, 10, 0) self.x, self.y, self.z = 0.0, 0.0, 0.0 self.h, self.p = 0.0, 0.0 self.task_mgr.add(self.update) # self.accept("mouse1", self.to_pegasus) self.accept("mouse1-up", self.to_pegasus) # self.accept("mouse2", self.to_pegasus) self.accept("mouse2-up", self.to_pegasus) # self.accept("mouse3", self.to_pegasus) self.accept("mouse3-up", self.to_pegasus) self.accept("arrow_left", update_key_map, ["left", True]) self.accept("arrow_left-up", update_key_map, ["left", False]) self.accept("arrow_right", update_key_map, ["right", True]) self.accept("arrow_right-up", update_key_map, ["right", False]) self.accept("arrow_up", update_key_map, ["up", True]) self.accept("arrow_up-up", update_key_map, ["up", False]) self.accept("arrow_down", update_key_map, ["down", True]) self.accept("arrow_down-up", update_key_map, ["down", False]) self.accept("space", update_key_map, ["space", True]) self.accept("space-up", update_key_map, ["space", False]) self.accept("w", update_key_map, ["w", True]) self.accept("w-up", update_key_map, ["w", False]) self.accept("s", update_key_map, ["s", True]) self.accept("s-up", update_key_map, ["s", False]) self.accept("a", update_key_map, ["a", True]) self.accept("a-up", update_key_map, ["a", False]) self.accept("d", update_key_map, ["d", True]) self.accept("d-up", update_key_map, ["d", False]) self.accept("e", update_key_map, ["e", True]) self.accept("e-up", update_key_map, ["e", False]) self.accept("q", update_key_map, ["q", True]) self.accept("q-up", update_key_map, ["q", False]) def to_pegasus(self): # mouse_pos = self.mouseWatcherNode.getMouse() # mouse_pos_3d = (mouse_pos[0], 0, mouse_pos[1]) # mouse_pos_button = self.button.getRelativePoint(render, mouse_pos_3d) # print(mouse_pos_3d) # pointer = self.win.get_pointer(0) # self.z = -(pointer.get_y() - (720 / 2)) / 10 # print(self.z) # self.bc304.set_pos(pointer.get_x(), 0, self.z) pass def update(self, task: Task): dt, ft = globalClock.getDt(), globalClock.getFrameTime() if KEY_MAP["up"]: self.bc304.set_pos(self.x, self.y, self.z) self.z += self.speed * dt if KEY_MAP["down"]: self.bc304.set_pos(self.x, self.y, self.z) self.z -= self.speed * dt if KEY_MAP["right"]: self.bc304.set_pos(self.x, self.y, self.z) self.x += self.speed * dt if KEY_MAP["left"]: self.bc304.set_pos(self.x, self.y, self.z) self.x -= self.speed * dt if KEY_MAP["e"]: pos = self.sphere.get_pos() pos.z += self.speed * dt self.sphere.set_pos(pos) if KEY_MAP["q"]: pos = self.sphere.get_pos() pos.z -= self.speed * dt self.sphere.set_pos(pos) if KEY_MAP["a"]: pos = self.sphere.get_pos() pos.x -= self.speed * dt self.sphere.set_pos(pos) if KEY_MAP["d"]: pos = self.sphere.get_pos() pos.x += self.speed * dt self.sphere.set_pos(pos) if KEY_MAP["w"]: pos = self.sphere.get_pos() pos.y += self.speed * dt self.sphere.set_pos(pos) if KEY_MAP["s"]: pos = self.sphere.get_pos() pos.y -= self.speed * dt self.sphere.set_pos(pos) # self.sphere.set_pos(float(np.cos(ft) * 4), float(np.sin(ft) * 4), float(np.sin(ft) * 10)) # self.z -= 0.5 * dt # self.bc304.set_hpr(self.h, self.p, 0) # self.h += 0.1 # self.p += 0.1 return task.cont