Add a moving platform
No player velocity handling etc yet, just a moving platform
This commit is contained in:
parent
6d0da014df
commit
36ba889eeb
38
MovingPlatform.gd
Normal file
38
MovingPlatform.gd
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
extends KinematicBody
|
||||||
|
class_name MovingPlatform
|
||||||
|
|
||||||
|
|
||||||
|
var time_passed := 0.0
|
||||||
|
var distance_to_pivot := 0.0
|
||||||
|
|
||||||
|
export(float) var move_speed = 2.0
|
||||||
|
export(NodePath) var solar_system
|
||||||
|
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
# Move the platform using the pivot and sin/cos.
|
||||||
|
# Theoretically we could just use the gravity from the solar system and actually orbit, but
|
||||||
|
# that seems like it'd get unstable very easily.
|
||||||
|
|
||||||
|
if distance_to_pivot == 0.0:
|
||||||
|
distance_to_pivot = get_parent().global_transform.origin.distance_to(global_transform.origin)
|
||||||
|
|
||||||
|
time_passed += delta
|
||||||
|
var speed_multiplier = (1.0 / distance_to_pivot) * move_speed
|
||||||
|
|
||||||
|
translation = Vector3(0.0,
|
||||||
|
cos(time_passed * speed_multiplier) * distance_to_pivot,
|
||||||
|
sin(time_passed * speed_multiplier) * distance_to_pivot
|
||||||
|
)
|
||||||
|
|
||||||
|
# Rotate according to gravity
|
||||||
|
var gravity_acceleration = get_node(solar_system).get_gravitation_acceleration(global_transform.origin)
|
||||||
|
|
||||||
|
# Rotate down vector to face center of gravity
|
||||||
|
var down = gravity_acceleration
|
||||||
|
var local_down = transform.basis * Vector3.DOWN
|
||||||
|
var angle = local_down.angle_to(down)
|
||||||
|
var axis = local_down.cross(down).normalized()
|
||||||
|
|
||||||
|
if axis != Vector3.ZERO: # Happens if we're perfectly aligned already (local_down and down are equal)
|
||||||
|
rotate(axis, angle)
|
@ -1,6 +1,6 @@
|
|||||||
[gd_resource type="ShaderMaterial" load_steps=2 format=2]
|
[gd_resource type="ShaderMaterial" load_steps=2 format=2]
|
||||||
|
|
||||||
[sub_resource type="Shader" id=2]
|
[sub_resource type="Shader" id=1]
|
||||||
code = "shader_type spatial;
|
code = "shader_type spatial;
|
||||||
|
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ void fragment() {
|
|||||||
|
|
||||||
[resource]
|
[resource]
|
||||||
resource_local_to_scene = true
|
resource_local_to_scene = true
|
||||||
shader = SubResource( 2 )
|
shader = SubResource( 1 )
|
||||||
shader_param/scale = Vector2( 50, 50 )
|
shader_param/scale = Vector2( 50, 50 )
|
||||||
shader_param/seamless = false
|
shader_param/seamless = false
|
||||||
shader_param/color_scale = Vector3( 0.8, 0.2, 0.4 )
|
shader_param/color_scale = Vector3( 0.8, 0.2, 0.4 )
|
||||||
|
@ -84,7 +84,5 @@ func _physics_process(delta):
|
|||||||
var angle = local_down.angle_to(down)
|
var angle = local_down.angle_to(down)
|
||||||
var axis = local_down.cross(down).normalized()
|
var axis = local_down.cross(down).normalized()
|
||||||
|
|
||||||
print(velocity.y)
|
|
||||||
|
|
||||||
if axis != Vector3.ZERO: # Happens if we're perfectly aligned already (local_down and down are equal)
|
if axis != Vector3.ZERO: # Happens if we're perfectly aligned already (local_down and down are equal)
|
||||||
rotate(axis, angle)
|
rotate(axis, angle)
|
||||||
|
66
World.tscn
66
World.tscn
File diff suppressed because one or more lines are too long
@ -9,12 +9,18 @@
|
|||||||
config_version=4
|
config_version=4
|
||||||
|
|
||||||
_global_script_classes=[ {
|
_global_script_classes=[ {
|
||||||
|
"base": "KinematicBody",
|
||||||
|
"class": "MovingPlatform",
|
||||||
|
"language": "GDScript",
|
||||||
|
"path": "res://MovingPlatform.gd"
|
||||||
|
}, {
|
||||||
"base": "Spatial",
|
"base": "Spatial",
|
||||||
"class": "SolarSystem",
|
"class": "SolarSystem",
|
||||||
"language": "GDScript",
|
"language": "GDScript",
|
||||||
"path": "res://Planets.gd"
|
"path": "res://Planets.gd"
|
||||||
} ]
|
} ]
|
||||||
_global_script_class_icons={
|
_global_script_class_icons={
|
||||||
|
"MovingPlatform": "",
|
||||||
"SolarSystem": ""
|
"SolarSystem": ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user