Improved control scheme
This commit is contained in:
14
proto2/autoloads/characters.gd
Normal file
14
proto2/autoloads/characters.gd
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
extends Node
|
||||||
|
|
||||||
|
# Declare member variables here. Examples:
|
||||||
|
# var a = 2
|
||||||
|
# var b = "text"
|
||||||
|
|
||||||
|
# Called when the node enters the scene tree for the first time.
|
||||||
|
var characters = [load("res://characters/male_2018.tscn"), load("res://characters/female_2018.tscn")]
|
||||||
|
func _ready():
|
||||||
|
pass # Replace with function body.
|
||||||
|
|
||||||
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
|
#func _process(delta):
|
||||||
|
# pass
|
||||||
@@ -1,4 +1,5 @@
|
|||||||
extends Node
|
extends Node
|
||||||
|
signal user_click
|
||||||
|
|
||||||
var frame_tf: Transform = Transform()
|
var frame_tf: Transform = Transform()
|
||||||
# Declare member variables here. Examples:
|
# Declare member variables here. Examples:
|
||||||
@@ -7,6 +8,7 @@ var frame_tf: Transform = Transform()
|
|||||||
|
|
||||||
# Called when the node enters the scene tree for the first time.
|
# Called when the node enters the scene tree for the first time.
|
||||||
var master_node: Node
|
var master_node: Node
|
||||||
|
var camera: Camera
|
||||||
func _ready():
|
func _ready():
|
||||||
pass # Replace with function body.
|
pass # Replace with function body.
|
||||||
|
|
||||||
@@ -15,11 +17,11 @@ func _process(delta):
|
|||||||
if !master_node:
|
if !master_node:
|
||||||
return
|
return
|
||||||
if Input.is_action_pressed("move_north"):
|
if Input.is_action_pressed("move_north"):
|
||||||
var n = lerp(master_node.get_walk_speed(), 2.8, 0.4 * delta)
|
var n = lerp(master_node.get_walk_speed(), 1.4, 0.5 * delta)
|
||||||
master_node.set_walk_speed(n)
|
master_node.set_walk_speed(n)
|
||||||
master_node.walk()
|
master_node.walk()
|
||||||
else:
|
elif !master_node._path || master_node._path.size() == 0:
|
||||||
var n = lerp(master_node.get_walk_speed(), 1.0, 0.4 * delta)
|
var n = lerp(master_node.get_walk_speed(), 1.0, 0.5 * delta)
|
||||||
master_node.set_walk_speed(n)
|
master_node.set_walk_speed(n)
|
||||||
master_node.idle()
|
master_node.idle()
|
||||||
if Input.is_action_pressed("move_east"):
|
if Input.is_action_pressed("move_east"):
|
||||||
@@ -28,4 +30,25 @@ func _process(delta):
|
|||||||
if Input.is_action_pressed("move_west"):
|
if Input.is_action_pressed("move_west"):
|
||||||
var tf_turn = Transform(Quat(Vector3(0, 1, 0), PI * 0.6 * delta))
|
var tf_turn = Transform(Quat(Vector3(0, 1, 0), PI * 0.6 * delta))
|
||||||
frame_tf *= tf_turn
|
frame_tf *= tf_turn
|
||||||
|
var click2d: Vector2 = Vector2()
|
||||||
|
var click2d_update: bool = false
|
||||||
|
var click3d: Vector3 = Vector3()
|
||||||
|
var click3d_update: bool = false
|
||||||
|
|
||||||
|
func _unhandled_input(event):
|
||||||
|
if event is InputEventMouse:
|
||||||
|
if event.button_mask & BUTTON_MASK_LEFT:
|
||||||
|
click2d = event.position
|
||||||
|
click2d_update = true
|
||||||
|
func _physics_process(delta):
|
||||||
|
if click2d_update:
|
||||||
|
var space := camera.get_world().direct_space_state
|
||||||
|
var ray_origin : = camera.project_ray_origin(click2d)
|
||||||
|
var ray_normal : = camera.project_ray_normal(click2d)
|
||||||
|
var result := space.intersect_ray(ray_origin, ray_origin + ray_normal * 120.0, [], 512, true, false)
|
||||||
|
if result.has("position"):
|
||||||
|
click3d = result.position
|
||||||
|
click3d_update = true
|
||||||
|
emit_signal("user_click", click3d)
|
||||||
|
click2d_update = false
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ var cheer_team = {}
|
|||||||
var room_events = {}
|
var room_events = {}
|
||||||
var line = {}
|
var line = {}
|
||||||
var training = false
|
var training = false
|
||||||
|
var nav: Navigation
|
||||||
|
|
||||||
func room_event(ev: String):
|
func room_event(ev: String):
|
||||||
if current_room:
|
if current_room:
|
||||||
|
|||||||
@@ -26,6 +26,16 @@ func get_walk_speed() -> float:
|
|||||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||||
#func _process(delta):
|
#func _process(delta):
|
||||||
# pass
|
# pass
|
||||||
|
var _path: Array
|
||||||
|
|
||||||
|
func walkto(target: Vector3, spd: float = 1.4):
|
||||||
|
var cur = world.nav.get_closest_point(global_transform.origin)
|
||||||
|
target = world.nav.get_closest_point(target)
|
||||||
|
var path: PoolVector3Array = world.nav.get_simple_path(cur, target)
|
||||||
|
_path = Array(path)
|
||||||
|
set_walk_speed(spd)
|
||||||
|
walk()
|
||||||
|
|
||||||
func _process(delta):
|
func _process(delta):
|
||||||
orientation = global_transform
|
orientation = global_transform
|
||||||
orientation.origin = Vector3()
|
orientation.origin = Vector3()
|
||||||
@@ -41,6 +51,19 @@ func _process(delta):
|
|||||||
if is_in_group("master"):
|
if is_in_group("master"):
|
||||||
orientation *= controls.frame_tf
|
orientation *= controls.frame_tf
|
||||||
controls.frame_tf = Transform()
|
controls.frame_tf = Transform()
|
||||||
|
if _path && _path.size() > 0:
|
||||||
|
while _path.size() > 0 && _path[0].distance_to(global_transform.origin) < 0.5:
|
||||||
|
_path.pop_front()
|
||||||
|
if _path.size() > 0:
|
||||||
|
var next: Vector3 = _path[0]
|
||||||
|
var direction: Vector3 = (next - global_transform.origin).normalized()
|
||||||
|
var actual_direction: Vector3 = -global_transform.basis[2]
|
||||||
|
var angle: float = Vector2(actual_direction.x, actual_direction.z).angle_to(Vector2(direction.x, direction.z))
|
||||||
|
var tf_turn = Transform(Quat(Vector3(0, 1, 0), -angle * delta))
|
||||||
|
orientation *= tf_turn
|
||||||
|
if !_path || _path.size() == 0:
|
||||||
|
idle()
|
||||||
|
|
||||||
orientation.origin = Vector3()
|
orientation.origin = Vector3()
|
||||||
orientation = orientation.orthonormalized()
|
orientation = orientation.orthonormalized()
|
||||||
global_transform.basis = orientation.basis
|
global_transform.basis = orientation.basis
|
||||||
|
|||||||
@@ -7,14 +7,20 @@ extends Spatial
|
|||||||
# Called when the node enters the scene tree for the first time.
|
# Called when the node enters the scene tree for the first time.
|
||||||
var frame_tf: Transform = Transform()
|
var frame_tf: Transform = Transform()
|
||||||
|
|
||||||
|
func master_control(pos):
|
||||||
|
$master.walkto(pos)
|
||||||
|
|
||||||
func _ready():
|
func _ready():
|
||||||
$master.add_to_group("master")
|
$master.add_to_group("master")
|
||||||
controls.master_node = $master
|
controls.master_node = $master
|
||||||
world.init_data()
|
world.init_data()
|
||||||
|
world.nav = $nav
|
||||||
|
controls.camera = $Camera
|
||||||
|
controls.connect("user_click", self, "master_control")
|
||||||
for k in world.line.keys():
|
for k in world.line.keys():
|
||||||
var cd = world.line[k]
|
var cd = world.line[k]
|
||||||
if cd.type == 0:
|
if cd.type == 0:
|
||||||
var char_sc = load("res://characters/male_2018.tscn").instance()
|
var char_sc = characters.characters[0].instance()
|
||||||
cd.scene = char_sc
|
cd.scene = char_sc
|
||||||
get_tree().get_root().add_child(char_sc)
|
get_tree().get_root().add_child(char_sc)
|
||||||
var nav: Navigation2D = get_node("nav")
|
var nav: Navigation2D = get_node("nav")
|
||||||
@@ -23,7 +29,7 @@ func _ready():
|
|||||||
# world.team[newkey] = cd
|
# world.team[newkey] = cd
|
||||||
# world.line.erase(k)
|
# world.line.erase(k)
|
||||||
else:
|
else:
|
||||||
var char_sc = load("res://characters/female_2018.tscn").instance()
|
var char_sc = characters.characters[1].instance()
|
||||||
cd.scene = char_sc
|
cd.scene = char_sc
|
||||||
get_tree().get_root().add_child(char_sc)
|
get_tree().get_root().add_child(char_sc)
|
||||||
var nav: Navigation2D = get_node("nav")
|
var nav: Navigation2D = get_node("nav")
|
||||||
@@ -37,4 +43,4 @@ func _ready():
|
|||||||
func _process(delta):
|
func _process(delta):
|
||||||
var pos = $master.global_transform.origin
|
var pos = $master.global_transform.origin
|
||||||
pos.y = $Camera.global_transform.origin.y
|
pos.y = $Camera.global_transform.origin.y
|
||||||
$Camera.global_transform.origin = $Camera.global_transform.origin.linear_interpolate(pos, 0.53 * delta)
|
$Camera.global_transform.origin = $Camera.global_transform.origin.linear_interpolate(pos, 0.8 * delta)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[gd_scene load_steps=5 format=2]
|
[gd_scene load_steps=7 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://characters/male_2018.tscn" type="PackedScene" id=1]
|
[ext_resource path="res://walls/walls.tscn" type="PackedScene" id=1]
|
||||||
[ext_resource path="res://walls/walls.tscn" type="PackedScene" id=2]
|
[ext_resource path="res://characters/male_2018.tscn" type="PackedScene" id=2]
|
||||||
[ext_resource path="res://main.gd" type="Script" id=3]
|
[ext_resource path="res://main.gd" type="Script" id=3]
|
||||||
|
|
||||||
[sub_resource type="NavigationMesh" id=1]
|
[sub_resource type="NavigationMesh" id=1]
|
||||||
@@ -12,6 +12,13 @@ agent/height = 1.8
|
|||||||
agent/radius = 0.1
|
agent/radius = 0.1
|
||||||
agent/max_climb = 0.8
|
agent/max_climb = 0.8
|
||||||
|
|
||||||
|
[sub_resource type="ProceduralSky" id=2]
|
||||||
|
|
||||||
|
[sub_resource type="Environment" id=3]
|
||||||
|
background_mode = 2
|
||||||
|
background_sky = SubResource( 2 )
|
||||||
|
ambient_light_color = Color( 0.227451, 0.2, 0.2, 1 )
|
||||||
|
|
||||||
[node name="main" type="Spatial"]
|
[node name="main" type="Spatial"]
|
||||||
script = ExtResource( 3 )
|
script = ExtResource( 3 )
|
||||||
|
|
||||||
@@ -20,37 +27,13 @@ script = ExtResource( 3 )
|
|||||||
[node name="navmesh" type="NavigationMeshInstance" parent="nav"]
|
[node name="navmesh" type="NavigationMeshInstance" parent="nav"]
|
||||||
navmesh = SubResource( 1 )
|
navmesh = SubResource( 1 )
|
||||||
|
|
||||||
[node name="building" parent="nav/navmesh" instance=ExtResource( 2 )]
|
[node name="building" parent="nav/navmesh" instance=ExtResource( 1 )]
|
||||||
|
|
||||||
[node name="Camera" type="Camera" parent="."]
|
[node name="Camera" type="Camera" parent="."]
|
||||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 22.648, 10, 17.621 )
|
transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 22.648, 6, 17.621 )
|
||||||
|
environment = SubResource( 3 )
|
||||||
|
|
||||||
[node name="light1" type="SpotLight" parent="."]
|
[node name="master" parent="." instance=ExtResource( 2 )]
|
||||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 22.524, 4, 15.4789 )
|
|
||||||
light_energy = 1.5
|
|
||||||
spot_angle = 89.0
|
|
||||||
|
|
||||||
[node name="light2" type="SpotLight" parent="."]
|
|
||||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -0.102865, 4, 15.4789 )
|
|
||||||
light_energy = 1.5
|
|
||||||
spot_angle = 89.0
|
|
||||||
|
|
||||||
[node name="light3" type="SpotLight" parent="."]
|
|
||||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -23.3045, 4, 15.4789 )
|
|
||||||
|
|
||||||
[node name="light4" type="SpotLight" parent="."]
|
|
||||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -16.1032, 4, -3.9398 )
|
|
||||||
|
|
||||||
[node name="light5" type="SpotLight" parent="."]
|
|
||||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 14.9059, 4, -3.9398 )
|
|
||||||
|
|
||||||
[node name="light6" type="SpotLight" parent="."]
|
|
||||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 14.9059, 4, -27.6017 )
|
|
||||||
|
|
||||||
[node name="light7" type="SpotLight" parent="."]
|
|
||||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, -16.7263, 4, -27.6017 )
|
|
||||||
|
|
||||||
[node name="master" parent="." instance=ExtResource( 1 )]
|
|
||||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 22.208, 0, 18.6387 )
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 22.208, 0, 18.6387 )
|
||||||
|
|
||||||
[node name="line_spawn" type="Spatial" parent="."]
|
[node name="line_spawn" type="Spatial" parent="."]
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ run/main_scene="res://ui/menu_root.tscn"
|
|||||||
|
|
||||||
world="*res://autoloads/world.gd"
|
world="*res://autoloads/world.gd"
|
||||||
controls="*res://autoloads/controls.gd"
|
controls="*res://autoloads/controls.gd"
|
||||||
|
characters="*res://autoloads/characters.gd"
|
||||||
|
|
||||||
[input]
|
[input]
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user