bl_info = {
    "name": "Move active object with keyboard",
    "category": "Object",
    "author": "Cotaks",
    "version": (1,1),
    "blender": (2, 80, 0), 
    "description": "Move active object in 3d view with keyboard in Blender and UPBGE."
}


import bpy


class SCV_OT_move_obj_to_right(bpy.types.Operator):
      
    bl_idname = "object.move_right"        
    bl_label = "Move object X"         
    bl_options = {'REGISTER', 'UNDO'}  
    
    units_to_move : bpy.props.FloatProperty(name="Units", default=1.0, min=0.0, max=1000.0)
    
    def execute(self, context):        

        scene = context.scene
        obj = context.active_object
        obj.location.x += self.units_to_move

        return {'FINISHED'}            


class SCV_OT_move_obj_to_left(bpy.types.Operator):
      
    bl_idname = "object.move_left"        
    bl_label = "Move object -X"         
    bl_options = {'REGISTER', 'UNDO'}  
    
    units_to_move : bpy.props.FloatProperty(name="Units", default=1.0, min=0.0, max=1000.0)
    
    def execute(self, context):        

        scene = context.scene
        obj = context.active_object
        obj.location.x -= self.units_to_move

        return {'FINISHED'} 

class SCV_OT_move_obj_forwards(bpy.types.Operator):
      
    bl_idname = "object.move_forwards"        
    bl_label = "Move object y"         
    bl_options = {'REGISTER', 'UNDO'}  

    units_to_move : bpy.props.FloatProperty(name="Units", default=1.0, min=0.0, max=1000.0)
    
    def execute(self, context):        

        scene = context.scene
        obj = context.active_object
        obj.location.y += self.units_to_move

        return {'FINISHED'} 

class SCV_OT_move_obj_backwards(bpy.types.Operator):
      
    bl_idname = "object.move_backwards"        
    bl_label = "Move object -y"         
    bl_options = {'REGISTER', 'UNDO'}  

    units_to_move : bpy.props.FloatProperty(name="Units", default=1.0, min=0.0, max=1000.0)
    
    def execute(self, context):        

        scene = context.scene
        obj = context.active_object
        obj.location.y -= self.units_to_move

        return {'FINISHED'}         

class SCV_OT_move_obj_up(bpy.types.Operator):
      
    bl_idname = "object.move_up"        
    bl_label = "Move object z"         
    bl_options = {'REGISTER', 'UNDO'}  

    units_to_move : bpy.props.FloatProperty(name="Units", default=1.0, min=0.0, max=1000.0)
    
    def execute(self, context):        

        scene = context.scene
        obj = context.active_object
        obj.location.z += self.units_to_move

        return {'FINISHED'} 
    
    
class SCV_OT_move_obj_down(bpy.types.Operator):
      
    bl_idname = "object.move_down"        
    bl_label = "Move object -z"         
    bl_options = {'REGISTER', 'UNDO'}  

    units_to_move : bpy.props.FloatProperty(name="Units", default=1.0, min=0.0, max=1000.0)
    
    def execute(self, context):        

        scene = context.scene
        obj = context.active_object
        obj.location.z -= self.units_to_move

        return {'FINISHED'} 
        
addon_keymaps = []


def register_keymaps():

    wm = bpy.context.window_manager
    km = wm.keyconfigs.addon.keymaps.new(name='Object Mode', space_type='EMPTY')

    kmi = km.keymap_items.new(SCV_OT_move_obj_to_right.bl_idname, 'RIGHT_ARROW', 'PRESS', alt=True)
    addon_keymaps.append((km, kmi))
    
    kmi = km.keymap_items.new(SCV_OT_move_obj_to_left.bl_idname, 'LEFT_ARROW', 'PRESS', alt=True)
    addon_keymaps.append((km, kmi))
    
    kmi = km.keymap_items.new(SCV_OT_move_obj_forwards.bl_idname, 'UP_ARROW', 'PRESS', alt=True)
    addon_keymaps.append((km, kmi))
    
    kmi = km.keymap_items.new(SCV_OT_move_obj_backwards.bl_idname, 'DOWN_ARROW', 'PRESS', alt=True)
    addon_keymaps.append((km, kmi))

    kmi = km.keymap_items.new(SCV_OT_move_obj_up.bl_idname, 'UP_ARROW', 'PRESS', shift=True, alt=True)
    addon_keymaps.append((km, kmi))
    
    kmi = km.keymap_items.new(SCV_OT_move_obj_down.bl_idname, 'DOWN_ARROW', 'PRESS', shift=True, alt=True)
    addon_keymaps.append((km, kmi))


def unregister_keymaps():

    for km, kmi in addon_keymaps:
        km.keymap_items.remove(kmi)
    addon_keymaps.clear()
    
        
def register():
    
    register_keymaps()
    
    bpy.utils.register_class(SCV_OT_move_obj_to_right)
    bpy.utils.register_class(SCV_OT_move_obj_to_left)
    bpy.utils.register_class(SCV_OT_move_obj_forwards)
    bpy.utils.register_class(SCV_OT_move_obj_backwards)
    bpy.utils.register_class(SCV_OT_move_obj_up)
    bpy.utils.register_class(SCV_OT_move_obj_down)

def unregister():
    
    unregister_keymaps()
    bpy.utils.unregister_class(SCV_OT_move_obj_to_right)
    bpy.utils.unregister_class(SCV_OT_move_obj_to_left)
    bpy.utils.unregister_class(SCV_OT_move_obj_forwards)
    bpy.utils.unregister_class(SCV_OT_move_obj_backwards)
    bpy.utils.unregister_class(SCV_OT_move_obj_up)
    bpy.utils.unregister_class(SCV_OT_move_obj_down)