Browse Source

Kinematic character demo

Juan Linietsky 8 years ago
parent
commit
96f6f2967f

BIN
3d/kinematic_character/cubelib.res


+ 58 - 0
3d/kinematic_character/cubio.gd

@@ -0,0 +1,58 @@
+
+extends KinematicBody
+
+# Member variables
+var g = -9.8
+var vel = Vector3()
+const MAX_SPEED = 5
+const JUMP_SPEED = 7
+const ACCEL= 2
+const DEACCEL= 4
+const MAX_SLOPE_ANGLE = 30
+
+
+func _fixed_process(delta):
+	var dir = Vector3() # Where does the player intend to walk to
+	var cam_xform = get_node("target/camera").get_global_transform()
+	
+	if (Input.is_action_pressed("move_forward")):
+		dir += -cam_xform.basis[2]
+	if (Input.is_action_pressed("move_backwards")):
+		dir += cam_xform.basis[2]
+	if (Input.is_action_pressed("move_left")):
+		dir += -cam_xform.basis[0]
+	if (Input.is_action_pressed("move_right")):
+		dir += cam_xform.basis[0]
+	
+	dir.y = 0
+	dir = dir.normalized()
+	
+	vel.y += delta*g
+	
+	var hvel = vel
+	hvel.y = 0
+	
+	var target = dir*MAX_SPEED
+	var accel
+	if (dir.dot(hvel) > 0):
+		accel = ACCEL
+	else:
+		accel = DEACCEL
+	
+	hvel = hvel.linear_interpolate(target, accel*delta)
+	
+	vel.x = hvel.x
+	vel.z = hvel.z
+	
+	vel = move_and_slide(vel,Vector3(0,1,0))
+	
+	if (is_on_floor() and Input.is_action_pressed("jump")):
+		vel.y = JUMP_SPEED
+	
+	var crid = get_node("../elevator1").get_rid()
+
+
+
+func _on_tcube_body_enter(body):
+	if (body == self):
+		get_node("../ty").show()

+ 56 - 0
3d/kinematic_character/follow_camera.gd

@@ -0,0 +1,56 @@
+
+extends Camera
+
+# Member variables
+var collision_exception = []
+export var min_distance = 0.5
+export var max_distance = 4.0
+export var angle_v_adjust = 0.0
+export var autoturn_ray_aperture = 25
+export var autoturn_speed = 50
+var max_height = 2.0
+var min_height = 0
+
+
+func _fixed_process(dt):
+	var target = get_parent().global_transform.origin
+	var pos = global_transform.origin
+	var up = Vector3(0, 1, 0)
+	
+	var delta = pos - target
+	
+	# Regular delta follow
+	
+	# Check ranges
+	if (delta.length() < min_distance):
+		delta = delta.normalized()*min_distance
+	elif (delta.length() > max_distance):
+		delta = delta.normalized()*max_distance
+	
+	# Check upper and lower height
+	if (delta.y > max_height):
+		delta.y = max_height
+	if (delta.y < min_height):
+		delta.y = min_height
+	
+	pos = target + delta
+	
+	look_at_from_pos(pos, target, up)
+	
+	# Turn a little up or down
+	var t = transform
+	t.basis = Basis(t.basis[0], deg2rad(angle_v_adjust))*t.basis
+	transform = t
+
+
+func _ready():
+	# Find collision exceptions for ray
+	var node = self
+	while(node):
+		if (node is RigidBody):
+			collision_exception.append(node.get_rid())
+			break
+		else:
+			node = node.get_parent()
+	# This detaches the camera transform from the parent spatial node
+	set_as_toplevel(true)

BIN
3d/kinematic_character/kinebody3d.png


+ 23 - 0
3d/kinematic_character/kinebody3d.png.import

@@ -0,0 +1,23 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path="res://.import/kinebody3d.png-13e5946de0ae5f65e359d6d81ccb14f1.stex"
+
+[params]
+
+compress/mode=0
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/normal_map=0
+flags/repeat=0
+flags/filter=true
+flags/mipmaps=false
+flags/anisotropic=false
+flags/srgb=2
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+stream=false
+size_limit=0
+detect_3d=true

BIN
3d/kinematic_character/level.scn


+ 18 - 0
3d/kinematic_character/project.godot

@@ -0,0 +1,18 @@
+[application]
+
+icon = "res://kinebody3d.png"
+main_scene = "res://level.scn"
+name = "Kinematic Character 3D"
+
+[input]
+
+jump = [ InputEvent(KEY,32) ]
+move_backwards = [ InputEvent(KEY,16777234) ]
+move_forward = [ InputEvent(KEY,16777232) ]
+move_left = [ InputEvent(KEY,16777231) ]
+move_right = [ InputEvent(KEY,16777233) ]
+
+[rasterizer]
+
+shadow_filter = 3
+

BIN
3d/kinematic_character/purple_wood.png


+ 24 - 0
3d/kinematic_character/purple_wood.png.import

@@ -0,0 +1,24 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path.s3tc="res://.import/purple_wood.png-ae65a206e7a59edf759728c3bad04e56.s3tc.stex"
+path.etc2="res://.import/purple_wood.png-ae65a206e7a59edf759728c3bad04e56.etc2.stex"
+
+[params]
+
+compress/mode=2
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/normal_map=0
+flags/repeat=true
+flags/filter=true
+flags/mipmaps=true
+flags/anisotropic=false
+flags/srgb=1
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+stream=false
+size_limit=0
+detect_3d=false

BIN
3d/kinematic_character/purple_wood.tex


BIN
3d/kinematic_character/purplecube.scn


BIN
3d/kinematic_character/twood.tex


BIN
3d/kinematic_character/white_wood.png


+ 24 - 0
3d/kinematic_character/white_wood.png.import

@@ -0,0 +1,24 @@
+[remap]
+
+importer="texture"
+type="StreamTexture"
+path.s3tc="res://.import/white_wood.png-6895acd60ce97b4315494d2be377c357.s3tc.stex"
+path.etc2="res://.import/white_wood.png-6895acd60ce97b4315494d2be377c357.etc2.stex"
+
+[params]
+
+compress/mode=2
+compress/lossy_quality=0.7
+compress/hdr_mode=0
+compress/normal_map=0
+flags/repeat=true
+flags/filter=true
+flags/mipmaps=true
+flags/anisotropic=false
+flags/srgb=1
+process/fix_alpha_border=true
+process/premult_alpha=false
+process/HDR_as_SRGB=false
+stream=false
+size_limit=0
+detect_3d=false

BIN
3d/kinematic_character/white_wood.tex