def setup(self):
        """ Attaches the movement controller and inits the keybindings """
        # x
        self.showbase.accept("raw-w", self.set_movement, [0, 1])
        self.showbase.accept("raw-w-up", self.set_movement, [0, 0])
        self.showbase.accept("raw-s", self.set_movement, [0, -1])
        self.showbase.accept("raw-s-up", self.set_movement, [0, 0])

        # y
        self.showbase.accept("raw-a", self.set_movement, [1, -1])
        self.showbase.accept("raw-a-up", self.set_movement, [1, 0])
        self.showbase.accept("raw-d", self.set_movement, [1, 1])
        self.showbase.accept("raw-d-up", self.set_movement, [1, 0])

        # z
        self.showbase.accept("space", self.set_movement, [2, 1])
        self.showbase.accept("space-up", self.set_movement, [2, 0])
        self.showbase.accept("shift", self.set_movement, [2, -1])
        self.showbase.accept("shift-up", self.set_movement, [2, 0])

        # wireframe + debug + buffer viewer
        self.showbase.accept("f3", self.showbase.toggle_wireframe)
        self.showbase.accept("f11", lambda: self.showbase.win.save_screenshot("screenshot.png"))
        self.showbase.accept("j", self.print_position)

        # mouse
        self.showbase.accept("mouse1", self.set_mouse_enabled, [True])
        self.showbase.accept("mouse1-up", self.set_mouse_enabled, [False])

        # arrow mouse navigation
        self.showbase.accept("arrow_up", self.set_hpr_movement, [1, 1])
        self.showbase.accept("arrow_up-up", self.set_hpr_movement, [1, 0])
        self.showbase.accept("arrow_down", self.set_hpr_movement, [1, -1])
        self.showbase.accept("arrow_down-up", self.set_hpr_movement, [1, 0])
        self.showbase.accept("arrow_left", self.set_hpr_movement, [0, 1])
        self.showbase.accept("arrow_left-up", self.set_hpr_movement, [0, 0])
        self.showbase.accept("arrow_right", self.set_hpr_movement, [0, -1])
        self.showbase.accept("arrow_right-up", self.set_hpr_movement, [0, 0])

        # increase / decrease speed
        self.showbase.accept("+", self.increase_speed)
        self.showbase.accept("-", self.decrease_speed)

        # disable modifier buttons to be able to move while pressing shift for
        # example
        self.showbase.mouseWatcherNode.set_modifier_buttons(ModifierButtons())
        self.showbase.buttonThrowers[0].node().set_modifier_buttons(ModifierButtons())

        # disable pandas builtin mouse control
        self.showbase.disableMouse()

        # add ourself as an update task which gets executed very early before
        # the rendering
        self.update_task = self.showbase.addTask(self.update, "RP_UpdateMovementController", sort=-40)

        # Hotkeys to connect to pstats and reset the initial position
        self.showbase.accept("1", PStatClient.connect)
        self.showbase.accept("3", self.reset_to_initial)
 Attaches the movement controller and inits the keybindings 
metadrive/render_pipeline/rpcore/util/movement_controller.py