extends Spatial export(NodePath) var torsoPath export(NodePath) var cameraPath export(NodePath) var rayCastPath export(NodePath) var viewPortPath const ROT_MOD = 500 const ROT_DECLINE = 0.1 var _viewRot = false var _prev_mouse_pos var _camera : Camera var _rayCast : RayCast var _torso : RigidBody var _viewport : Viewport var _velx = 0 var _vely = 0 # Called when the node enters the scene tree for the first time. func _ready(): PhysicsServer.area_set_param(get_viewport().find_world().get_space(), PhysicsServer.AREA_PARAM_GRAVITY, 0) _torso = get_node(torsoPath) as RigidBody _camera = get_node(cameraPath) as Camera _rayCast = get_node(rayCastPath) as RayCast _viewport = get_node(viewPortPath) as Viewport func _process(delta): if _viewRot: var mouse_pos = get_viewport().get_mouse_position() _velx = (mouse_pos.x - _prev_mouse_pos.x) * delta _vely = (mouse_pos.y - _prev_mouse_pos.y) * delta _prev_mouse_pos = mouse_pos if not(_velx < 0.001 and _velx > -0.001) or not(_vely < 0.001 and _vely > -0.001) or _viewRot: _torso.rotate_x(_vely * ROT_MOD * delta * PI/180 - global_transform.basis.get_euler().x) _torso.rotate_y(_velx * ROT_MOD * delta * PI/180 - global_transform.basis.get_euler().y) var decline = (1 - ROT_DECLINE * (delta*100)) if decline > 1: decline = 1 elif decline < 0: decline = 0 _velx *= decline _vely *= decline func _physics_process(delta): if _viewRot: var mouse_pos = _viewport.get_viewport().get_mouse_position() #set origin of rayCast var orig = _camera.project_ray_origin(mouse_pos) #set cast_to of rayCast _rayCast.translation = orig _rayCast.cast_to = orig + _camera.project_ray_normal(mouse_pos) * 1000.0 if _rayCast.is_colliding(): # collider will be the node hit print(_rayCast.get_collider()) func _input(event): if event is InputEventMouseButton: if event.pressed and _viewport.get_viewport().get_mouse_position().x >= 0: print("Mouse Click at: ", event.position) _prev_mouse_pos = event.position _viewRot = true else: print("mouse unpressed at: ", event.position) _viewRot = false