8639cecf4c
The scripts were streamlined using more or less the following conventions: - space after a comma in lists of arguments - space around weak operators (+, -), no space around strong operators (*, /) - space after a comment start (#) - removed trailing spaces or tabs, apart from those that delimit the function indentation level (those could be removed too but since they are added automatically by the editor when typing code, keeping them for now) - function blocks separate by two newlines The scene files were resaved with the (current) 2.0 format, and some scenes that were in XML format were converted to SCN, to be consistent across all demos.
78 lines
1.6 KiB
GDScript
78 lines
1.6 KiB
GDScript
|
|
extends Spatial
|
|
|
|
# member variables
|
|
var r_pos = Vector2()
|
|
var state
|
|
|
|
const STATE_MENU = 0
|
|
const STATE_GRAB = 1
|
|
|
|
|
|
func direction(vector):
|
|
var v = get_node("Camera").get_global_transform().basis*vector
|
|
v = v.normalized()
|
|
return v
|
|
|
|
|
|
func impulse(event, action):
|
|
if(event.is_action(action) && event.is_pressed() && !event.is_echo()):
|
|
return true
|
|
else:
|
|
return false
|
|
|
|
|
|
func _fixed_process(delta):
|
|
if(state != STATE_GRAB):
|
|
return
|
|
|
|
if(Input.get_mouse_mode() != Input.MOUSE_MODE_CAPTURED):
|
|
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
|
|
|
var dir = Vector3()
|
|
var cam = get_global_transform()
|
|
var org = get_translation()
|
|
|
|
if (Input.is_action_pressed("move_forward")):
|
|
dir += direction(Vector3(0, 0, -1))
|
|
if (Input.is_action_pressed("move_backwards")):
|
|
dir += direction(Vector3(0, 0, 1))
|
|
if (Input.is_action_pressed("move_left")):
|
|
dir += direction(Vector3(-1, 0, 0))
|
|
if (Input.is_action_pressed("move_right")):
|
|
dir += direction(Vector3(1, 0, 0))
|
|
|
|
dir = dir.normalized()
|
|
|
|
move(dir*10*delta)
|
|
var d = delta*0.1
|
|
|
|
var yaw = get_transform().rotated(Vector3(0, 1, 0), d*r_pos.x)
|
|
set_transform(yaw)
|
|
|
|
var cam = get_node("Camera")
|
|
var pitch = cam.get_transform().rotated(Vector3(1, 0, 0), d*r_pos.y)
|
|
cam.set_transform(pitch)
|
|
|
|
r_pos.x = 0.0
|
|
r_pos.y = 0.0
|
|
|
|
|
|
func _input(event):
|
|
if(event.type == InputEvent.MOUSE_MOTION):
|
|
r_pos = event.relative_pos
|
|
|
|
if(impulse(event, "ui_cancel")):
|
|
if(state == STATE_GRAB):
|
|
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
|
state = STATE_MENU
|
|
else:
|
|
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
|
state = STATE_GRAB
|
|
|
|
|
|
func _ready():
|
|
set_fixed_process(true)
|
|
set_process_input(true)
|
|
|
|
state = STATE_MENU
|