From 57840ab860b39350d3f0d777ac2cd7a4bf1f2877 Mon Sep 17 00:00:00 2001 From: Zac Date: Fri, 21 Sep 2018 17:36:47 -0400 Subject: [PATCH] removed trackball camera addon added new addon for gimbal set up gimbal in main project --- .../GimbalControl.gd | 650 ++++++++++++++++++ addons/alanscodelog.gimbalcontrol/LICENSE | 9 + addons/alanscodelog.gimbalcontrol/README.md | 29 + addons/alanscodelog.gimbalcontrol/icon.png | Bin 0 -> 840 bytes .../icon.png.import | 6 +- addons/alanscodelog.gimbalcontrol/icon.svg | 90 +++ .../icon.svg.import} | 6 +- addons/alanscodelog.gimbalcontrol/plugin.cfg | 7 + .../alanscodelog.gimbalcontrol/plugin_load.gd | 13 + addons/goutte.camera.trackball/LICENSE | 21 - addons/goutte.camera.trackball/README.md | 55 -- addons/goutte.camera.trackball/icon.png | Bin 3468 -> 0 bytes .../icon_trackball_camera.png | Bin 415 -> 0 bytes .../icon_trackball_camera.svg | 126 ---- .../icon_trackball_camera.svg.import | 29 - addons/goutte.camera.trackball/plugin.cfg | 7 - .../trackball_camera.gd | 135 ---- .../trackball_camera_plugin.gd | 12 - project.godot | 24 +- scenes/Player.tscn | 13 +- scenes/World_test.tscn | 124 ++++ scripts/Player/PlayerController.gd | 29 +- 22 files changed, 973 insertions(+), 412 deletions(-) create mode 100644 addons/alanscodelog.gimbalcontrol/GimbalControl.gd create mode 100644 addons/alanscodelog.gimbalcontrol/LICENSE create mode 100644 addons/alanscodelog.gimbalcontrol/README.md create mode 100644 addons/alanscodelog.gimbalcontrol/icon.png rename addons/{goutte.camera.trackball => alanscodelog.gimbalcontrol}/icon.png.import (65%) create mode 100644 addons/alanscodelog.gimbalcontrol/icon.svg rename addons/{goutte.camera.trackball/icon_trackball_camera.png.import => alanscodelog.gimbalcontrol/icon.svg.import} (59%) create mode 100644 addons/alanscodelog.gimbalcontrol/plugin.cfg create mode 100644 addons/alanscodelog.gimbalcontrol/plugin_load.gd delete mode 100644 addons/goutte.camera.trackball/LICENSE delete mode 100644 addons/goutte.camera.trackball/README.md delete mode 100644 addons/goutte.camera.trackball/icon.png delete mode 100644 addons/goutte.camera.trackball/icon_trackball_camera.png delete mode 100644 addons/goutte.camera.trackball/icon_trackball_camera.svg delete mode 100644 addons/goutte.camera.trackball/icon_trackball_camera.svg.import delete mode 100644 addons/goutte.camera.trackball/plugin.cfg delete mode 100644 addons/goutte.camera.trackball/trackball_camera.gd delete mode 100644 addons/goutte.camera.trackball/trackball_camera_plugin.gd create mode 100644 scenes/World_test.tscn diff --git a/addons/alanscodelog.gimbalcontrol/GimbalControl.gd b/addons/alanscodelog.gimbalcontrol/GimbalControl.gd new file mode 100644 index 0000000..0fa95b8 --- /dev/null +++ b/addons/alanscodelog.gimbalcontrol/GimbalControl.gd @@ -0,0 +1,650 @@ +#GimbalControl Node v0.1.0 + +# Notes: +# - To use as a camera gimbal, just place a camera inside and reset it's rotation if it was rotated. +# - All offsets/transforms of it's children are kept. +# - Do not scale parent nodes though, everything gets messed up. +# - If the target is a sibling of the node, it MUST be above the node in the hierarchy (so that it moves first). +# - Technically this script could be made to extend a camera node, but this way you could move anything +# with the gimbal (e.g. change lighting by rotating a light around a point) +# - An interpolated camera can be used to target the node itself, but it zooms in a bit weird when rotating around. +# - While running, you can't change the "origin/basis". +# - To "reset" the rotation (relative to it's current target or real transform), you should use set_rotation_to(right/left in degrees,up/down in degrees). +# - Note that keyboard ghosting can prevent multiple keys being registered (as might be the case if you're moving/looking only with keys) + +extends Spatial + +signal look_right(amount) +signal look_left(amount) +signal first_person_entered(distance) +signal first_person_exited(distance) + +#PROPERTIES + +#optional, can also just be parented to target +export (NodePath) var target setget set_target, get_target + +#whether when we change a target as we move closer to it or stay the same distance +#or min/max distance if out of range +export (bool) var move_to_target_on_change = true +#whether to interpolate target changes (rotation, location optional) +export (bool) var interpolate_target_change = true +#if move_to_target_on_change is true, allow zooming to stop the distance interpolation (rotation can't be stopped) +export (bool) var allow_stop_move_interpolation = true + +#whether to interpolate the set_rotation_to method +#this will correctly rotate around the target/origin in an arc +#the translation is not interpolated, it will move with the target at the speed the target moves +export (bool) var interpolate_set_rotation_to = true +#when you use set_rotation_to and interpolate_set_rotation_to is true, allows any movement to stop the interpolation +#will not stop rotations when interpolating between targets +export (bool) var allow_stop_rotation_interpolation = true + +#multiplier for interpolations, higher is faster. +export (float) var interpolation_speed = 2 + +#whether it tilts with it's parent/target or stays aligned to the global axis +export (bool) var rotate_globally = false setget set_rotate_globally, get_rotate_globally + +#regular speed +export (int) var move_speed = 2 +#speed when mouse look is on +export (int) var look_speed = 0.3 +#zoom can seem slow +export (int) var zoom_multiplier = 3 +#because of how the scroll button is triggered, it seems even slower than regular zoom +#is multiplied by zoom_multiplier +export (int) var scroll_zoom_multiplier = 5 + +#zoom/distances (used interchangeably, initally this was just a camera gimbal) +export (int) var default_distance = 10 +export (int) var min_distance = 0 +export (int) var max_distance = 50 + +#note that the zoom toggles ignores min/max distances +export var zoom_toggle_distances = [0, 20, 40] +#a convenient way to change the array order, in this case true causes it to go from 40 to 0, far to near +export (bool) var reverse_zoom_toggle_order = true + +#the distance at which the first person signal is triggered +export (int) var first_person_distance = 1 + +#rotation limits (the signal emitted ignores these) +#unlimit by setting to 360 +export (int, 0, 360) var rotation_limit_up_in_degrees = 90 #technically negative +export (int, 0, 360) var rotation_limit_down_in_degrees = 90 + +#default unlimited +export (int, 0, 360) var rotation_limit_right_in_degrees = 360 +export (int, 0, 360) var rotation_limit_left_in_degrees = 360 #technicall negative + +#initial start rotaion (-x = left, -y = down, around target/origin) +export (Vector2) var start_rotation_in_degrees = Vector2(0,30) + +#whether to invert movement +export (bool) var reverse_up_down = false +export (bool) var reverse_left_right = false + +#reverse mouse wheel zoom (regular zoom keys work the same) +export (bool) var reverse_mouse_zoom = false +#move by dragging (enable mouse look should be off) +export (bool) var enable_mouse_dragging = false +#whether to hide the mouse when enable mouse look isn't on +export (bool) var hide_mouse = true +#enable mouse look, hides mouse by default +export (bool) var enable_mouse_look = true + +#to control the a parent character's rotation with look right/left: +#- disable right left rotations in the node +#- connect the signal emitted to your character + +#to disable right/left completely (no checking right/left input), disable = true and emit = false +export (bool) var disable_right_left = false +export (bool) var emit_right_left = true + +#change the action names (note some options handle mouse vs key inputs differently e.g. reverse_mouse_zoom) +export (String) var look_right_action_name = "look_right" +export (String) var look_left_action_name = "look_left" +export (String) var look_up_action_name = "look_up" +export (String) var look_down_action_name = "look_down" +export (String) var look_click_action_name = "look_click" +export (String) var look_zoom_in_action_name = "look_zoom_in" +export (String) var look_zoom_out_action_name = "look_zoom_out" +export (String) var look_zoom_toggle_action_name = "look_zoom_toggle" + +#PRIVATE VARIABLES +#shorthand variables for my sanity +var look_right #look_right_action_name +var look_left #look_left_action_name +var look_up #look_up_action_name +var look_down #look_down_action_name +var look_click #look_click_action_name +var look_zoom_in #look_zoom_in_action_name +var look_zoom_out #look_zoom_out_action_name +var look_zoom_toggle #look_zoom_toggle_action_name + +var rot_limit_up #rotation_limit_up_in_degrees +var rot_limit_down #rotation_limit_down_in_degrees +var rot_limit_left #rotation_limit_left_in_degrees +var rot_limit_right #rotation_limit_right_in_degrees + +#movement vector, used as (left/right, up/down, distance/zoom) +var movement = Vector3(0,0,0) + +#whether we have a target +var target_mode = false +#so we can do things differently during initial ready (e.g. getsets) +var ready = false +#in set_target and align_to_target function we need to know the first time it was called +var first_call_target = true + +#whether the mouse is zooming/dragging/looking +var mouse_wheel_zooming = false +var mouse_dragging = false +var mouse_looking = false + +#whether we're in first person distance +var in_first_person = false + +#zoom related variables for toggle +var zoom_toggled = false +var zoom_levels #array +var zoom_level #index + +#to keep track of key states +var key_right = false +var key_left = false +var key_up = false +var key_down = false +var key_zoom_in = false +var key_zoom_out = false + +#for when we change from having a target to not, and are not in global mode +#we have to have some way to reset our orientation to the initial "local" orientation +var original_global_transform +#we also need a reference to the transform origin to move with parent +var original_transform + +#helps keep track of whether our target moved +var target_last_location + +#the distance we need to be from the target +var current_distance + +#interpolation_related +var forcing_transform = false +var interpo_end = { + "basis": null, + "look_target": null +} +var interpo_start #initial transform +var interpo_is_rotation = false +var slerp_value = 0 +var lerp_value = 0 +var lerp_stop = false +var rotation_stop = false + +func set_rotation_to(rotation_vector): + var start = { + "origin": original_global_transform.origin if !target else target.global_transform.origin, + "basis": global_transform.basis + } + if target_mode: + global_transform.origin = target.global_transform.origin + else: + global_transform.origin = original_global_transform.origin + + #to set angle, start with a "default" vector (pointing forward) + var start_position = Vector3(0,0,1) + + #rotate right/left then up/down + start_position = start_position.rotated(Vector3(0,1,0), deg2rad(rotation_vector.x)) + start_position = start_position.rotated(Vector3(-1,0,0), deg2rad(rotation_vector.y)) + + if !rotate_globally: + #apply correct basis if not rotating globally + var basis = target.global_transform.basis if target_mode else original_global_transform.basis + start_position = basis * start_position + + global_transform.origin = original_global_transform.origin if !target else target.global_transform.origin + global_translate(start_position * current_distance) + + #must be set like this otherwise end is a Transform and other properties can't be assigned + var end = { + "origin": global_transform.origin + } + + if interpolate_set_rotation_to: + interpo_is_rotation = true + align_to_target(start, end) + else: + interpo_is_rotation = false + align_to_target() + +func get_target(): + return target + +func set_target(value): + if ready: + if value != null and value != "Null": + target = get_node(value) + if target != null: + target_mode = true + target_last_location = target.global_transform.origin + else: + target = null + target_mode = false + else: + target_mode = false + + #align_to_target takes care of looking at our new target with interpolation if needed + if !first_call_target: + align_to_target() + else: + target = value + +func get_rotate_globally(): + return rotate_globally + +func set_rotate_globally(value): + rotate_globally = value + if ready: + align_to_target() + +func align_to_target(start = null, end = null): + var look_target_transform = target.global_transform if target_mode else original_global_transform + var look_target = look_target_transform.origin + var vector_up = Vector3(0,1,0) #global + + if !rotate_globally: #replace vector_up if not in global mode + var target_basis = look_target_transform.basis + vector_up = target_basis * Vector3(0,1,0) + + var initial_transform = global_transform + + #will handle looking at target and setting orientation correctly + if look_target != global_transform.origin: + #if we're directly above/beneath our target, look at doesn't work + var dir_to_target = (global_transform.origin - look_target).normalized() + + if dir_to_target != vector_up and -dir_to_target != vector_up: + look_at(look_target, vector_up) + else: + #in which case we just rotate forward/backward 90 degrees to face it + rotate_object_local(Vector3(-1,0,0) if dir_to_target.y > 0 else Vector3(1,0,0), deg2rad(90)) + else: + #in the event we're already at the target, we can use other ways to get the "correct" rotation + if !rotate_globally: + global_transform.basis = look_target_transform.basis #todo mix with rotation, just change z? + else: + rotation.z = 0 #we just need to untilt the node + + var new_distance + if !move_to_target_on_change: + new_distance = look_target.distance_to(initial_transform.origin) + if new_distance < min_distance: + current_distance = min_distance + elif new_distance > max_distance: + current_distance = max_distance + else: + current_distance = current_distance + + global_transform.origin = look_target + (initial_transform.origin - look_target).normalized() * current_distance + + var final_transform = global_transform + + if interpo_is_rotation or (!first_call_target and interpolate_target_change): + + #reset the transform so now we can slowly transition to the new one + global_transform.origin = initial_transform.origin + global_transform.basis = initial_transform.basis + + if start == null: + start = { + "basis": global_transform.basis, + "origin": global_transform.origin + } + + if end == null: + end = {} + end.origin = final_transform.origin + + end.basis = final_transform.basis + end.look_target = look_target + + force_transform(start, end) + +func force_transform(start, end): + interpo_start = start + interpo_end = end + lerp_value = 0 + slerp_value = 0 + forcing_transform = true #must be set last + +func rotation_slerp(delta): + slerp_value += delta * interpolation_speed + if slerp_value > 1: + slerp_value = 1 + + if !rotation_stop: + var current_rotation = Quat(interpo_start.basis).slerp(interpo_end.basis, slerp_value) + global_transform.basis = Basis(current_rotation) + + if slerp_value == 1 or rotation_stop: + #only slerp should reset these + forcing_transform = false + rotation_stop = false + movement = Vector3() + slerp_value = 0 + +func location_lerp(delta): + lerp_value += delta * interpolation_speed + if lerp_value > 1: + lerp_value = 1 + + if !lerp_stop and !rotation_stop: + #if we're not changing targets we want the interpolation to be at the correct distance from the target/origin + #to make it travel in an arc we do the same thing as when we move normally, and translate after rotating + #this is why the slerp has to be called first + #there's no need to actually interpolate + if interpo_is_rotation: + if !target_mode: + global_transform.origin = interpo_start.origin + else: + global_transform.origin = target.global_transform.origin #we can't use interpo start because this can have changed + + translate(Vector3(0,0, current_distance)) +# regular interpolation + elif target_mode: #there should never be any reason why we're not in target mode + global_transform.origin = interpo_start.origin.linear_interpolate(target.global_transform.origin + interpo_end.basis * Vector3(0,0,current_distance), lerp_value) + + if lerp_value == 1: + lerp_value = 0 + #lerp should rest this one as only it uses it + interpo_is_rotation = false + +func _ready(): + + ready = true + + #set shorthand variables + rot_limit_up = -deg2rad(rotation_limit_up_in_degrees) + rot_limit_down = deg2rad(rotation_limit_down_in_degrees) + rot_limit_left = -deg2rad(rotation_limit_left_in_degrees) + rot_limit_right = deg2rad(rotation_limit_right_in_degrees) + + look_right = look_right_action_name + look_left = look_left_action_name + look_up = look_up_action_name + look_down = look_down_action_name + look_click = look_click_action_name + look_zoom_in = look_zoom_in_action_name + look_zoom_out = look_zoom_out_action_name + look_zoom_toggle = look_zoom_toggle_action_name + + zoom_levels = zoom_toggle_distances + + zoom_level = 1 if reverse_zoom_toggle_order else 0 #zoom_toggle_distances.size() if reverse_zoom_toggle_order else 0 + + if zoom_levels.size() <= 1: + print("WARNING in " + str(name) + ": Zoom Toggle Distances array should contain at least 2 values.") + + current_distance = default_distance + + #set transforms + #reset scale because scale will messes with a bunch of things + #to scale things, scale within a child node + scale = Vector3(1,1,1) + original_global_transform = global_transform + original_transform = transform + + #properly set target variable (setget just does the path of target) + #align_to_target will not be called + set_target(target) + #because we need to know where the target is then do the start rotation relative to that + set_rotation_to(start_rotation_in_degrees) + #THEN align to the target + align_to_target() + #now we can set this to false + first_call_target = false + + if enable_mouse_dragging and enable_mouse_look: + print("WARNING in " + str(name) + ": Enable Mouse Dragging and Enable Mouse Look cannot be enabled at the same time, Mouse Dragging has been disabled.") + enable_mouse_dragging = false + + if enable_mouse_look: + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) + + if hide_mouse and !enable_mouse_look: #only one input mode can be set + Input.set_mouse_mode(Input.MOUSE_MODE_HIDDEN) + +#PROCESS INPUT +#using _input both to separate this logic and because sometimes we need event.is_action_pressed (which only fires on first press) +#as opposed to Input.is_action_pressed (which fires when held) +func _input(event): + + #MOUSE LOOK + if enable_mouse_look and event.is_class("InputEventMouseMotion") and event.relative: + movement = Vector3(event.relative.x if reverse_left_right else -event.relative.x, event.relative.y if reverse_up_down else -event.relative.y, movement.z) + mouse_looking = true + else: + mouse_looking = false + movement = Vector3(0,0, movement.z) + + #RIGHT/LEFT + if !disable_right_left or (disable_right_left and emit_right_left): + if event.is_action_released(look_right): + movement.x = 0 + key_right = false + if event.is_action_released(look_left): + movement.x = 0 + key_left = false + + if Input.is_action_pressed(look_right): + movement.x = 1 if reverse_left_right else -1 + key_right = true + if Input.is_action_pressed(look_left): + movement.x = -1 if reverse_left_right else 1 + key_left = true + + if key_right and key_left: + movement.x = 0 + + #UP/DOWN + if event.is_action_released(look_up): + movement.y = 0 + key_up = false + if event.is_action_released(look_down): + movement.y = 0 + key_down = false + + if Input.is_action_pressed(look_up): + movement.y = 1 if reverse_up_down else -1 + key_up = true + if Input.is_action_pressed(look_down): + movement.y = -1 if reverse_up_down else 1 + key_down = true + + if key_up and key_down: + movement.y = 0 + + #ZOOM IN/OUT + + #because of how scroll is registered (it looks like _input fires twice quickly and _process is never reached) + #movement/keys must be reset later, so we use mouse_wheel_zooming to trigger that + #there might be other types of input this happens to? + if !event.is_class("InputEventMouseButton"): + if event.is_action_released(look_zoom_in): + movement.z = 0 + key_zoom_in = false + if event.is_action_released(look_zoom_out): + movement.z = 0 + key_zoom_out = false + elif event.is_action(look_zoom_out) or event.is_action(look_zoom_in): + mouse_wheel_zooming = true + + if Input.is_action_pressed(look_zoom_in): + movement.z = 1 if reverse_mouse_zoom and event.is_class("InputEventMouseButton") else -1 + key_zoom_in = true + if Input.is_action_pressed(look_zoom_out): + movement.z = -1 if reverse_mouse_zoom and event.is_class("InputEventMouseButton") else 1 + key_zoom_out = true + + if key_zoom_in and key_zoom_out: + movement.z = 0 + + #ZOOM TOGGLE + if event.is_action_pressed(look_zoom_toggle): + movement.z = 0 + zoom_toggled = true + zoom_level += -1 if reverse_zoom_toggle_order else 1 + if zoom_level >= zoom_levels.size(): + zoom_level = 0 + elif zoom_level < 0: + zoom_level = zoom_levels.size() - 1 + else: + zoom_toggled = false + + #CLICKING/DRAGGING + if enable_mouse_dragging: + if event.is_action_pressed(look_click): + mouse_dragging = true + if event.is_action_released(look_click): + mouse_dragging = false + movement.x = 0 + movement.y = 0 + if mouse_dragging and event.is_class("InputEventMouseMotion"): + var mouse_move = event.relative + movement = Vector3(mouse_move.x if reverse_left_right else -mouse_move.x, mouse_move.y if reverse_up_down else -mouse_move.y, movement.z) + + +#APPLY MOVEMENT +#once input has processed we get a vector (right/left, up/down, zoomin/out) to change movement +#and can apply delta from here +func _process(delta): + + var target_moved = target_mode and target_last_location != target.global_transform.origin + + if !forcing_transform and (movement.length() != 0 or target_moved): + if target_mode: + target_last_location = target.global_transform.origin + + var speed + + #change speed if looking with mouse + if mouse_looking: + speed = look_speed * delta + else: + speed = move_speed * delta + + #get our target location (or initial local transform if no target) + var look_target_transform = target.global_transform if target_mode else original_global_transform + var look_target = look_target_transform.origin + + #record how far away we are from the target + var distance = global_transform.origin.distance_to(look_target) + + #move our object to the target (all rotations happen around the object's center) + if target_mode: + global_transform.origin = look_target + else: + transform.origin = original_transform.origin + + #get real rotation, used to calculate new rotation and check limits + #orthonormalized needed because after a few rotations we have messed up floats + var start_rotation + if rotate_globally: + start_rotation = global_transform.basis.orthonormalized().get_euler() + else: + #gets the rotation as if local to target + if target: + #if we're local to ourselves, change the transform (later used to rotate around) + start_rotation = (look_target_transform.affine_inverse() * global_transform).basis.orthonormalized().get_euler() + else: + start_rotation = (look_target_transform.affine_inverse() * transform).basis.orthonormalized().get_euler() + + #LEFT/RIGHT + if movement.x != 0: + var difference = movement.x * speed + var new_rot = start_rotation.y + difference + + if !disable_right_left: + if new_rot < rot_limit_right and new_rot > rot_limit_left: + if !rotate_globally: + #if we want the node to tilt with the character + #we can get the relative axis to tilt about by applying it's global basis to an up vector + if target: + #so here Vector3(0,1,0) is the target's y axis + global_rotate((look_target_transform.basis * Vector3(0,1,0)).normalized(), difference) + else: + #if we have no target, we can just rotate around the local y axis + rotate(Vector3(0,1,0), difference) + else: + #if we don't want the node to tilt with a parent node, we can just rotate around the global y axis + global_rotate(Vector3(0,1,0), difference) + + if emit_right_left: + emit_signal("look_right" if movement.x > 0 else "look_left", difference) + + #UP/DOWN + if movement.y != 0: + var difference = movement.y * speed + var new_rot = start_rotation.x + difference + + if new_rot > rot_limit_up and new_rot < rot_limit_down: + #to understand why just rotate_object_local is enough + #imagine the cube is alone at 0,0,0, it's pole tilted as rotated by any parent nodes + #that's our starting point always, so using any rotation method can cause tilting problems in global mode + #to get around this for both modes, if we're in global mode + #we can set the rotation so the pole is aligned with global y axis in _ready + #otherwise we leave it alone, rotated/tilted with it's parent + #and the axis/pole we're rotating up/down towards will stay put + rotate_object_local(Vector3(1,0,0), difference) + + #now that the object is rotated, we push it back along it's z axis + #this works because the push is relative to it's rotation + if !zoom_toggled: + speed = speed * zoom_multiplier + speed = speed * scroll_zoom_multiplier if mouse_wheel_zooming else speed + var new_distance = current_distance + movement.z * speed + if new_distance > min_distance and new_distance < max_distance: + current_distance += movement.z * speed + else: + current_distance = zoom_levels[zoom_level] + + translate(Vector3(0,0,current_distance)) + + #FIRST PERSON SIGNAL + if !in_first_person and current_distance <= first_person_distance: + in_first_person = true + emit_signal("first_person_entered", current_distance ) + elif in_first_person and current_distance > first_person_distance: + in_first_person = false + emit_signal("first_person_exited", current_distance ) + + #SPECIAL INPUT CASES + if mouse_wheel_zooming: #special reset + key_zoom_in = false + key_zoom_out = false + mouse_wheel_zooming = false + movement.z = 0 + + if mouse_dragging or enable_mouse_look: #special reset + movement = Vector3(0,0, movement.z) + + elif forcing_transform: + #in mid transform, zooming can stop the distance interpolation if allowed + if movement.z !=0: + if move_to_target_on_change and allow_stop_move_interpolation: + var new_distance = global_transform.origin.distance_to(target.global_transform.origin if target else interpo_end.look_target) + if new_distance > min_distance < max_distance: + lerp_stop = true + current_distance = new_distance + + if allow_stop_rotation_interpolation and interpo_is_rotation and movement.length() !=0: + rotation_stop = true + + #if forcing_transform we call the interpolations + #rotation must be called first + rotation_slerp(delta) + location_lerp(delta) diff --git a/addons/alanscodelog.gimbalcontrol/LICENSE b/addons/alanscodelog.gimbalcontrol/LICENSE new file mode 100644 index 0000000..38b4f18 --- /dev/null +++ b/addons/alanscodelog.gimbalcontrol/LICENSE @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2018 Alan North + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/addons/alanscodelog.gimbalcontrol/README.md b/addons/alanscodelog.gimbalcontrol/README.md new file mode 100644 index 0000000..e87c4bd --- /dev/null +++ b/addons/alanscodelog.gimbalcontrol/README.md @@ -0,0 +1,29 @@ +# Gimbal Control Node + +This is a gimbal node (for use with a camera, a light, or any other object) for Godot. It supports using keys, clicking and dragging, or mouse movement to look around. It also supports zooming, either with keys/mousewheel or with a toggle key (e.g. Joystick R3). And it doesn't have to be parented, it can track any target and even switch to targets with different rotations, and interpolated between them smoothly. + +You can change any of the keys, set limits to the up/down rotation and distances, disable/emit right/left movements, and emit a first person signal. + +The look_left/right signals are there so you can, for example, parent the gimbal (containing a camera) to a character then use the look left/right signal to rotate the character instead of the camera itself if you want to (see Demos). + +The first person signal tells you when the camera has come within a certain range, so you can, for example, show a specific HUD element on screen. + +### Note + +I'm new to Godot and game development/programming in general (I didn't know what a Transform was when I started this), so there might be a few bugs. Everything seems to be working as I intended, but if you find any problems or you think there's a better way to do something, don't hesitate to file an issue. + +## How to Install + +You can download it from the AssetLib (search for Gimbal Control Node), or you can clone/download this repository then copy the addons folder to your project, or the folder inside that to your addons folder if you already have one. + +From there you can enable it in `Project > Project Settings > Plugins` + +The plugin requires certain `look_*` actions in the input map to work. If you want to use your own actions, you can specify them in the node. Or to quickly get started, you can copy them from the `project.godot` file in the demo project. + +## Documentation + +For now most of the documentation is in the actual script, including common issues to be aware of. I will eventually get around to formatting everything nicely here. If anything is unclear don't hesitate to file an issue. + +## Demos + +I have also made a project with various demo scenes for testing/demonstrating possible configurations, you can find it [here](https://github.com/AlansCodeLog/godot-gimbal-control-node-demos). diff --git a/addons/alanscodelog.gimbalcontrol/icon.png b/addons/alanscodelog.gimbalcontrol/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..efa13dd71d2aef003a0864c6baad7c1858575641 GIT binary patch literal 840 zcmV-O1GoH%P)w#0K~y-6t&&enlXn=$Kfm|w+tNRjRb|pjq1Zx<(VcbEg8{`I z3^NX+#>?<;j63K>MP^uZCSEi#F)`|#yRgkJ(Z-mmiMrsGgMTP!0hP8;HLU!vl(#R> z4vrZ^cADSgljr-%ljr+||0y+Ra#eI5Q~%jy-&Y4xzpcIyXwZ9#%I^=^O0Ltx9iqzm zZ$OJwBb))kvCbob$W+>~Vc99Bm61<7N(X^n3=Yt$dglV(ncDzQ?Qlmn+I6f#M>26w z6`jtI|M23y$*j#g55+h(w#`D+zh^%p284lIQxDd>bj%cXq12CvD4=OX_gwI;`Xdai z1A0iXk*KmX03Na)2pg{P?C0NYN_VVO`!as5viXOi9nB}5O&Pyd8DEj#xAJIX%5aU1 z0M%5p4nPAiJfjWvlA%Ra>o3)4jXKEKy~z{b~Pp&1Tlv zeXrM=vw*;g8&+{eH->XeDKv#b05nTf&IQk_G}0BiQfSJxFv;?!BaHPgwZ>)v>GrSh zRo4HswItY8Cdi)dCAQM?lx5tlbHtLBirZgGX+c+}AbSvT=iUUTQtg}X!l8FRn0OVA z#jl(g=>D~(M+(L{K~jcEJ}@{l?8-45Oi6z6b1NwY<6L)JOJDrw;{&p%p!lWVVi;gso}z~z5-zRB9W7w3O*GXm5B&q%O|sIuM{sZ}BrXhSHj9qAa3#*YPc zB-7~%sVDBRzqx96Dr + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/addons/goutte.camera.trackball/icon_trackball_camera.png.import b/addons/alanscodelog.gimbalcontrol/icon.svg.import similarity index 59% rename from addons/goutte.camera.trackball/icon_trackball_camera.png.import rename to addons/alanscodelog.gimbalcontrol/icon.svg.import index ff7ebee..527d7e4 100644 --- a/addons/goutte.camera.trackball/icon_trackball_camera.png.import +++ b/addons/alanscodelog.gimbalcontrol/icon.svg.import @@ -2,12 +2,12 @@ importer="texture" type="StreamTexture" -path="res://.import/icon_trackball_camera.png-1f67d96a7a375568005a510700dba68a.stex" +path="res://.import/icon.svg-ff8e4076f0baed2eb77098bf4191ff8d.stex" [deps] -source_file="res://addons/goutte.camera.trackball/icon_trackball_camera.png" -dest_files=[ "res://.import/icon_trackball_camera.png-1f67d96a7a375568005a510700dba68a.stex" ] +source_file="res://addons/alanscodelog.gimbalcontrol/icon.svg" +dest_files=[ "res://.import/icon.svg-ff8e4076f0baed2eb77098bf4191ff8d.stex" ] [params] diff --git a/addons/alanscodelog.gimbalcontrol/plugin.cfg b/addons/alanscodelog.gimbalcontrol/plugin.cfg new file mode 100644 index 0000000..f6c2f83 --- /dev/null +++ b/addons/alanscodelog.gimbalcontrol/plugin.cfg @@ -0,0 +1,7 @@ +[plugin] + +name="Plugin Name" +description="A highly customizable gimbal node for controlling cameras and other nodes. Supports dragging, mouse look, zoom, transform limits, custom keys, etc." +author="Alan North" +version="0.1.0" +script="plugin_load.gd" \ No newline at end of file diff --git a/addons/alanscodelog.gimbalcontrol/plugin_load.gd b/addons/alanscodelog.gimbalcontrol/plugin_load.gd new file mode 100644 index 0000000..950b9d6 --- /dev/null +++ b/addons/alanscodelog.gimbalcontrol/plugin_load.gd @@ -0,0 +1,13 @@ +tool +extends EditorPlugin + +func _enter_tree(): + add_custom_type( + "GimbalControl", + "Spatial", + preload("GimbalControl.gd"), + preload("icon.png") + ) + +func _exit_tree(): + remove_custom_type("test") \ No newline at end of file diff --git a/addons/goutte.camera.trackball/LICENSE b/addons/goutte.camera.trackball/LICENSE deleted file mode 100644 index cfc5d38..0000000 --- a/addons/goutte.camera.trackball/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2017 Ξ0xB48C3B718a1FF3a280f574Ad36F04068d7EAf498 - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/addons/goutte.camera.trackball/README.md b/addons/goutte.camera.trackball/README.md deleted file mode 100644 index 4ac130a..0000000 --- a/addons/goutte.camera.trackball/README.md +++ /dev/null @@ -1,55 +0,0 @@ - -TrackballCamera for Godot -------------------------- - -[![MIT](https://img.shields.io/github/license/Goutte/godot-trackball-camera.svg)](https://github.com/Goutte/godot-trackball-camera) -[![Release](https://img.shields.io/github/release/Goutte/godot-trackball-camera.svg)](https://github.com/Goutte/godot-trackball-camera/releases) -[![Donate](https://img.shields.io/badge/%CE%9E-%E2%99%A5-blue.svg)](https://etherscan.io/address/0xB48C3B718a1FF3a280f574Ad36F04068d7EAf498) - -A simple [Godot](https://godotengine.org/) `3.x` addon that adds a `TrackballCamera` without gimbal lock. - -The `TrackballCamera` responds to input from mouse, keyboard, joystick and touch, in order to rotate around its parent node while facing it. - -A version for Godot `2.x` [is available as well](https://github.com/Goutte/godot-trackball-camera/releases/tag/v1.0). - - -Features --------- - -- stays around its parent node, even if it moves -- no gimbal lock (quaternions FTW) -- camera inertia for a smoother experience -- the parent node does not have to be centered in the camera's view -- a bunch of parameters to configure everything as you want it - - -Install -------- - -The installation is as usual, through the Assets Lib. -Then, enable the plugin in `Scene > Project Settings > Plugins`. - -You can also simply copy the files of this project into yours, it should work. - - -Usage ------ - -Make the `TrackballCamera` a child of the node to trackball around. -Make sure your camera initially faces said node, and is at a proper distance from it. -The initial position of your camera matters. The node does not need to be in the center. - -You can also use this camera to look around you if you place it atop its parent node, spatially. -It's going to rotate around itself, and that amounts to looking around. -You'll probably want to set `mouseInvert` and `keyboardInvert` to true in that case. - - -Todo ----- - -- [ ] Test if touch works on android and html5, try `SCREEN_DRAG` otherwise. - - -Feedback and contributions are welcome! - - diff --git a/addons/goutte.camera.trackball/icon.png b/addons/goutte.camera.trackball/icon.png deleted file mode 100644 index ebb428c5511474b2c843347554ec71431ca54ece..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3468 zcmZu!c{J3E7yr%}V;f8MCA(*d7#hlw8Dne}vV=$>;XP}OeVIn65m^gmX$VDzl3i&+ zwv2siY$FP9EEBR0e%}ATd(OR|bMHC#+wKC)86z2p0fZM_xV|#-5|CAki zV%rSeznuUCi?*<5Kaps5Pr`}M5oCTH3jm>~|5MQG*6@E%f?~lYPQiA8Ucq7R_wE2; zVPWcj2l!%dy9eD-54`7{yJjGMQh~z)V`Lwmx0>%8^mJ6L^SJ+@CAS@gmV>Z>Z3;mq zk4}L?2Kug+fQ1A}%L9)Qp2ko6uGWT{x**|)#QeYY^Z)*IrB_|^AALSOyWd(`CMZmj z(CI)T;YJ3Z{Xzkk=ZC1iVcx*)EUxdKv)^v^t#f_9xOj2#_+G(g-obTL;Z!X?UI8ou6TqiFJeu zZJ@GBBg0nR`_~;Hpf%`7gAgjfsP+;)E*4U?x~@J1s_p|CT3Qea?eh?OS?9LQlFaAy zTC@E z96zEO4JfCf{b*F@)Je2Qw=zqbfRZ8DEoD*<`XH8G;%=}~m*S*V%0Z)2HPPd|a@xN4 z)g+tve%jk@k|xo3*ajf$dLLYNYZriP71L82&&pjf4F_;PpP>gwLj+NUlg|9bc01uc zw(cMmc?0~%Aa~uN*9?$bJPexMcoq!6l(gpd_ibg{Q*)L~Jqn<-Gh5Dq-ZTZ!BhlRq zylYeC`jy~M`H5#%h5|%jYHW<;Nj*Pba6_Sc&C1#ltH4<{xUZ;%Ind1RRK@XIYjh-! ze*R?${ZjnXS@1ySARS!67FV)0U_9Hb(t3}V91HjhxRw7MQ9SaCg6mkNM_Js_AGU-Qa-YnXdNmtpwBqcYp^uycdMfT>gZFCf{2W?e*Dy;xaw z3d=_ssj;*g(8;)?SU07hUQV*gMgjcj6`uWQExtRr`)Rt!7gEp(n60)o3QU zw(5;&U)f(H#&hE(#MQlvlvV{Z{o#y~NpXH1{8jj_%Y=S+W=L9N*x)sOEg-;0)Dl%Y z?NJRYl<3f@H&O5ev;_BcEAl5Df#Z^%o(};@=DjR%q+5MjMckV&{v0SUlw4ao4@}YU zS$;*XY~s_xAO$x7J-#SwyvRXbaxI1T^uR-Ch}^IXjTU zwjKpz!`T>gPYkejS%+j)AFs){SkhVe?P+^Y>$)yvQ%y~I7aqsU607)D3oDq))Rxs0r~>L5xiW2va&*`i9%lLvIO|EzR3OZ+I5zY2@f6F zcYZH$+E(t*NOU6US^+xj*<%IFXXi^}-;6cEJ|xJnN9skqkO}gFV1MA$rG^*2*f8 zz$4l08>1Gt16uq1nVZZO$|c6n$~qvdk)pwL<73A38o79N)z3m745~)$ji?acs%|`2 zyn=7>O#JRy%pO|%hb4U?3tlARH40ZBhD>Ux)N<(p-M`A?G&b6?*hWtZxUa%F6^cnbtDr{lV19`C&?! z_i*NLtzlL?3_n)E0pCp0@f8zX&2lNyM)KjK>1P?5n~}H|dfNP{ywWLkbTn#hT7u)% z#=UcW%fozuEgUtq&p~^81HULAj{ouqdOOyc!KieT7mXHIj|7S93kQ#0OYh&v4jKF3z8kU~c;-mm6}FlBZv&z)Jawot z6xi6qu@U=BFS0Bml_HPj@9#*;lw8jNuG&Kuem=j?2FAN%+FJYb^t~f_E#q`znx30p zs3`f%mO-t!&PSo#J>*cmTm9%IyRn{RMSWeRfPi8JgtkOFZGQvSv{Jpacv7=9;n1v) zl2GUNO1J zh`JvuI%XR;N3KkRV^*sR^X|OtA$%pwIiR zodEf?^i2mZtJ5K&=!#o`&zPJ!X3PF6;caxwe;RR4BAD=xGdsq(<1_H_w%Biq@&eku zX)g8P>FK+3)akIeNEj+$c1Fp7f4#CpdHsr3QNT6p%N~k^Fk|q0SXskAoc) zteKHqUY-q1ad|~8+F-GuSDjY+`Uhuka6V#-V-dzJ?7>MhZ`TzYEhUqxyz_ zs=7oo1FW2jUu$Txer0LcHqVP~ZHq@AmP*Kug==|=MZhycXLUzMrI&iKfZuzR^{vQ` zCDawmb;|}fHcnmvsWTmh0+;;?cSH(eorZ9BA%9M_(GN9yc~Wa0|Uh3#L zJvdeeBPVs2mQY@>zL=Y$Afg#E3n`K*KeJ)oJS_eatu`hm^>crm??GO;I9He}-r2+o znBg>JuJ5*UU)zgC%+NroWfB4uz5A|FSAogg{Z0I) zk!sLymP*}}Q!#fI1#)C}R$@aBR)O9`*_lRx=njM1-Az0(8=fCTUS_iy1}o!wU*>Z4 z=85eoBbjjVf^4=`s_!dz>HB%w@_@_}oYuqK+%KI`Su(+rh`^h{PD+@mAKaFS$o@-q zrI^=v>pX&Ri#w`$wQdQTiCrWg>`d-Um6=jS0k<^}d*BxFhlfv+Fi4*ADk+-brce+{ z(H@+WOJ6>Uq8UHxMQ&^mr|+5ti`c-~8~tIg0^$dcC!H1~lb|$I|8O2R+{? zq51~Ta$oW`t?8Y!iijv)$5*N|9B;+;^blvU)-{ahvSBOcZ#TgX={KPOK2`eB)JNT> z=JQHyR8l?KrAcr~>QjhGt|p7}nFpc9TaogHQNq+B6R%rxE8E7hUH+3~3dO3$w8!nB zdp51VGphq^OJ#J<{n7a# z=9yi5e;BFbM#(9PHxagc90ietAS~RHo(=^jOj^e?uARFG{XfLw|FVq)Ij%iq{^(4nJ z@ErkR#;MwT(m+AU64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq!<_&WjtLR zLo9l)PTK9q@`WKdVpHpR0Lp#9Xg?Q_LVS;$mQldI66L+q}P3e}k&_Zk_u) zpZUepPhl>8YrT|ZT^XL=XNcS?-Ds!4Hjl+m=Iyt+46?4*nVhu?JEA>re$e@}-sr;% z7KW)!t3@v5DX$f)h|Bw3Sd*$YIo4LLowcE{ooVZBS1H~lH(jje-szue)ie1Cv&E@} zl0TiaTOD?lu1%b~H!MiPddZR!_U40W>Kx}jMT&E;2wND|{PWJnUVY2|jWhiWH%CU* zZrmmkE$#%Fc~~u{an^L HB{Ts54-BG) diff --git a/addons/goutte.camera.trackball/icon_trackball_camera.svg b/addons/goutte.camera.trackball/icon_trackball_camera.svg deleted file mode 100644 index 3467953..0000000 --- a/addons/goutte.camera.trackball/icon_trackball_camera.svg +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/addons/goutte.camera.trackball/icon_trackball_camera.svg.import b/addons/goutte.camera.trackball/icon_trackball_camera.svg.import deleted file mode 100644 index d7d1c8d..0000000 --- a/addons/goutte.camera.trackball/icon_trackball_camera.svg.import +++ /dev/null @@ -1,29 +0,0 @@ -[remap] - -importer="texture" -type="StreamTexture" -path="res://.import/icon_trackball_camera.svg-87202336c371094f2871b6de2f8005f0.stex" - -[deps] - -source_file="res://addons/goutte.camera.trackball/icon_trackball_camera.svg" -dest_files=[ "res://.import/icon_trackball_camera.svg-87202336c371094f2871b6de2f8005f0.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 -svg/scale=1.0 diff --git a/addons/goutte.camera.trackball/plugin.cfg b/addons/goutte.camera.trackball/plugin.cfg deleted file mode 100644 index 5cea84c..0000000 --- a/addons/goutte.camera.trackball/plugin.cfg +++ /dev/null @@ -1,7 +0,0 @@ -[plugin] - -name="TrackballCamera" -description="A simple trackball camera that responds to input from mouse, keyboard, joystick and touch, in order to rotate around its parent node while continuously facing it. Has inertia, no gimbal lock, and can be used to look around when rotating around itself." -author="Goutte" -version="4.0" -script="trackball_camera_plugin.gd" \ No newline at end of file diff --git a/addons/goutte.camera.trackball/trackball_camera.gd b/addons/goutte.camera.trackball/trackball_camera.gd deleted file mode 100644 index cc7532a..0000000 --- a/addons/goutte.camera.trackball/trackball_camera.gd +++ /dev/null @@ -1,135 +0,0 @@ -extends Camera - -# Makes this Camera respond to input from mouse, keyboard, joystick and touch, -# in order to rotate around its parent node while facing it. -# We're using quaternions, so no infamous gimbal lock. -# The camera has inertia for a smoother experience. - -# todo: test if touch works on android and html5, try SCREEN_DRAG otherwise - -# Requirements -# ------------ -# Godot 3.x - -# Usage -# ----- -# Attach as script to a Camera, and make the camera a child of the node to trackball around. -# Make sure your camera initially faces said node, and is at a proper distance from it. -# The initial position of your camera matters. The node does not need to be in the center. - -# You can also use this camera to look around you if you place it atop its parent node, spatially. -# It's going to rotate around itself, and that amounts to looking around. -# You'll probably want to set mouseInvert and keyboardInvert to true in that case. - -# License -# ------- -# Same as Godot, ie. permissive MIT. (https://godotengine.org/license) - -# If you feel generous and want to feed me so I can math more of those, -# I enjoy the taste of ETH Ξ 0xB48C3B718a1FF3a280f574Ad36F04068d7EAf498 -# You can blame antoine@goutenoir.com for the bugs, crashes and burns. -# Seriously, useful feedback is always appreciated – we can't test everything. - - - -export var mouseEnabled = true -export var mouseInvert = false -export var mouseStrength = 1.111 -export var keyboardEnabled = true -export var keyboardInvert = false -export var keyboardStrength = 1.111 -export var joystickEnabled = true -export var joystickInvert = false -export var joystickStrength = 1.111 -export var joystickThreshold = 0.09 # the resting state of my joystick's x-axis is -0.05 T.T -export var joystickDevice = 0 -export var inertiaStrength = 1.0 # multiplier applied to all strengths -export(float, 0, 1, 0.005) var friction = 0.07 - - - -var _iKnowWhatIAmDoing = false # should we skip assertions? -var _cameraUp = Vector3(0, 1, 0) -var _cameraRight = Vector3(1, 0, 0) -var _epsilon = 0.0001 -var _mouseDragStart -var _mouseDragPosition -var _dragInertia = Vector2(0, 0) - - -func _ready(): - set_process_input(true) - set_process(true) - - # It's best to catch future divisions by 0 before they happen. - # Note that we don't need this check if the mouse support is disabled. - # In case you know what you're doing, there's a property you can change. - assert _iKnowWhatIAmDoing or get_viewport().get_visible_rect().get_area() - #print("Trackball Camera around %s is ready. ♥" % get_parent().get_name()) - - -func _input(ev): - if mouseEnabled and ev is InputEventMouseButton: - if ev.pressed: - _mouseDragStart = getNormalizedMousePosition() - else: - _mouseDragStart = null - _mouseDragPosition = _mouseDragStart - - -func _process(delta): - if mouseEnabled and _mouseDragPosition != null: - var _currentDragPosition = getNormalizedMousePosition() - _dragInertia += (_currentDragPosition - _mouseDragPosition) \ - * mouseStrength * (-0.1 if mouseInvert else 0.1) - _mouseDragPosition = _currentDragPosition - - if keyboardEnabled: - var key_i = -1 if keyboardInvert else 1 - var key_s = keyboardStrength / 1000.0 # exported floats get truncated - if Input.is_key_pressed(KEY_LEFT): - _dragInertia += Vector2(key_i * key_s, 0) - if Input.is_key_pressed(KEY_RIGHT): - _dragInertia += Vector2(-1 * key_i * key_s, 0) - if Input.is_key_pressed(KEY_UP): - _dragInertia += Vector2(0, key_i * key_s) - if Input.is_key_pressed(KEY_DOWN): - _dragInertia += Vector2(0, -1 * key_i * key_s) - - if joystickEnabled: - var joy_h = Input.get_joy_axis(joystickDevice, 0) # left stick horizontal - var joy_v = Input.get_joy_axis(joystickDevice, 1) # left stick vertical - var joy_i = -1 if joystickInvert else 1 - var joy_s = joystickStrength / 1000.0 # exported floats get truncated - - if abs(joy_h) > joystickThreshold: - _dragInertia += Vector2(joy_i * joy_h * joy_h * sign(joy_h) * joy_s, 0) - if abs(joy_v) > joystickThreshold: - _dragInertia += Vector2(0, joy_i * joy_v * joy_v * sign(joy_v) * joy_s) - - var inertia = _dragInertia.length() - if inertia > _epsilon: - applyRotationFromTangent(_dragInertia * inertiaStrength) - _dragInertia = _dragInertia * (1 - friction) - elif inertia > 0: - _dragInertia.x = 0 - _dragInertia.y = 0 - - -# Convenience method for you to move the camera around. -# inertia is a Vector2 in the normalized right-handed x/y of the screen. -func addInertia(inertia): - _dragInertia += inertia - - -func getNormalizedMousePosition(): - return get_viewport().get_mouse_position() / get_viewport().get_visible_rect().size - - -func applyRotationFromTangent(tangent): - var tr = get_transform() # not get_camera_transform, unsure why - var up = tr.basis.xform(_cameraUp) - var rg = tr.basis.xform(_cameraRight) - var upQuat = Quat(up, -1 * tangent.x * TAU) - var rgQuat = Quat(rg, -1 * tangent.y * TAU) - set_transform(Transform(upQuat * rgQuat) * tr) # money shot! \ No newline at end of file diff --git a/addons/goutte.camera.trackball/trackball_camera_plugin.gd b/addons/goutte.camera.trackball/trackball_camera_plugin.gd deleted file mode 100644 index 3972a9d..0000000 --- a/addons/goutte.camera.trackball/trackball_camera_plugin.gd +++ /dev/null @@ -1,12 +0,0 @@ -tool -extends EditorPlugin - -func _enter_tree(): - add_custom_type( - "TrackballCamera", "Camera", - preload("res://addons/goutte.camera.trackball/trackball_camera.gd"), - preload("res://addons/goutte.camera.trackball/icon_trackball_camera.png") - ) - -func _exit_tree(): - remove_custom_type("TrackballCamera") \ No newline at end of file diff --git a/project.godot b/project.godot index 3b68b25..2a17e08 100644 --- a/project.godot +++ b/project.godot @@ -15,17 +15,31 @@ config/icon="res://icon.png" [editor_plugins] -enabled=PoolStringArray( "goutte.camera.trackball" ) +enabled=PoolStringArray( "alanscodelog.gimbalcontrol" ) [input] -player_up=[ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"unicode":0,"echo":false,"script":null) +move_up=[ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"unicode":0,"echo":false,"script":null) ] -player_down=[ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"unicode":0,"echo":false,"script":null) +move_down=[ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"unicode":0,"echo":false,"script":null) ] -player_left=[ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"unicode":0,"echo":false,"script":null) +move_left=[ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"unicode":0,"echo":false,"script":null) ] -player_right=[ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"unicode":0,"echo":false,"script":null) +move_right=[ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"unicode":0,"echo":false,"script":null) + ] +look_zoom_in=[ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":4,"pressed":false,"doubleclick":false,"script":null) + ] +look_zoom_out=[ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":5,"pressed":false,"doubleclick":false,"script":null) + ] +look_up=[ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"unicode":0,"echo":false,"script":null) + ] +look_right=[ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"unicode":0,"echo":false,"script":null) + ] +look_left=[ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"unicode":0,"echo":false,"script":null) + ] +look_down=[ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"unicode":0,"echo":false,"script":null) + ] +look_click=[ Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"button_mask":0,"position":Vector2( 0, 0 ),"global_position":Vector2( 0, 0 ),"factor":1.0,"button_index":1,"pressed":false,"doubleclick":false,"script":null) ] [rendering] diff --git a/scenes/Player.tscn b/scenes/Player.tscn index 8509be2..00f9812 100644 --- a/scenes/Player.tscn +++ b/scenes/Player.tscn @@ -5,14 +5,14 @@ [sub_resource type="CapsuleMesh" id=1] custom_aabb = AABB( 0, 0, 0, 0, 0, 0 ) -radius = 0.5 -mid_height = 1.0 -radial_segments = 12 +radius = 0.569 +mid_height = 0.828 +radial_segments = 64 rings = 8 [sub_resource type="ConvexPolygonShape" id=2] -points = PoolVector3Array( 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, -0.086792, 0.992188, 0.043396, -0.0751343, 0.992188, 0.0751343, -0.043396, 0.992188, 0.086792, 0, 0.992188, 0.0751343, 0.043396, 0.992188, 0.043396, 0.0751343, 0.992188, 0, 0.086792, 0.992188, -0.043396, 0.0751343, 0.992188, -0.0751343, 0.043396, 0.992188, -0.086792, 0, 0.992188, -0.0751343, -0.043396, 0.992188, -0.043396, -0.0751343, 0.992188, 0, -0.086792, 0.992188, 0, -0.170898, 0.969727, 0.0854492, -0.148071, 0.969727, 0.148071, -0.0854492, 0.969727, 0.170898, 0, 0.969727, 0.148071, 0.0854492, 0.969727, 0.0854492, 0.148071, 0.969727, 0, 0.170898, 0.969727, -0.0854492, 0.148071, 0.969727, -0.148071, 0.0854492, 0.969727, -0.170898, 0, 0.969727, -0.148071, -0.0854492, 0.969727, -0.0854492, -0.148071, 0.969727, 0, -0.170898, 0.969727, 0, -0.25, 0.932617, 0.125, -0.216431, 0.932617, 0.216431, -0.124939, 0.932617, 0.25, 0, 0.932617, 0.216431, 0.125, 0.932617, 0.125, 0.216431, 0.932617, 0, 0.25, 0.932617, -0.124939, 0.216431, 0.932617, -0.216431, 0.124939, 0.932617, -0.25, 0, 0.932617, -0.216431, -0.124939, 0.932617, -0.124939, -0.216431, 0.932617, 0, -0.25, 0.932617, 0, -0.321289, 0.882812, 0.160645, -0.27832, 0.882812, 0.27832, -0.160645, 0.882812, 0.321289, 0, 0.882812, 0.27832, 0.160645, 0.882812, 0.160645, 0.27832, 0.882812, 0, 0.321289, 0.882812, -0.160645, 0.27832, 0.882812, -0.27832, 0.160645, 0.882812, -0.321289, 0, 0.882812, -0.27832, -0.160645, 0.882812, -0.160645, -0.27832, 0.882812, 0, -0.321289, 0.882812, 0, -0.382812, 0.821289, 0.191406, -0.331543, 0.821289, 0.331543, -0.191406, 0.821289, 0.382812, 0, 0.821289, 0.331543, 0.191406, 0.821289, 0.191406, 0.331543, 0.821289, 0, 0.382812, 0.821289, -0.191406, 0.331543, 0.821289, -0.331543, 0.191406, 0.821289, -0.382812, 0, 0.821289, -0.331543, -0.191406, 0.821289, -0.191406, -0.331543, 0.821289, 0, -0.382812, 0.821289, 0, -0.432861, 0.75, 0.216431, -0.375, 0.75, 0.375, -0.216431, 0.75, 0.432861, 0, 0.75, 0.375, 0.216431, 0.75, 0.216431, 0.375, 0.75, 0, 0.432861, 0.75, -0.216431, 0.375, 0.75, -0.375, 0.216431, 0.75, -0.432861, 0, 0.75, -0.375, -0.216431, 0.75, -0.216431, -0.375, 0.75, 0, -0.432861, 0.75, 0, -0.469727, 0.670898, 0.234863, -0.406738, 0.670898, 0.406738, -0.234863, 0.670898, 0.469727, 0, 0.670898, 0.406738, 0.234863, 0.670898, 0.234863, 0.406738, 0.670898, 0, 0.469727, 0.670898, -0.234863, 0.406738, 0.670898, -0.406738, 0.234863, 0.670898, -0.469727, 0, 0.670898, -0.406738, -0.234863, 0.670898, -0.234863, -0.406738, 0.670898, 0, -0.469727, 0.670898, 0, -0.492188, 0.586426, 0.246094, -0.42627, 0.586426, 0.42627, -0.246094, 0.586426, 0.492188, 0, 0.586426, 0.42627, 0.246094, 0.586426, 0.246094, 0.42627, 0.586426, 0, 0.492188, 0.586426, -0.246094, 0.42627, 0.586426, -0.42627, 0.246094, 0.586426, -0.492188, 0, 0.586426, -0.42627, -0.246094, 0.586426, -0.246094, -0.42627, 0.586426, 0, -0.492188, 0.586426, 0, -0.5, 0.5, 0.25, -0.432861, 0.5, 0.432861, -0.249878, 0.5, 0.5, 0, 0.5, 0.432861, 0.25, 0.5, 0.25, 0.432861, 0.5, 0, 0.5, 0.5, -0.249878, 0.432861, 0.5, -0.432861, 0.249878, 0.5, -0.5, 0, 0.5, -0.432861, -0.249878, 0.5, -0.249878, -0.432861, 0.5, 0, -0.5, 0.5, 0, -0.5, 0.5, 0.25, -0.432861, 0.5, 0.432861, -0.249878, 0.5, 0.5, 0, 0.5, 0.432861, 0.25, 0.5, 0.25, 0.432861, 0.5, 0, 0.5, 0.5, -0.249878, 0.432861, 0.5, -0.432861, 0.249878, 0.5, -0.5, 0, 0.5, -0.432861, -0.249878, 0.5, -0.249878, -0.432861, 0.5, 0, -0.5, 0.5, 0, -0.5, 0.388672, 0.25, -0.432861, 0.388672, 0.432861, -0.249878, 0.388672, 0.5, 0, 0.388672, 0.432861, 0.25, 0.388672, 0.25, 0.432861, 0.388672, 0, 0.5, 0.388672, -0.249878, 0.432861, 0.388672, -0.432861, 0.249878, 0.388672, -0.5, 0, 0.388672, -0.432861, -0.249878, 0.388672, -0.249878, -0.432861, 0.388672, 0, -0.5, 0.388672, 0, -0.5, 0.277588, 0.25, -0.432861, 0.277588, 0.432861, -0.249878, 0.277588, 0.5, 0, 0.277588, 0.432861, 0.25, 0.277588, 0.25, 0.432861, 0.277588, 0, 0.5, 0.277588, -0.249878, 0.432861, 0.277588, -0.432861, 0.249878, 0.277588, -0.5, 0, 0.277588, -0.432861, -0.249878, 0.277588, -0.249878, -0.432861, 0.277588, 0, -0.5, 0.277588, 0, -0.5, 0.166626, 0.25, -0.432861, 0.166626, 0.432861, -0.249878, 0.166626, 0.5, 0, 0.166626, 0.432861, 0.25, 0.166626, 0.25, 0.432861, 0.166626, 0, 0.5, 0.166626, -0.249878, 0.432861, 0.166626, -0.432861, 0.249878, 0.166626, -0.5, 0, 0.166626, -0.432861, -0.249878, 0.166626, -0.249878, -0.432861, 0.166626, 0, -0.5, 0.166626, 0, -0.5, 0.055542, 0.25, -0.432861, 0.055542, 0.432861, -0.249878, 0.055542, 0.5, 0, 0.055542, 0.432861, 0.25, 0.055542, 0.25, 0.432861, 0.055542, 0, 0.5, 0.055542, -0.249878, 0.432861, 0.055542, -0.432861, 0.249878, 0.055542, -0.5, 0, 0.055542, -0.432861, -0.249878, 0.055542, -0.249878, -0.432861, 0.055542, 0, -0.5, 0.055542, 0, -0.5, -0.055542, 0.25, -0.432861, -0.055542, 0.432861, -0.249878, -0.055542, 0.5, 0, -0.055542, 0.432861, 0.25, -0.055542, 0.25, 0.432861, -0.055542, 0, 0.5, -0.055542, -0.249878, 0.432861, -0.055542, -0.432861, 0.249878, -0.055542, -0.5, 0, -0.055542, -0.432861, -0.249878, -0.055542, -0.249878, -0.432861, -0.055542, 0, -0.5, -0.055542, 0, -0.5, -0.166626, 0.25, -0.432861, -0.166626, 0.432861, -0.249878, -0.166626, 0.5, 0, -0.166626, 0.432861, 0.25, -0.166626, 0.25, 0.432861, -0.166626, 0, 0.5, -0.166626, -0.249878, 0.432861, -0.166626, -0.432861, 0.249878, -0.166626, -0.5, 0, -0.166626, -0.432861, -0.249878, -0.166626, -0.249878, -0.432861, -0.166626, 0, -0.5, -0.166626, 0, -0.5, -0.277588, 0.25, -0.432861, -0.277588, 0.432861, -0.249878, -0.277588, 0.5, 0, -0.277588, 0.432861, 0.25, -0.277588, 0.25, 0.432861, -0.277588, 0, 0.5, -0.277588, -0.249878, 0.432861, -0.277588, -0.432861, 0.249878, -0.277588, -0.5, 0, -0.277588, -0.432861, -0.249878, -0.277588, -0.249878, -0.432861, -0.277588, 0, -0.5, -0.277588, 0, -0.5, -0.388672, 0.25, -0.432861, -0.388672, 0.432861, -0.249878, -0.388672, 0.5, 0, -0.388672, 0.432861, 0.25, -0.388672, 0.25, 0.432861, -0.388672, 0, 0.5, -0.388672, -0.249878, 0.432861, -0.388672, -0.432861, 0.249878, -0.388672, -0.5, 0, -0.388672, -0.432861, -0.249878, -0.388672, -0.249878, -0.432861, -0.388672, 0, -0.5, -0.388672, 0, -0.5, -0.5, 0.25, -0.432861, -0.5, 0.432861, -0.249878, -0.5, 0.5, 0, -0.5, 0.432861, 0.25, -0.5, 0.25, 0.432861, -0.5, 0, 0.5, -0.5, -0.249878, 0.432861, -0.5, -0.432861, 0.249878, -0.5, -0.5, 0, -0.5, -0.432861, -0.249878, -0.5, -0.249878, -0.432861, -0.5, 0, -0.5, -0.5, 0, -0.5, -0.5, 0.25, -0.432861, -0.5, 0.432861, -0.249878, -0.5, 0.5, 0, -0.5, 0.432861, 0.25, -0.5, 0.25, 0.432861, -0.5, 0, 0.5, -0.5, -0.249878, 0.432861, -0.5, -0.432861, 0.249878, -0.5, -0.5, 0, -0.5, -0.432861, -0.249878, -0.5, -0.249878, -0.432861, -0.5, 0, -0.5, -0.5, 0, -0.492188, -0.586426, 0.246094, -0.42627, -0.586426, 0.42627, -0.246094, -0.586426, 0.492188, 0, -0.586426, 0.42627, 0.246094, -0.586426, 0.246094, 0.42627, -0.586426, 0, 0.492188, -0.586426, -0.246094, 0.42627, -0.586426, -0.42627, 0.246094, -0.586426, -0.492188, 0, -0.586426, -0.42627, -0.246094, -0.586426, -0.246094, -0.42627, -0.586426, 0, -0.492188, -0.586426, 0, -0.469727, -0.670898, 0.234863, -0.406738, -0.670898, 0.406738, -0.234863, -0.670898, 0.469727, 0, -0.670898, 0.406738, 0.234863, -0.670898, 0.234863, 0.406738, -0.670898, 0, 0.469727, -0.670898, -0.234863, 0.406738, -0.670898, -0.406738, 0.234863, -0.670898, -0.469727, 0, -0.670898, -0.406738, -0.234863, -0.670898, -0.234863, -0.406738, -0.670898, 0, -0.469727, -0.670898, 0, -0.432861, -0.75, 0.216431, -0.375, -0.75, 0.375, -0.216431, -0.75, 0.432861, 0, -0.75, 0.375, 0.216431, -0.75, 0.216431, 0.375, -0.75, 0, 0.432861, -0.75, -0.216431, 0.375, -0.75, -0.375, 0.216431, -0.75, -0.432861, 0, -0.75, -0.375, -0.216431, -0.75, -0.216431, -0.375, -0.75, 0, -0.432861, -0.75, 0, -0.382812, -0.821289, 0.191406, -0.331543, -0.821289, 0.331543, -0.191406, -0.821289, 0.382812, 0, -0.821289, 0.331543, 0.191406, -0.821289, 0.191406, 0.331543, -0.821289, 0, 0.382812, -0.821289, -0.191406, 0.331543, -0.821289, -0.331543, 0.191406, -0.821289, -0.382812, 0, -0.821289, -0.331543, -0.191406, -0.821289, -0.191406, -0.331543, -0.821289, 0, -0.382812, -0.821289, 0, -0.321289, -0.882812, 0.160645, -0.27832, -0.882812, 0.27832, -0.160645, -0.882812, 0.321289, 0, -0.882812, 0.27832, 0.160645, -0.882812, 0.160645, 0.27832, -0.882812, 0, 0.321289, -0.882812, -0.160645, 0.27832, -0.882812, -0.27832, 0.160645, -0.882812, -0.321289, 0, -0.882812, -0.27832, -0.160645, -0.882812, -0.160645, -0.27832, -0.882812, 0, -0.321289, -0.882812, 0, -0.249878, -0.932617, 0.124939, -0.216431, -0.932617, 0.216431, -0.124939, -0.932617, 0.249878, 0, -0.932617, 0.216431, 0.124939, -0.932617, 0.124939, 0.216431, -0.932617, 0, 0.249878, -0.932617, -0.124939, 0.216431, -0.932617, -0.216431, 0.124939, -0.932617, -0.249878, 0, -0.932617, -0.216431, -0.124939, -0.932617, -0.124939, -0.216431, -0.932617, 0, -0.249878, -0.932617, 0, -0.170898, -0.969727, 0.0854492, -0.148071, -0.969727, 0.148071, -0.0854492, -0.969727, 0.170898, 0, -0.969727, 0.148071, 0.0854492, -0.969727, 0.0854492, 0.148071, -0.969727, 0, 0.170898, -0.969727, -0.0854492, 0.148071, -0.969727, -0.148071, 0.0854492, -0.969727, -0.170898, 0, -0.969727, -0.148071, -0.0854492, -0.969727, -0.0854492, -0.148071, -0.969727, 0, -0.170898, -0.969727, 0, -0.086792, -0.992188, 0.043396, -0.0751343, -0.992188, 0.0751343, -0.043396, -0.992188, 0.086792, 0, -0.992188, 0.0751343, 0.043396, -0.992188, 0.043396, 0.0751343, -0.992188, 0, 0.086792, -0.992188, -0.043396, 0.0751343, -0.992188, -0.0751343, 0.043396, -0.992188, -0.086792, 0, -0.992188, -0.0751343, -0.043396, -0.992188, -0.043396, -0.0751343, -0.992188, 0, -0.086792, -0.992188, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1, 0, 0, -1 ) +points = PoolVector3Array( 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, 0, 0.98291, 0, -0.0987549, 0.974121, 0.0096817, -0.0983276, 0.974121, 0.0192719, -0.0968628, 0.974121, 0.0286713, -0.0945435, 0.974121, 0.0378113, -0.0912476, 0.974121, 0.0465698, -0.0870972, 0.974121, 0.0548706, -0.0821533, 0.974121, 0.0626221, -0.076355, 0.974121, 0.0698242, -0.0698242, 0.974121, 0.076355, -0.0626221, 0.974121, 0.0821533, -0.0548706, 0.974121, 0.0870972, -0.0465698, 0.974121, 0.0912476, -0.0378113, 0.974121, 0.0945435, -0.0286713, 0.974121, 0.0968628, -0.0192719, 0.974121, 0.0983276, -0.0096817, 0.974121, 0.0987549, 0, 0.974121, 0.0983276, 0.0096817, 0.974121, 0.0968628, 0.0192719, 0.974121, 0.0945435, 0.0286713, 0.974121, 0.0912476, 0.0378113, 0.974121, 0.0870972, 0.0465698, 0.974121, 0.0821533, 0.0548706, 0.974121, 0.076355, 0.0626221, 0.974121, 0.0698242, 0.0698242, 0.974121, 0.0626221, 0.076355, 0.974121, 0.0548706, 0.0821533, 0.974121, 0.0465698, 0.0870972, 0.974121, 0.0378113, 0.0912476, 0.974121, 0.0286713, 0.0945435, 0.974121, 0.0192719, 0.0968628, 0.974121, 0.0096817, 0.0983276, 0.974121, 0, 0.0987549, 0.974121, -0.0096817, 0.0983276, 0.974121, -0.0192719, 0.0968628, 0.974121, -0.0286713, 0.0945435, 0.974121, -0.0378113, 0.0912476, 0.974121, -0.0465698, 0.0870972, 0.974121, -0.0548706, 0.0821533, 0.974121, -0.0626221, 0.076355, 0.974121, -0.0698242, 0.0698242, 0.974121, -0.076355, 0.0626221, 0.974121, -0.0821533, 0.0548706, 0.974121, -0.0870972, 0.0465698, 0.974121, -0.0912476, 0.0378113, 0.974121, -0.0945435, 0.0286713, 0.974121, -0.0968628, 0.0192719, 0.974121, -0.0983276, 0.0096817, 0.974121, -0.0987549, 0, 0.974121, -0.0983276, -0.0096817, 0.974121, -0.0968628, -0.0192719, 0.974121, -0.0945435, -0.0286713, 0.974121, -0.0912476, -0.0378113, 0.974121, -0.0870972, -0.0465698, 0.974121, -0.0821533, -0.0548706, 0.974121, -0.076355, -0.0626221, 0.974121, -0.0698242, -0.0698242, 0.974121, -0.0626221, -0.076355, 0.974121, -0.0548706, -0.0821533, 0.974121, -0.0465698, -0.0870972, 0.974121, -0.0378113, -0.0912476, 0.974121, -0.0286713, -0.0945435, 0.974121, -0.0192719, -0.0968628, 0.974121, -0.0096817, -0.0983276, 0.974121, 0, -0.0987549, 0.974121, 0, -0.19458, 0.948242, 0.0190735, -0.193604, 0.948242, 0.0379639, -0.190796, 0.948242, 0.056488, -0.186157, 0.948242, 0.0744629, -0.179688, 0.948242, 0.0917358, -0.171509, 0.948242, 0.108093, -0.161743, 0.948242, 0.123413, -0.150391, 0.948242, 0.137573, -0.137573, 0.948242, 0.150391, -0.123413, 0.948242, 0.161743, -0.108093, 0.948242, 0.171509, -0.0917358, 0.948242, 0.179688, -0.0744629, 0.948242, 0.186157, -0.056488, 0.948242, 0.190796, -0.0379639, 0.948242, 0.193604, -0.0190735, 0.948242, 0.19458, 0, 0.948242, 0.193604, 0.0190735, 0.948242, 0.190796, 0.0379639, 0.948242, 0.186157, 0.056488, 0.948242, 0.179688, 0.0744629, 0.948242, 0.171509, 0.0917358, 0.948242, 0.161743, 0.108093, 0.948242, 0.150391, 0.123413, 0.948242, 0.137573, 0.137573, 0.948242, 0.123413, 0.150391, 0.948242, 0.108093, 0.161743, 0.948242, 0.0917358, 0.171509, 0.948242, 0.0744629, 0.179688, 0.948242, 0.056488, 0.186157, 0.948242, 0.0379639, 0.190796, 0.948242, 0.0190735, 0.193604, 0.948242, 0, 0.19458, 0.948242, -0.0190735, 0.193604, 0.948242, -0.0379639, 0.190796, 0.948242, -0.056488, 0.186157, 0.948242, -0.0744629, 0.179688, 0.948242, -0.0917358, 0.171509, 0.948242, -0.108093, 0.161743, 0.948242, -0.123413, 0.150391, 0.948242, -0.137573, 0.137573, 0.948242, -0.150391, 0.123413, 0.948242, -0.161743, 0.108093, 0.948242, -0.171509, 0.0917358, 0.948242, -0.179688, 0.0744629, 0.948242, -0.186157, 0.056488, 0.948242, -0.190796, 0.0379639, 0.948242, -0.193604, 0.0190735, 0.948242, -0.19458, 0, 0.948242, -0.193604, -0.0190735, 0.948242, -0.190796, -0.0379639, 0.948242, -0.186157, -0.056488, 0.948242, -0.179688, -0.0744629, 0.948242, -0.171509, -0.0917358, 0.948242, -0.161743, -0.108093, 0.948242, -0.150391, -0.123413, 0.948242, -0.137573, -0.137573, 0.948242, -0.123413, -0.150391, 0.948242, -0.108093, -0.161743, 0.948242, -0.0917358, -0.171509, 0.948242, -0.0744629, -0.179688, 0.948242, -0.056488, -0.186157, 0.948242, -0.0379639, -0.190796, 0.948242, -0.0190735, -0.193604, 0.948242, 0, -0.19458, 0.948242, 0, -0.284424, 0.906738, 0.0278778, -0.282959, 0.906738, 0.055481, -0.278809, 0.906738, 0.0825806, -0.272217, 0.906738, 0.108826, -0.262695, 0.906738, 0.134033, -0.250732, 0.906738, 0.157959, -0.23645, 0.906738, 0.18042, -0.219849, 0.906738, 0.201172, -0.201172, 0.906738, 0.219849, -0.18042, 0.906738, 0.23645, -0.157959, 0.906738, 0.250732, -0.134033, 0.906738, 0.262695, -0.108826, 0.906738, 0.272217, -0.0825806, 0.906738, 0.278809, -0.055481, 0.906738, 0.282959, -0.0278778, 0.906738, 0.284424, 0, 0.906738, 0.282959, 0.0278778, 0.906738, 0.278809, 0.055481, 0.906738, 0.272217, 0.0825806, 0.906738, 0.262695, 0.108826, 0.906738, 0.250732, 0.134033, 0.906738, 0.23645, 0.157959, 0.906738, 0.219849, 0.18042, 0.906738, 0.201172, 0.201172, 0.906738, 0.18042, 0.219849, 0.906738, 0.157959, 0.23645, 0.906738, 0.134033, 0.250732, 0.906738, 0.108826, 0.262695, 0.906738, 0.0825806, 0.272217, 0.906738, 0.055481, 0.278809, 0.906738, 0.0278778, 0.282959, 0.906738, 0, 0.284424, 0.906738, -0.0278778, 0.282959, 0.906738, -0.055481, 0.278809, 0.906738, -0.0825806, 0.272217, 0.906738, -0.108826, 0.262695, 0.906738, -0.134033, 0.250732, 0.906738, -0.157959, 0.23645, 0.906738, -0.18042, 0.219849, 0.906738, -0.201172, 0.201172, 0.906738, -0.219849, 0.18042, 0.906738, -0.23645, 0.157959, 0.906738, -0.250732, 0.134033, 0.906738, -0.262695, 0.108826, 0.906738, -0.272217, 0.0825806, 0.906738, -0.278809, 0.055481, 0.906738, -0.282959, 0.0278778, 0.906738, -0.284424, 0, 0.906738, -0.282959, -0.0278778, 0.906738, -0.278809, -0.055481, 0.906738, -0.272217, -0.0825806, 0.906738, -0.262695, -0.108826, 0.906738, -0.250732, -0.134033, 0.906738, -0.23645, -0.157959, 0.906738, -0.219849, -0.18042, 0.906738, -0.201172, -0.201172, 0.906738, -0.18042, -0.219849, 0.906738, -0.157959, -0.23645, 0.906738, -0.134033, -0.250732, 0.906738, -0.108826, -0.262695, 0.906738, -0.0825806, -0.272217, 0.906738, -0.055481, -0.278809, 0.906738, -0.0278778, -0.282959, 0.906738, 0, -0.284424, 0.906738, 0, -0.365723, 0.849609, 0.0358276, -0.36377, 0.849609, 0.0713501, -0.358643, 0.849609, 0.10614, -0.349854, 0.849609, 0.139893, -0.337891, 0.849609, 0.172363, -0.32251, 0.849609, 0.203125, -0.303955, 0.849609, 0.231934, -0.282715, 0.849609, 0.258545, -0.258545, 0.849609, 0.282715, -0.231934, 0.849609, 0.303955, -0.203125, 0.849609, 0.32251, -0.172363, 0.849609, 0.337891, -0.139893, 0.849609, 0.349854, -0.10614, 0.849609, 0.358643, -0.0713501, 0.849609, 0.36377, -0.0358276, 0.849609, 0.365723, 0, 0.849609, 0.36377, 0.0358276, 0.849609, 0.358643, 0.0713501, 0.849609, 0.349854, 0.10614, 0.849609, 0.337891, 0.139893, 0.849609, 0.32251, 0.172363, 0.849609, 0.303955, 0.203125, 0.849609, 0.282715, 0.231934, 0.849609, 0.258545, 0.258545, 0.849609, 0.231934, 0.282715, 0.849609, 0.203125, 0.303955, 0.849609, 0.172363, 0.32251, 0.849609, 0.139893, 0.337891, 0.849609, 0.10614, 0.349854, 0.849609, 0.0713501, 0.358643, 0.849609, 0.0358276, 0.36377, 0.849609, 0, 0.365723, 0.849609, -0.0358276, 0.36377, 0.849609, -0.0713501, 0.358643, 0.849609, -0.10614, 0.349854, 0.849609, -0.139893, 0.337891, 0.849609, -0.172363, 0.32251, 0.849609, -0.203125, 0.303955, 0.849609, -0.231934, 0.282715, 0.849609, -0.258545, 0.258545, 0.849609, -0.282715, 0.231934, 0.849609, -0.303955, 0.203125, 0.849609, -0.32251, 0.172363, 0.849609, -0.337891, 0.139893, 0.849609, -0.349854, 0.10614, 0.849609, -0.358643, 0.0713501, 0.849609, -0.36377, 0.0358276, 0.849609, -0.365723, 0, 0.849609, -0.36377, -0.0358276, 0.849609, -0.358643, -0.0713501, 0.849609, -0.349854, -0.10614, 0.849609, -0.337891, -0.139893, 0.849609, -0.32251, -0.172363, 0.849609, -0.303955, -0.203125, 0.849609, -0.282715, -0.231934, 0.849609, -0.258545, -0.258545, 0.849609, -0.231934, -0.282715, 0.849609, -0.203125, -0.303955, 0.849609, -0.172363, -0.32251, 0.849609, -0.139893, -0.337891, 0.849609, -0.10614, -0.349854, 0.849609, -0.0713501, -0.358643, 0.849609, -0.0358276, -0.36377, 0.849609, 0, -0.365723, 0.849609, 0, -0.435791, 0.779297, 0.0426941, -0.433594, 0.779297, 0.085022, -0.42749, 0.779297, 0.126465, -0.416992, 0.779297, 0.166748, -0.402588, 0.779297, 0.205444, -0.384277, 0.779297, 0.242065, -0.362305, 0.779297, 0.276367, -0.336914, 0.779297, 0.308105, -0.308105, 0.779297, 0.336914, -0.276367, 0.779297, 0.362305, -0.242065, 0.779297, 0.384277, -0.205444, 0.779297, 0.402588, -0.166748, 0.779297, 0.416992, -0.126465, 0.779297, 0.42749, -0.085022, 0.779297, 0.433594, -0.0426941, 0.779297, 0.435791, 0, 0.779297, 0.433594, 0.0426941, 0.779297, 0.42749, 0.085022, 0.779297, 0.416992, 0.126465, 0.779297, 0.402588, 0.166748, 0.779297, 0.384277, 0.205444, 0.779297, 0.362305, 0.242065, 0.779297, 0.336914, 0.276367, 0.779297, 0.308105, 0.308105, 0.779297, 0.276367, 0.336914, 0.779297, 0.242065, 0.362305, 0.779297, 0.205444, 0.384277, 0.779297, 0.166748, 0.402588, 0.779297, 0.126465, 0.416992, 0.779297, 0.085022, 0.42749, 0.779297, 0.0426941, 0.433594, 0.779297, 0, 0.435791, 0.779297, -0.0426941, 0.433594, 0.779297, -0.085022, 0.42749, 0.779297, -0.126465, 0.416992, 0.779297, -0.166748, 0.402588, 0.779297, -0.205444, 0.384277, 0.779297, -0.242065, 0.362305, 0.779297, -0.276367, 0.336914, 0.779297, -0.308105, 0.308105, 0.779297, -0.336914, 0.276367, 0.779297, -0.362305, 0.242065, 0.779297, -0.384277, 0.205444, 0.779297, -0.402588, 0.166748, 0.779297, -0.416992, 0.126465, 0.779297, -0.42749, 0.085022, 0.779297, -0.433594, 0.0426941, 0.779297, -0.435791, 0, 0.779297, -0.433594, -0.0426941, 0.779297, -0.42749, -0.085022, 0.779297, -0.416992, -0.126465, 0.779297, -0.402588, -0.166748, 0.779297, -0.384277, -0.205444, 0.779297, -0.362305, -0.242065, 0.779297, -0.336914, -0.276367, 0.779297, -0.308105, -0.308105, 0.779297, -0.276367, -0.336914, 0.779297, -0.242065, -0.362305, 0.779297, -0.205444, -0.384277, 0.779297, -0.166748, -0.402588, 0.779297, -0.126465, -0.416992, 0.779297, -0.085022, -0.42749, 0.779297, -0.0426941, -0.433594, 0.779297, 0, -0.435791, 0.779297, 0, -0.492676, 0.698242, 0.0482788, -0.490234, 0.698242, 0.0961304, -0.483154, 0.698242, 0.142944, -0.471436, 0.698242, 0.188477, -0.455078, 0.698242, 0.232178, -0.43457, 0.698242, 0.273682, -0.409668, 0.698242, 0.3125, -0.380859, 0.698242, 0.348389, -0.348389, 0.698242, 0.380859, -0.3125, 0.698242, 0.409668, -0.273682, 0.698242, 0.43457, -0.232178, 0.698242, 0.455078, -0.188477, 0.698242, 0.471436, -0.142944, 0.698242, 0.483154, -0.0961304, 0.698242, 0.490234, -0.0482788, 0.698242, 0.492676, 0, 0.698242, 0.490234, 0.0482788, 0.698242, 0.483154, 0.0961304, 0.698242, 0.471436, 0.142944, 0.698242, 0.455078, 0.188477, 0.698242, 0.43457, 0.232178, 0.698242, 0.409668, 0.273682, 0.698242, 0.380859, 0.3125, 0.698242, 0.348389, 0.348389, 0.698242, 0.3125, 0.380859, 0.698242, 0.273682, 0.409668, 0.698242, 0.232178, 0.43457, 0.698242, 0.188477, 0.455078, 0.698242, 0.142944, 0.471436, 0.698242, 0.0961304, 0.483154, 0.698242, 0.0482788, 0.490234, 0.698242, 0, 0.492676, 0.698242, -0.0482788, 0.490234, 0.698242, -0.0961304, 0.483154, 0.698242, -0.142944, 0.471436, 0.698242, -0.188477, 0.455078, 0.698242, -0.232178, 0.43457, 0.698242, -0.273682, 0.409668, 0.698242, -0.3125, 0.380859, 0.698242, -0.348389, 0.348389, 0.698242, -0.380859, 0.3125, 0.698242, -0.409668, 0.273682, 0.698242, -0.43457, 0.232178, 0.698242, -0.455078, 0.188477, 0.698242, -0.471436, 0.142944, 0.698242, -0.483154, 0.0961304, 0.698242, -0.490234, 0.0482788, 0.698242, -0.492676, 0, 0.698242, -0.490234, -0.0482788, 0.698242, -0.483154, -0.0961304, 0.698242, -0.471436, -0.142944, 0.698242, -0.455078, -0.188477, 0.698242, -0.43457, -0.232178, 0.698242, -0.409668, -0.273682, 0.698242, -0.380859, -0.3125, 0.698242, -0.348389, -0.348389, 0.698242, -0.3125, -0.380859, 0.698242, -0.273682, -0.409668, 0.698242, -0.232178, -0.43457, 0.698242, -0.188477, -0.455078, 0.698242, -0.142944, -0.471436, 0.698242, -0.0961304, -0.483154, 0.698242, -0.0482788, -0.490234, 0.698242, 0, -0.492676, 0.698242, 0, -0.534668, 0.608398, 0.0523987, -0.531738, 0.608398, 0.104309, -0.523926, 0.608398, 0.155151, -0.51123, 0.608398, 0.20459, -0.493896, 0.608398, 0.251953, -0.471436, 0.608398, 0.296875, -0.444336, 0.608398, 0.339111, -0.413086, 0.608398, 0.37793, -0.37793, 0.608398, 0.413086, -0.339111, 0.608398, 0.444336, -0.296875, 0.608398, 0.471436, -0.251953, 0.608398, 0.493896, -0.20459, 0.608398, 0.51123, -0.155151, 0.608398, 0.523926, -0.104309, 0.608398, 0.531738, -0.0523987, 0.608398, 0.534668, 0, 0.608398, 0.531738, 0.0523987, 0.608398, 0.523926, 0.104309, 0.608398, 0.51123, 0.155151, 0.608398, 0.493896, 0.20459, 0.608398, 0.471436, 0.251953, 0.608398, 0.444336, 0.296875, 0.608398, 0.413086, 0.339111, 0.608398, 0.37793, 0.37793, 0.608398, 0.339111, 0.413086, 0.608398, 0.296875, 0.444336, 0.608398, 0.251953, 0.471436, 0.608398, 0.20459, 0.493896, 0.608398, 0.155151, 0.51123, 0.608398, 0.104309, 0.523926, 0.608398, 0.0523987, 0.531738, 0.608398, 0, 0.534668, 0.608398, -0.0523987, 0.531738, 0.608398, -0.104309, 0.523926, 0.608398, -0.155151, 0.51123, 0.608398, -0.20459, 0.493896, 0.608398, -0.251953, 0.471436, 0.608398, -0.296875, 0.444336, 0.608398, -0.339111, 0.413086, 0.608398, -0.37793, 0.37793, 0.608398, -0.413086, 0.339111, 0.608398, -0.444336, 0.296875, 0.608398, -0.471436, 0.251953, 0.608398, -0.493896, 0.20459, 0.608398, -0.51123, 0.155151, 0.608398, -0.523926, 0.104309, 0.608398, -0.531738, 0.0523987, 0.608398, -0.534668, 0, 0.608398, -0.531738, -0.0523987, 0.608398, -0.523926, -0.104309, 0.608398, -0.51123, -0.155151, 0.608398, -0.493896, -0.20459, 0.608398, -0.471436, -0.251953, 0.608398, -0.444336, -0.296875, 0.608398, -0.413086, -0.339111, 0.608398, -0.37793, -0.37793, 0.608398, -0.339111, -0.413086, 0.608398, -0.296875, -0.444336, 0.608398, -0.251953, -0.471436, 0.608398, -0.20459, -0.493896, 0.608398, -0.155151, -0.51123, 0.608398, -0.104309, -0.523926, 0.608398, -0.0523987, -0.531738, 0.608398, 0, -0.534668, 0.608398, 0, -0.560059, 0.512695, 0.0549011, -0.557617, 0.512695, 0.109314, -0.549316, 0.512695, 0.162598, -0.536133, 0.512695, 0.214355, -0.517578, 0.512695, 0.263916, -0.494141, 0.512695, 0.311279, -0.46582, 0.512695, 0.355469, -0.433105, 0.512695, 0.395996, -0.395996, 0.512695, 0.433105, -0.355469, 0.512695, 0.46582, -0.311279, 0.512695, 0.494141, -0.263916, 0.512695, 0.517578, -0.214355, 0.512695, 0.536133, -0.162598, 0.512695, 0.549316, -0.109314, 0.512695, 0.557617, -0.0549011, 0.512695, 0.560059, 0, 0.512695, 0.557617, 0.0549011, 0.512695, 0.549316, 0.109314, 0.512695, 0.536133, 0.162598, 0.512695, 0.517578, 0.214355, 0.512695, 0.494141, 0.263916, 0.512695, 0.46582, 0.311279, 0.512695, 0.433105, 0.355469, 0.512695, 0.395996, 0.395996, 0.512695, 0.355469, 0.433105, 0.512695, 0.311279, 0.46582, 0.512695, 0.263916, 0.494141, 0.512695, 0.214355, 0.517578, 0.512695, 0.162598, 0.536133, 0.512695, 0.109314, 0.549316, 0.512695, 0.0549011, 0.557617, 0.512695, 0, 0.560059, 0.512695, -0.0549011, 0.557617, 0.512695, -0.109314, 0.549316, 0.512695, -0.162598, 0.536133, 0.512695, -0.214355, 0.517578, 0.512695, -0.263916, 0.494141, 0.512695, -0.311279, 0.46582, 0.512695, -0.355469, 0.433105, 0.512695, -0.395996, 0.395996, 0.512695, -0.433105, 0.355469, 0.512695, -0.46582, 0.311279, 0.512695, -0.494141, 0.263916, 0.512695, -0.517578, 0.214355, 0.512695, -0.536133, 0.162598, 0.512695, -0.549316, 0.109314, 0.512695, -0.557617, 0.0549011, 0.512695, -0.560059, 0, 0.512695, -0.557617, -0.0549011, 0.512695, -0.549316, -0.109314, 0.512695, -0.536133, -0.162598, 0.512695, -0.517578, -0.214355, 0.512695, -0.494141, -0.263916, 0.512695, -0.46582, -0.311279, 0.512695, -0.433105, -0.355469, 0.512695, -0.395996, -0.395996, 0.512695, -0.355469, -0.433105, 0.512695, -0.311279, -0.46582, 0.512695, -0.263916, -0.494141, 0.512695, -0.214355, -0.517578, 0.512695, -0.162598, -0.536133, 0.512695, -0.109314, -0.549316, 0.512695, -0.0549011, -0.557617, 0.512695, 0, -0.560059, 0.512695, 0, -0.568848, 0.413818, 0.0557556, -0.565918, 0.413818, 0.110962, -0.557617, 0.413818, 0.165161, -0.544434, 0.413818, 0.217651, -0.525391, 0.413818, 0.268066, -0.501465, 0.413818, 0.315918, -0.4729, 0.413818, 0.36084, -0.439697, 0.413818, 0.402344, -0.402344, 0.413818, 0.439697, -0.36084, 0.413818, 0.4729, -0.315918, 0.413818, 0.501465, -0.268066, 0.413818, 0.525391, -0.217651, 0.413818, 0.544434, -0.165161, 0.413818, 0.557617, -0.110962, 0.413818, 0.565918, -0.0557556, 0.413818, 0.568848, 0, 0.413818, 0.565918, 0.0557556, 0.413818, 0.557617, 0.110962, 0.413818, 0.544434, 0.165161, 0.413818, 0.525391, 0.217651, 0.413818, 0.501465, 0.268066, 0.413818, 0.4729, 0.315918, 0.413818, 0.439697, 0.36084, 0.413818, 0.402344, 0.402344, 0.413818, 0.36084, 0.439697, 0.413818, 0.315918, 0.4729, 0.413818, 0.268066, 0.501465, 0.413818, 0.217651, 0.525391, 0.413818, 0.165161, 0.544434, 0.413818, 0.110962, 0.557617, 0.413818, 0.0557556, 0.565918, 0.413818, 0, 0.568848, 0.413818, -0.0557556, 0.565918, 0.413818, -0.110962, 0.557617, 0.413818, -0.165161, 0.544434, 0.413818, -0.217651, 0.525391, 0.413818, -0.268066, 0.501465, 0.413818, -0.315918, 0.4729, 0.413818, -0.36084, 0.439697, 0.413818, -0.402344, 0.402344, 0.413818, -0.439697, 0.36084, 0.413818, -0.4729, 0.315918, 0.413818, -0.501465, 0.268066, 0.413818, -0.525391, 0.217651, 0.413818, -0.544434, 0.165161, 0.413818, -0.557617, 0.110962, 0.413818, -0.565918, 0.0557556, 0.413818, -0.568848, 0, 0.413818, -0.565918, -0.0557556, 0.413818, -0.557617, -0.110962, 0.413818, -0.544434, -0.165161, 0.413818, -0.525391, -0.217651, 0.413818, -0.501465, -0.268066, 0.413818, -0.4729, -0.315918, 0.413818, -0.439697, -0.36084, 0.413818, -0.402344, -0.402344, 0.413818, -0.36084, -0.439697, 0.413818, -0.315918, -0.4729, 0.413818, -0.268066, -0.501465, 0.413818, -0.217651, -0.525391, 0.413818, -0.165161, -0.544434, 0.413818, -0.110962, -0.557617, 0.413818, -0.0557556, -0.565918, 0.413818, 0, -0.568848, 0.413818, 0, -0.568848, 0.413818, 0.0557556, -0.565918, 0.413818, 0.110962, -0.557617, 0.413818, 0.165161, -0.544434, 0.413818, 0.217651, -0.525391, 0.413818, 0.268066, -0.501465, 0.413818, 0.315918, -0.4729, 0.413818, 0.36084, -0.439697, 0.413818, 0.402344, -0.402344, 0.413818, 0.439697, -0.36084, 0.413818, 0.4729, -0.315918, 0.413818, 0.501465, -0.268066, 0.413818, 0.525391, -0.217651, 0.413818, 0.544434, -0.165161, 0.413818, 0.557617, -0.110962, 0.413818, 0.565918, -0.0557556, 0.413818, 0.568848, 0, 0.413818, 0.565918, 0.0557556, 0.413818, 0.557617, 0.110962, 0.413818, 0.544434, 0.165161, 0.413818, 0.525391, 0.217651, 0.413818, 0.501465, 0.268066, 0.413818, 0.4729, 0.315918, 0.413818, 0.439697, 0.36084, 0.413818, 0.402344, 0.402344, 0.413818, 0.36084, 0.439697, 0.413818, 0.315918, 0.4729, 0.413818, 0.268066, 0.501465, 0.413818, 0.217651, 0.525391, 0.413818, 0.165161, 0.544434, 0.413818, 0.110962, 0.557617, 0.413818, 0.0557556, 0.565918, 0.413818, 0, 0.568848, 0.413818, -0.0557556, 0.565918, 0.413818, -0.110962, 0.557617, 0.413818, -0.165161, 0.544434, 0.413818, -0.217651, 0.525391, 0.413818, -0.268066, 0.501465, 0.413818, -0.315918, 0.4729, 0.413818, -0.36084, 0.439697, 0.413818, -0.402344, 0.402344, 0.413818, -0.439697, 0.36084, 0.413818, -0.4729, 0.315918, 0.413818, -0.501465, 0.268066, 0.413818, -0.525391, 0.217651, 0.413818, -0.544434, 0.165161, 0.413818, -0.557617, 0.110962, 0.413818, -0.565918, 0.0557556, 0.413818, -0.568848, 0, 0.413818, -0.565918, -0.0557556, 0.413818, -0.557617, -0.110962, 0.413818, -0.544434, -0.165161, 0.413818, -0.525391, -0.217651, 0.413818, -0.501465, -0.268066, 0.413818, -0.4729, -0.315918, 0.413818, -0.439697, -0.36084, 0.413818, -0.402344, -0.402344, 0.413818, -0.36084, -0.439697, 0.413818, -0.315918, -0.4729, 0.413818, -0.268066, -0.501465, 0.413818, -0.217651, -0.525391, 0.413818, -0.165161, -0.544434, 0.413818, -0.110962, -0.557617, 0.413818, -0.0557556, -0.565918, 0.413818, 0, -0.568848, 0.413818, 0, -0.568848, 0.321777, 0.0557556, -0.565918, 0.321777, 0.110962, -0.557617, 0.321777, 0.165161, -0.544434, 0.321777, 0.217651, -0.525391, 0.321777, 0.268066, -0.501465, 0.321777, 0.315918, -0.4729, 0.321777, 0.36084, -0.439697, 0.321777, 0.402344, -0.402344, 0.321777, 0.439697, -0.36084, 0.321777, 0.4729, -0.315918, 0.321777, 0.501465, -0.268066, 0.321777, 0.525391, -0.217651, 0.321777, 0.544434, -0.165161, 0.321777, 0.557617, -0.110962, 0.321777, 0.565918, -0.0557556, 0.321777, 0.568848, 0, 0.321777, 0.565918, 0.0557556, 0.321777, 0.557617, 0.110962, 0.321777, 0.544434, 0.165161, 0.321777, 0.525391, 0.217651, 0.321777, 0.501465, 0.268066, 0.321777, 0.4729, 0.315918, 0.321777, 0.439697, 0.36084, 0.321777, 0.402344, 0.402344, 0.321777, 0.36084, 0.439697, 0.321777, 0.315918, 0.4729, 0.321777, 0.268066, 0.501465, 0.321777, 0.217651, 0.525391, 0.321777, 0.165161, 0.544434, 0.321777, 0.110962, 0.557617, 0.321777, 0.0557556, 0.565918, 0.321777, 0, 0.568848, 0.321777, -0.0557556, 0.565918, 0.321777, -0.110962, 0.557617, 0.321777, -0.165161, 0.544434, 0.321777, -0.217651, 0.525391, 0.321777, -0.268066, 0.501465, 0.321777, -0.315918, 0.4729, 0.321777, -0.36084, 0.439697, 0.321777, -0.402344, 0.402344, 0.321777, -0.439697, 0.36084, 0.321777, -0.4729, 0.315918, 0.321777, -0.501465, 0.268066, 0.321777, -0.525391, 0.217651, 0.321777, -0.544434, 0.165161, 0.321777, -0.557617, 0.110962, 0.321777, -0.565918, 0.0557556, 0.321777, -0.568848, 0, 0.321777, -0.565918, -0.0557556, 0.321777, -0.557617, -0.110962, 0.321777, -0.544434, -0.165161, 0.321777, -0.525391, -0.217651, 0.321777, -0.501465, -0.268066, 0.321777, -0.4729, -0.315918, 0.321777, -0.439697, -0.36084, 0.321777, -0.402344, -0.402344, 0.321777, -0.36084, -0.439697, 0.321777, -0.315918, -0.4729, 0.321777, -0.268066, -0.501465, 0.321777, -0.217651, -0.525391, 0.321777, -0.165161, -0.544434, 0.321777, -0.110962, -0.557617, 0.321777, -0.0557556, -0.565918, 0.321777, 0, -0.568848, 0.321777, 0, -0.568848, 0.22998, 0.0557556, -0.565918, 0.22998, 0.110962, -0.557617, 0.22998, 0.165161, -0.544434, 0.22998, 0.217651, -0.525391, 0.22998, 0.268066, -0.501465, 0.22998, 0.315918, -0.4729, 0.22998, 0.36084, -0.439697, 0.22998, 0.402344, -0.402344, 0.22998, 0.439697, -0.36084, 0.22998, 0.4729, -0.315918, 0.22998, 0.501465, -0.268066, 0.22998, 0.525391, -0.217651, 0.22998, 0.544434, -0.165161, 0.22998, 0.557617, -0.110962, 0.22998, 0.565918, -0.0557556, 0.22998, 0.568848, 0, 0.22998, 0.565918, 0.0557556, 0.22998, 0.557617, 0.110962, 0.22998, 0.544434, 0.165161, 0.22998, 0.525391, 0.217651, 0.22998, 0.501465, 0.268066, 0.22998, 0.4729, 0.315918, 0.22998, 0.439697, 0.36084, 0.22998, 0.402344, 0.402344, 0.22998, 0.36084, 0.439697, 0.22998, 0.315918, 0.4729, 0.22998, 0.268066, 0.501465, 0.22998, 0.217651, 0.525391, 0.22998, 0.165161, 0.544434, 0.22998, 0.110962, 0.557617, 0.22998, 0.0557556, 0.565918, 0.22998, 0, 0.568848, 0.22998, -0.0557556, 0.565918, 0.22998, -0.110962, 0.557617, 0.22998, -0.165161, 0.544434, 0.22998, -0.217651, 0.525391, 0.22998, -0.268066, 0.501465, 0.22998, -0.315918, 0.4729, 0.22998, -0.36084, 0.439697, 0.22998, -0.402344, 0.402344, 0.22998, -0.439697, 0.36084, 0.22998, -0.4729, 0.315918, 0.22998, -0.501465, 0.268066, 0.22998, -0.525391, 0.217651, 0.22998, -0.544434, 0.165161, 0.22998, -0.557617, 0.110962, 0.22998, -0.565918, 0.0557556, 0.22998, -0.568848, 0, 0.22998, -0.565918, -0.0557556, 0.22998, -0.557617, -0.110962, 0.22998, -0.544434, -0.165161, 0.22998, -0.525391, -0.217651, 0.22998, -0.501465, -0.268066, 0.22998, -0.4729, -0.315918, 0.22998, -0.439697, -0.36084, 0.22998, -0.402344, -0.402344, 0.22998, -0.36084, -0.439697, 0.22998, -0.315918, -0.4729, 0.22998, -0.268066, -0.501465, 0.22998, -0.217651, -0.525391, 0.22998, -0.165161, -0.544434, 0.22998, -0.110962, -0.557617, 0.22998, -0.0557556, -0.565918, 0.22998, 0, -0.568848, 0.22998, 0, -0.568848, 0.137939, 0.0557556, -0.565918, 0.137939, 0.110962, -0.557617, 0.137939, 0.165161, -0.544434, 0.137939, 0.217651, -0.525391, 0.137939, 0.268066, -0.501465, 0.137939, 0.315918, -0.4729, 0.137939, 0.36084, -0.439697, 0.137939, 0.402344, -0.402344, 0.137939, 0.439697, -0.36084, 0.137939, 0.4729, -0.315918, 0.137939, 0.501465, -0.268066, 0.137939, 0.525391, -0.217651, 0.137939, 0.544434, -0.165161, 0.137939, 0.557617, -0.110962, 0.137939, 0.565918, -0.0557556, 0.137939, 0.568848, 0, 0.137939, 0.565918, 0.0557556, 0.137939, 0.557617, 0.110962, 0.137939, 0.544434, 0.165161, 0.137939, 0.525391, 0.217651, 0.137939, 0.501465, 0.268066, 0.137939, 0.4729, 0.315918, 0.137939, 0.439697, 0.36084, 0.137939, 0.402344, 0.402344, 0.137939, 0.36084, 0.439697, 0.137939, 0.315918, 0.4729, 0.137939, 0.268066, 0.501465, 0.137939, 0.217651, 0.525391, 0.137939, 0.165161, 0.544434, 0.137939, 0.110962, 0.557617, 0.137939, 0.0557556, 0.565918, 0.137939, 0, 0.568848, 0.137939, -0.0557556, 0.565918, 0.137939, -0.110962, 0.557617, 0.137939, -0.165161, 0.544434, 0.137939, -0.217651, 0.525391, 0.137939, -0.268066, 0.501465, 0.137939, -0.315918, 0.4729, 0.137939, -0.36084, 0.439697, 0.137939, -0.402344, 0.402344, 0.137939, -0.439697, 0.36084, 0.137939, -0.4729, 0.315918, 0.137939, -0.501465, 0.268066, 0.137939, -0.525391, 0.217651, 0.137939, -0.544434, 0.165161, 0.137939, -0.557617, 0.110962, 0.137939, -0.565918, 0.0557556, 0.137939, -0.568848, 0, 0.137939, -0.565918, -0.0557556, 0.137939, -0.557617, -0.110962, 0.137939, -0.544434, -0.165161, 0.137939, -0.525391, -0.217651, 0.137939, -0.501465, -0.268066, 0.137939, -0.4729, -0.315918, 0.137939, -0.439697, -0.36084, 0.137939, -0.402344, -0.402344, 0.137939, -0.36084, -0.439697, 0.137939, -0.315918, -0.4729, 0.137939, -0.268066, -0.501465, 0.137939, -0.217651, -0.525391, 0.137939, -0.165161, -0.544434, 0.137939, -0.110962, -0.557617, 0.137939, -0.0557556, -0.565918, 0.137939, 0, -0.568848, 0.137939, 0, -0.568848, 0.04599, 0.0557556, -0.565918, 0.04599, 0.110962, -0.557617, 0.04599, 0.165161, -0.544434, 0.04599, 0.217651, -0.525391, 0.04599, 0.268066, -0.501465, 0.04599, 0.315918, -0.4729, 0.04599, 0.36084, -0.439697, 0.04599, 0.402344, -0.402344, 0.04599, 0.439697, -0.36084, 0.04599, 0.4729, -0.315918, 0.04599, 0.501465, -0.268066, 0.04599, 0.525391, -0.217651, 0.04599, 0.544434, -0.165161, 0.04599, 0.557617, -0.110962, 0.04599, 0.565918, -0.0557556, 0.04599, 0.568848, 0, 0.04599, 0.565918, 0.0557556, 0.04599, 0.557617, 0.110962, 0.04599, 0.544434, 0.165161, 0.04599, 0.525391, 0.217651, 0.04599, 0.501465, 0.268066, 0.04599, 0.4729, 0.315918, 0.04599, 0.439697, 0.36084, 0.04599, 0.402344, 0.402344, 0.04599, 0.36084, 0.439697, 0.04599, 0.315918, 0.4729, 0.04599, 0.268066, 0.501465, 0.04599, 0.217651, 0.525391, 0.04599, 0.165161, 0.544434, 0.04599, 0.110962, 0.557617, 0.04599, 0.0557556, 0.565918, 0.04599, 0, 0.568848, 0.04599, -0.0557556, 0.565918, 0.04599, -0.110962, 0.557617, 0.04599, -0.165161, 0.544434, 0.04599, -0.217651, 0.525391, 0.04599, -0.268066, 0.501465, 0.04599, -0.315918, 0.4729, 0.04599, -0.36084, 0.439697, 0.04599, -0.402344, 0.402344, 0.04599, -0.439697, 0.36084, 0.04599, -0.4729, 0.315918, 0.04599, -0.501465, 0.268066, 0.04599, -0.525391, 0.217651, 0.04599, -0.544434, 0.165161, 0.04599, -0.557617, 0.110962, 0.04599, -0.565918, 0.0557556, 0.04599, -0.568848, 0, 0.04599, -0.565918, -0.0557556, 0.04599, -0.557617, -0.110962, 0.04599, -0.544434, -0.165161, 0.04599, -0.525391, -0.217651, 0.04599, -0.501465, -0.268066, 0.04599, -0.4729, -0.315918, 0.04599, -0.439697, -0.36084, 0.04599, -0.402344, -0.402344, 0.04599, -0.36084, -0.439697, 0.04599, -0.315918, -0.4729, 0.04599, -0.268066, -0.501465, 0.04599, -0.217651, -0.525391, 0.04599, -0.165161, -0.544434, 0.04599, -0.110962, -0.557617, 0.04599, -0.0557556, -0.565918, 0.04599, 0, -0.568848, 0.04599, 0, -0.568848, -0.04599, 0.0557556, -0.565918, -0.04599, 0.110962, -0.557617, -0.04599, 0.165161, -0.544434, -0.04599, 0.217651, -0.525391, -0.04599, 0.268066, -0.501465, -0.04599, 0.315918, -0.4729, -0.04599, 0.36084, -0.439697, -0.04599, 0.402344, -0.402344, -0.04599, 0.439697, -0.36084, -0.04599, 0.4729, -0.315918, -0.04599, 0.501465, -0.268066, -0.04599, 0.525391, -0.217651, -0.04599, 0.544434, -0.165161, -0.04599, 0.557617, -0.110962, -0.04599, 0.565918, -0.0557556, -0.04599, 0.568848, 0, -0.04599, 0.565918, 0.0557556, -0.04599, 0.557617, 0.110962, -0.04599, 0.544434, 0.165161, -0.04599, 0.525391, 0.217651, -0.04599, 0.501465, 0.268066, -0.04599, 0.4729, 0.315918, -0.04599, 0.439697, 0.36084, -0.04599, 0.402344, 0.402344, -0.04599, 0.36084, 0.439697, -0.04599, 0.315918, 0.4729, -0.04599, 0.268066, 0.501465, -0.04599, 0.217651, 0.525391, -0.04599, 0.165161, 0.544434, -0.04599, 0.110962, 0.557617, -0.04599, 0.0557556, 0.565918, -0.04599, 0, 0.568848, -0.04599, -0.0557556, 0.565918, -0.04599, -0.110962, 0.557617, -0.04599, -0.165161, 0.544434, -0.04599, -0.217651, 0.525391, -0.04599, -0.268066, 0.501465, -0.04599, -0.315918, 0.4729, -0.04599, -0.36084, 0.439697, -0.04599, -0.402344, 0.402344, -0.04599, -0.439697, 0.36084, -0.04599, -0.4729, 0.315918, -0.04599, -0.501465, 0.268066, -0.04599, -0.525391, 0.217651, -0.04599, -0.544434, 0.165161, -0.04599, -0.557617, 0.110962, -0.04599, -0.565918, 0.0557556, -0.04599, -0.568848, 0, -0.04599, -0.565918, -0.0557556, -0.04599, -0.557617, -0.110962, -0.04599, -0.544434, -0.165161, -0.04599, -0.525391, -0.217651, -0.04599, -0.501465, -0.268066, -0.04599, -0.4729, -0.315918, -0.04599, -0.439697, -0.36084, -0.04599, -0.402344, -0.402344, -0.04599, -0.36084, -0.439697, -0.04599, -0.315918, -0.4729, -0.04599, -0.268066, -0.501465, -0.04599, -0.217651, -0.525391, -0.04599, -0.165161, -0.544434, -0.04599, -0.110962, -0.557617, -0.04599, -0.0557556, -0.565918, -0.04599, 0, -0.568848, -0.04599, 0, -0.568848, -0.137939, 0.0557556, -0.565918, -0.137939, 0.110962, -0.557617, -0.137939, 0.165161, -0.544434, -0.137939, 0.217651, -0.525391, -0.137939, 0.268066, -0.501465, -0.137939, 0.315918, -0.4729, -0.137939, 0.36084, -0.439697, -0.137939, 0.402344, -0.402344, -0.137939, 0.439697, -0.36084, -0.137939, 0.4729, -0.315918, -0.137939, 0.501465, -0.268066, -0.137939, 0.525391, -0.217651, -0.137939, 0.544434, -0.165161, -0.137939, 0.557617, -0.110962, -0.137939, 0.565918, -0.0557556, -0.137939, 0.568848, 0, -0.137939, 0.565918, 0.0557556, -0.137939, 0.557617, 0.110962, -0.137939, 0.544434, 0.165161, -0.137939, 0.525391, 0.217651, -0.137939, 0.501465, 0.268066, -0.137939, 0.4729, 0.315918, -0.137939, 0.439697, 0.36084, -0.137939, 0.402344, 0.402344, -0.137939, 0.36084, 0.439697, -0.137939, 0.315918, 0.4729, -0.137939, 0.268066, 0.501465, -0.137939, 0.217651, 0.525391, -0.137939, 0.165161, 0.544434, -0.137939, 0.110962, 0.557617, -0.137939, 0.0557556, 0.565918, -0.137939, 0, 0.568848, -0.137939, -0.0557556, 0.565918, -0.137939, -0.110962, 0.557617, -0.137939, -0.165161, 0.544434, -0.137939, -0.217651, 0.525391, -0.137939, -0.268066, 0.501465, -0.137939, -0.315918, 0.4729, -0.137939, -0.36084, 0.439697, -0.137939, -0.402344, 0.402344, -0.137939, -0.439697, 0.36084, -0.137939, -0.4729, 0.315918, -0.137939, -0.501465, 0.268066, -0.137939, -0.525391, 0.217651, -0.137939, -0.544434, 0.165161, -0.137939, -0.557617, 0.110962, -0.137939, -0.565918, 0.0557556, -0.137939, -0.568848, 0, -0.137939, -0.565918, -0.0557556, -0.137939, -0.557617, -0.110962, -0.137939, -0.544434, -0.165161, -0.137939, -0.525391, -0.217651, -0.137939, -0.501465, -0.268066, -0.137939, -0.4729, -0.315918, -0.137939, -0.439697, -0.36084, -0.137939, -0.402344, -0.402344, -0.137939, -0.36084, -0.439697, -0.137939, -0.315918, -0.4729, -0.137939, -0.268066, -0.501465, -0.137939, -0.217651, -0.525391, -0.137939, -0.165161, -0.544434, -0.137939, -0.110962, -0.557617, -0.137939, -0.0557556, -0.565918, -0.137939, 0, -0.568848, -0.137939, 0, -0.568848, -0.22998, 0.0557556, -0.565918, -0.22998, 0.110962, -0.557617, -0.22998, 0.165161, -0.544434, -0.22998, 0.217651, -0.525391, -0.22998, 0.268066, -0.501465, -0.22998, 0.315918, -0.4729, -0.22998, 0.36084, -0.439697, -0.22998, 0.402344, -0.402344, -0.22998, 0.439697, -0.36084, -0.22998, 0.4729, -0.315918, -0.22998, 0.501465, -0.268066, -0.22998, 0.525391, -0.217651, -0.22998, 0.544434, -0.165161, -0.22998, 0.557617, -0.110962, -0.22998, 0.565918, -0.0557556, -0.22998, 0.568848, 0, -0.22998, 0.565918, 0.0557556, -0.22998, 0.557617, 0.110962, -0.22998, 0.544434, 0.165161, -0.22998, 0.525391, 0.217651, -0.22998, 0.501465, 0.268066, -0.22998, 0.4729, 0.315918, -0.22998, 0.439697, 0.36084, -0.22998, 0.402344, 0.402344, -0.22998, 0.36084, 0.439697, -0.22998, 0.315918, 0.4729, -0.22998, 0.268066, 0.501465, -0.22998, 0.217651, 0.525391, -0.22998, 0.165161, 0.544434, -0.22998, 0.110962, 0.557617, -0.22998, 0.0557556, 0.565918, -0.22998, 0, 0.568848, -0.22998, -0.0557556, 0.565918, -0.22998, -0.110962, 0.557617, -0.22998, -0.165161, 0.544434, -0.22998, -0.217651, 0.525391, -0.22998, -0.268066, 0.501465, -0.22998, -0.315918, 0.4729, -0.22998, -0.36084, 0.439697, -0.22998, -0.402344, 0.402344, -0.22998, -0.439697, 0.36084, -0.22998, -0.4729, 0.315918, -0.22998, -0.501465, 0.268066, -0.22998, -0.525391, 0.217651, -0.22998, -0.544434, 0.165161, -0.22998, -0.557617, 0.110962, -0.22998, -0.565918, 0.0557556, -0.22998, -0.568848, 0, -0.22998, -0.565918, -0.0557556, -0.22998, -0.557617, -0.110962, -0.22998, -0.544434, -0.165161, -0.22998, -0.525391, -0.217651, -0.22998, -0.501465, -0.268066, -0.22998, -0.4729, -0.315918, -0.22998, -0.439697, -0.36084, -0.22998, -0.402344, -0.402344, -0.22998, -0.36084, -0.439697, -0.22998, -0.315918, -0.4729, -0.22998, -0.268066, -0.501465, -0.22998, -0.217651, -0.525391, -0.22998, -0.165161, -0.544434, -0.22998, -0.110962, -0.557617, -0.22998, -0.0557556, -0.565918, -0.22998, 0, -0.568848, -0.22998, 0, -0.568848, -0.321777, 0.0557556, -0.565918, -0.321777, 0.110962, -0.557617, -0.321777, 0.165161, -0.544434, -0.321777, 0.217651, -0.525391, -0.321777, 0.268066, -0.501465, -0.321777, 0.315918, -0.4729, -0.321777, 0.36084, -0.439697, -0.321777, 0.402344, -0.402344, -0.321777, 0.439697, -0.36084, -0.321777, 0.4729, -0.315918, -0.321777, 0.501465, -0.268066, -0.321777, 0.525391, -0.217651, -0.321777, 0.544434, -0.165161, -0.321777, 0.557617, -0.110962, -0.321777, 0.565918, -0.0557556, -0.321777, 0.568848, 0, -0.321777, 0.565918, 0.0557556, -0.321777, 0.557617, 0.110962, -0.321777, 0.544434, 0.165161, -0.321777, 0.525391, 0.217651, -0.321777, 0.501465, 0.268066, -0.321777, 0.4729, 0.315918, -0.321777, 0.439697, 0.36084, -0.321777, 0.402344, 0.402344, -0.321777, 0.36084, 0.439697, -0.321777, 0.315918, 0.4729, -0.321777, 0.268066, 0.501465, -0.321777, 0.217651, 0.525391, -0.321777, 0.165161, 0.544434, -0.321777, 0.110962, 0.557617, -0.321777, 0.0557556, 0.565918, -0.321777, 0, 0.568848, -0.321777, -0.0557556, 0.565918, -0.321777, -0.110962, 0.557617, -0.321777, -0.165161, 0.544434, -0.321777, -0.217651, 0.525391, -0.321777, -0.268066, 0.501465, -0.321777, -0.315918, 0.4729, -0.321777, -0.36084, 0.439697, -0.321777, -0.402344, 0.402344, -0.321777, -0.439697, 0.36084, -0.321777, -0.4729, 0.315918, -0.321777, -0.501465, 0.268066, -0.321777, -0.525391, 0.217651, -0.321777, -0.544434, 0.165161, -0.321777, -0.557617, 0.110962, -0.321777, -0.565918, 0.0557556, -0.321777, -0.568848, 0, -0.321777, -0.565918, -0.0557556, -0.321777, -0.557617, -0.110962, -0.321777, -0.544434, -0.165161, -0.321777, -0.525391, -0.217651, -0.321777, -0.501465, -0.268066, -0.321777, -0.4729, -0.315918, -0.321777, -0.439697, -0.36084, -0.321777, -0.402344, -0.402344, -0.321777, -0.36084, -0.439697, -0.321777, -0.315918, -0.4729, -0.321777, -0.268066, -0.501465, -0.321777, -0.217651, -0.525391, -0.321777, -0.165161, -0.544434, -0.321777, -0.110962, -0.557617, -0.321777, -0.0557556, -0.565918, -0.321777, 0, -0.568848, -0.321777, 0, -0.568848, -0.413818, 0.0557556, -0.565918, -0.413818, 0.110962, -0.557617, -0.413818, 0.165161, -0.544434, -0.413818, 0.217651, -0.525391, -0.413818, 0.268066, -0.501465, -0.413818, 0.315918, -0.4729, -0.413818, 0.36084, -0.439697, -0.413818, 0.402344, -0.402344, -0.413818, 0.439697, -0.36084, -0.413818, 0.4729, -0.315918, -0.413818, 0.501465, -0.268066, -0.413818, 0.525391, -0.217651, -0.413818, 0.544434, -0.165161, -0.413818, 0.557617, -0.110962, -0.413818, 0.565918, -0.0557556, -0.413818, 0.568848, 0, -0.413818, 0.565918, 0.0557556, -0.413818, 0.557617, 0.110962, -0.413818, 0.544434, 0.165161, -0.413818, 0.525391, 0.217651, -0.413818, 0.501465, 0.268066, -0.413818, 0.4729, 0.315918, -0.413818, 0.439697, 0.36084, -0.413818, 0.402344, 0.402344, -0.413818, 0.36084, 0.439697, -0.413818, 0.315918, 0.4729, -0.413818, 0.268066, 0.501465, -0.413818, 0.217651, 0.525391, -0.413818, 0.165161, 0.544434, -0.413818, 0.110962, 0.557617, -0.413818, 0.0557556, 0.565918, -0.413818, 0, 0.568848, -0.413818, -0.0557556, 0.565918, -0.413818, -0.110962, 0.557617, -0.413818, -0.165161, 0.544434, -0.413818, -0.217651, 0.525391, -0.413818, -0.268066, 0.501465, -0.413818, -0.315918, 0.4729, -0.413818, -0.36084, 0.439697, -0.413818, -0.402344, 0.402344, -0.413818, -0.439697, 0.36084, -0.413818, -0.4729, 0.315918, -0.413818, -0.501465, 0.268066, -0.413818, -0.525391, 0.217651, -0.413818, -0.544434, 0.165161, -0.413818, -0.557617, 0.110962, -0.413818, -0.565918, 0.0557556, -0.413818, -0.568848, 0, -0.413818, -0.565918, -0.0557556, -0.413818, -0.557617, -0.110962, -0.413818, -0.544434, -0.165161, -0.413818, -0.525391, -0.217651, -0.413818, -0.501465, -0.268066, -0.413818, -0.4729, -0.315918, -0.413818, -0.439697, -0.36084, -0.413818, -0.402344, -0.402344, -0.413818, -0.36084, -0.439697, -0.413818, -0.315918, -0.4729, -0.413818, -0.268066, -0.501465, -0.413818, -0.217651, -0.525391, -0.413818, -0.165161, -0.544434, -0.413818, -0.110962, -0.557617, -0.413818, -0.0557556, -0.565918, -0.413818, 0, -0.568848, -0.413818, 0, -0.568848, -0.413818, 0.0557556, -0.565918, -0.413818, 0.110962, -0.557617, -0.413818, 0.165161, -0.544434, -0.413818, 0.217651, -0.525391, -0.413818, 0.268066, -0.501465, -0.413818, 0.315918, -0.4729, -0.413818, 0.36084, -0.439697, -0.413818, 0.402344, -0.402344, -0.413818, 0.439697, -0.36084, -0.413818, 0.4729, -0.315918, -0.413818, 0.501465, -0.268066, -0.413818, 0.525391, -0.217651, -0.413818, 0.544434, -0.165161, -0.413818, 0.557617, -0.110962, -0.413818, 0.565918, -0.0557556, -0.413818, 0.568848, 0, -0.413818, 0.565918, 0.0557556, -0.413818, 0.557617, 0.110962, -0.413818, 0.544434, 0.165161, -0.413818, 0.525391, 0.217651, -0.413818, 0.501465, 0.268066, -0.413818, 0.4729, 0.315918, -0.413818, 0.439697, 0.36084, -0.413818, 0.402344, 0.402344, -0.413818, 0.36084, 0.439697, -0.413818, 0.315918, 0.4729, -0.413818, 0.268066, 0.501465, -0.413818, 0.217651, 0.525391, -0.413818, 0.165161, 0.544434, -0.413818, 0.110962, 0.557617, -0.413818, 0.0557556, 0.565918, -0.413818, 0, 0.568848, -0.413818, -0.0557556, 0.565918, -0.413818, -0.110962, 0.557617, -0.413818, -0.165161, 0.544434, -0.413818, -0.217651, 0.525391, -0.413818, -0.268066, 0.501465, -0.413818, -0.315918, 0.4729, -0.413818, -0.36084, 0.439697, -0.413818, -0.402344, 0.402344, -0.413818, -0.439697, 0.36084, -0.413818, -0.4729, 0.315918, -0.413818, -0.501465, 0.268066, -0.413818, -0.525391, 0.217651, -0.413818, -0.544434, 0.165161, -0.413818, -0.557617, 0.110962, -0.413818, -0.565918, 0.0557556, -0.413818, -0.568848, 0, -0.413818, -0.565918, -0.0557556, -0.413818, -0.557617, -0.110962, -0.413818, -0.544434, -0.165161, -0.413818, -0.525391, -0.217651, -0.413818, -0.501465, -0.268066, -0.413818, -0.4729, -0.315918, -0.413818, -0.439697, -0.36084, -0.413818, -0.402344, -0.402344, -0.413818, -0.36084, -0.439697, -0.413818, -0.315918, -0.4729, -0.413818, -0.268066, -0.501465, -0.413818, -0.217651, -0.525391, -0.413818, -0.165161, -0.544434, -0.413818, -0.110962, -0.557617, -0.413818, -0.0557556, -0.565918, -0.413818, 0, -0.568848, -0.413818, 0, -0.560059, -0.512695, 0.0549011, -0.557617, -0.512695, 0.109314, -0.549316, -0.512695, 0.162598, -0.536133, -0.512695, 0.214355, -0.517578, -0.512695, 0.263916, -0.494141, -0.512695, 0.311279, -0.46582, -0.512695, 0.355469, -0.433105, -0.512695, 0.395996, -0.395996, -0.512695, 0.433105, -0.355469, -0.512695, 0.46582, -0.311279, -0.512695, 0.494141, -0.263916, -0.512695, 0.517578, -0.214355, -0.512695, 0.536133, -0.162598, -0.512695, 0.549316, -0.109314, -0.512695, 0.557617, -0.0549011, -0.512695, 0.560059, 0, -0.512695, 0.557617, 0.0549011, -0.512695, 0.549316, 0.109314, -0.512695, 0.536133, 0.162598, -0.512695, 0.517578, 0.214355, -0.512695, 0.494141, 0.263916, -0.512695, 0.46582, 0.311279, -0.512695, 0.433105, 0.355469, -0.512695, 0.395996, 0.395996, -0.512695, 0.355469, 0.433105, -0.512695, 0.311279, 0.46582, -0.512695, 0.263916, 0.494141, -0.512695, 0.214355, 0.517578, -0.512695, 0.162598, 0.536133, -0.512695, 0.109314, 0.549316, -0.512695, 0.0549011, 0.557617, -0.512695, 0, 0.560059, -0.512695, -0.0549011, 0.557617, -0.512695, -0.109314, 0.549316, -0.512695, -0.162598, 0.536133, -0.512695, -0.214355, 0.517578, -0.512695, -0.263916, 0.494141, -0.512695, -0.311279, 0.46582, -0.512695, -0.355469, 0.433105, -0.512695, -0.395996, 0.395996, -0.512695, -0.433105, 0.355469, -0.512695, -0.46582, 0.311279, -0.512695, -0.494141, 0.263916, -0.512695, -0.517578, 0.214355, -0.512695, -0.536133, 0.162598, -0.512695, -0.549316, 0.109314, -0.512695, -0.557617, 0.0549011, -0.512695, -0.560059, 0, -0.512695, -0.557617, -0.0549011, -0.512695, -0.549316, -0.109314, -0.512695, -0.536133, -0.162598, -0.512695, -0.517578, -0.214355, -0.512695, -0.494141, -0.263916, -0.512695, -0.46582, -0.311279, -0.512695, -0.433105, -0.355469, -0.512695, -0.395996, -0.395996, -0.512695, -0.355469, -0.433105, -0.512695, -0.311279, -0.46582, -0.512695, -0.263916, -0.494141, -0.512695, -0.214355, -0.517578, -0.512695, -0.162598, -0.536133, -0.512695, -0.109314, -0.549316, -0.512695, -0.0549011, -0.557617, -0.512695, 0, -0.560059, -0.512695, 0, -0.534668, -0.608398, 0.0523987, -0.531738, -0.608398, 0.104309, -0.523926, -0.608398, 0.155151, -0.51123, -0.608398, 0.20459, -0.493896, -0.608398, 0.251953, -0.471436, -0.608398, 0.296875, -0.444336, -0.608398, 0.339111, -0.413086, -0.608398, 0.37793, -0.37793, -0.608398, 0.413086, -0.339111, -0.608398, 0.444336, -0.296875, -0.608398, 0.471436, -0.251953, -0.608398, 0.493896, -0.20459, -0.608398, 0.51123, -0.155151, -0.608398, 0.523926, -0.104309, -0.608398, 0.531738, -0.0523987, -0.608398, 0.534668, 0, -0.608398, 0.531738, 0.0523987, -0.608398, 0.523926, 0.104309, -0.608398, 0.51123, 0.155151, -0.608398, 0.493896, 0.20459, -0.608398, 0.471436, 0.251953, -0.608398, 0.444336, 0.296875, -0.608398, 0.413086, 0.339111, -0.608398, 0.37793, 0.37793, -0.608398, 0.339111, 0.413086, -0.608398, 0.296875, 0.444336, -0.608398, 0.251953, 0.471436, -0.608398, 0.20459, 0.493896, -0.608398, 0.155151, 0.51123, -0.608398, 0.104309, 0.523926, -0.608398, 0.0523987, 0.531738, -0.608398, 0, 0.534668, -0.608398, -0.0523987, 0.531738, -0.608398, -0.104309, 0.523926, -0.608398, -0.155151, 0.51123, -0.608398, -0.20459, 0.493896, -0.608398, -0.251953, 0.471436, -0.608398, -0.296875, 0.444336, -0.608398, -0.339111, 0.413086, -0.608398, -0.37793, 0.37793, -0.608398, -0.413086, 0.339111, -0.608398, -0.444336, 0.296875, -0.608398, -0.471436, 0.251953, -0.608398, -0.493896, 0.20459, -0.608398, -0.51123, 0.155151, -0.608398, -0.523926, 0.104309, -0.608398, -0.531738, 0.0523987, -0.608398, -0.534668, 0, -0.608398, -0.531738, -0.0523987, -0.608398, -0.523926, -0.104309, -0.608398, -0.51123, -0.155151, -0.608398, -0.493896, -0.20459, -0.608398, -0.471436, -0.251953, -0.608398, -0.444336, -0.296875, -0.608398, -0.413086, -0.339111, -0.608398, -0.37793, -0.37793, -0.608398, -0.339111, -0.413086, -0.608398, -0.296875, -0.444336, -0.608398, -0.251953, -0.471436, -0.608398, -0.20459, -0.493896, -0.608398, -0.155151, -0.51123, -0.608398, -0.104309, -0.523926, -0.608398, -0.0523987, -0.531738, -0.608398, 0, -0.534668, -0.608398, 0, -0.492676, -0.698242, 0.0482788, -0.490234, -0.698242, 0.0961304, -0.483154, -0.698242, 0.142944, -0.471436, -0.698242, 0.188477, -0.455078, -0.698242, 0.232178, -0.43457, -0.698242, 0.273682, -0.409668, -0.698242, 0.3125, -0.380859, -0.698242, 0.348389, -0.348389, -0.698242, 0.380859, -0.3125, -0.698242, 0.409668, -0.273682, -0.698242, 0.43457, -0.232178, -0.698242, 0.455078, -0.188477, -0.698242, 0.471436, -0.142944, -0.698242, 0.483154, -0.0961304, -0.698242, 0.490234, -0.0482788, -0.698242, 0.492676, 0, -0.698242, 0.490234, 0.0482788, -0.698242, 0.483154, 0.0961304, -0.698242, 0.471436, 0.142944, -0.698242, 0.455078, 0.188477, -0.698242, 0.43457, 0.232178, -0.698242, 0.409668, 0.273682, -0.698242, 0.380859, 0.3125, -0.698242, 0.348389, 0.348389, -0.698242, 0.3125, 0.380859, -0.698242, 0.273682, 0.409668, -0.698242, 0.232178, 0.43457, -0.698242, 0.188477, 0.455078, -0.698242, 0.142944, 0.471436, -0.698242, 0.0961304, 0.483154, -0.698242, 0.0482788, 0.490234, -0.698242, 0, 0.492676, -0.698242, -0.0482788, 0.490234, -0.698242, -0.0961304, 0.483154, -0.698242, -0.142944, 0.471436, -0.698242, -0.188477, 0.455078, -0.698242, -0.232178, 0.43457, -0.698242, -0.273682, 0.409668, -0.698242, -0.3125, 0.380859, -0.698242, -0.348389, 0.348389, -0.698242, -0.380859, 0.3125, -0.698242, -0.409668, 0.273682, -0.698242, -0.43457, 0.232178, -0.698242, -0.455078, 0.188477, -0.698242, -0.471436, 0.142944, -0.698242, -0.483154, 0.0961304, -0.698242, -0.490234, 0.0482788, -0.698242, -0.492676, 0, -0.698242, -0.490234, -0.0482788, -0.698242, -0.483154, -0.0961304, -0.698242, -0.471436, -0.142944, -0.698242, -0.455078, -0.188477, -0.698242, -0.43457, -0.232178, -0.698242, -0.409668, -0.273682, -0.698242, -0.380859, -0.3125, -0.698242, -0.348389, -0.348389, -0.698242, -0.3125, -0.380859, -0.698242, -0.273682, -0.409668, -0.698242, -0.232178, -0.43457, -0.698242, -0.188477, -0.455078, -0.698242, -0.142944, -0.471436, -0.698242, -0.0961304, -0.483154, -0.698242, -0.0482788, -0.490234, -0.698242, 0, -0.492676, -0.698242, 0, -0.435791, -0.779297, 0.0426941, -0.433594, -0.779297, 0.085022, -0.42749, -0.779297, 0.126465, -0.416992, -0.779297, 0.166748, -0.402588, -0.779297, 0.205444, -0.384277, -0.779297, 0.242065, -0.362305, -0.779297, 0.276367, -0.336914, -0.779297, 0.308105, -0.308105, -0.779297, 0.336914, -0.276367, -0.779297, 0.362305, -0.242065, -0.779297, 0.384277, -0.205444, -0.779297, 0.402588, -0.166748, -0.779297, 0.416992, -0.126465, -0.779297, 0.42749, -0.085022, -0.779297, 0.433594, -0.0426941, -0.779297, 0.435791, 0, -0.779297, 0.433594, 0.0426941, -0.779297, 0.42749, 0.085022, -0.779297, 0.416992, 0.126465, -0.779297, 0.402588, 0.166748, -0.779297, 0.384277, 0.205444, -0.779297, 0.362305, 0.242065, -0.779297, 0.336914, 0.276367, -0.779297, 0.308105, 0.308105, -0.779297, 0.276367, 0.336914, -0.779297, 0.242065, 0.362305, -0.779297, 0.205444, 0.384277, -0.779297, 0.166748, 0.402588, -0.779297, 0.126465, 0.416992, -0.779297, 0.085022, 0.42749, -0.779297, 0.0426941, 0.433594, -0.779297, 0, 0.435791, -0.779297, -0.0426941, 0.433594, -0.779297, -0.085022, 0.42749, -0.779297, -0.126465, 0.416992, -0.779297, -0.166748, 0.402588, -0.779297, -0.205444, 0.384277, -0.779297, -0.242065, 0.362305, -0.779297, -0.276367, 0.336914, -0.779297, -0.308105, 0.308105, -0.779297, -0.336914, 0.276367, -0.779297, -0.362305, 0.242065, -0.779297, -0.384277, 0.205444, -0.779297, -0.402588, 0.166748, -0.779297, -0.416992, 0.126465, -0.779297, -0.42749, 0.085022, -0.779297, -0.433594, 0.0426941, -0.779297, -0.435791, 0, -0.779297, -0.433594, -0.0426941, -0.779297, -0.42749, -0.085022, -0.779297, -0.416992, -0.126465, -0.779297, -0.402588, -0.166748, -0.779297, -0.384277, -0.205444, -0.779297, -0.362305, -0.242065, -0.779297, -0.336914, -0.276367, -0.779297, -0.308105, -0.308105, -0.779297, -0.276367, -0.336914, -0.779297, -0.242065, -0.362305, -0.779297, -0.205444, -0.384277, -0.779297, -0.166748, -0.402588, -0.779297, -0.126465, -0.416992, -0.779297, -0.085022, -0.42749, -0.779297, -0.0426941, -0.433594, -0.779297, 0, -0.435791, -0.779297, 0, -0.365723, -0.849609, 0.0358276, -0.36377, -0.849609, 0.0713501, -0.358643, -0.849609, 0.10614, -0.349854, -0.849609, 0.139893, -0.337891, -0.849609, 0.172363, -0.32251, -0.849609, 0.203125, -0.303955, -0.849609, 0.231934, -0.282715, -0.849609, 0.258545, -0.258545, -0.849609, 0.282715, -0.231934, -0.849609, 0.303955, -0.203125, -0.849609, 0.32251, -0.172363, -0.849609, 0.337891, -0.139893, -0.849609, 0.349854, -0.10614, -0.849609, 0.358643, -0.0713501, -0.849609, 0.36377, -0.0358276, -0.849609, 0.365723, 0, -0.849609, 0.36377, 0.0358276, -0.849609, 0.358643, 0.0713501, -0.849609, 0.349854, 0.10614, -0.849609, 0.337891, 0.139893, -0.849609, 0.32251, 0.172363, -0.849609, 0.303955, 0.203125, -0.849609, 0.282715, 0.231934, -0.849609, 0.258545, 0.258545, -0.849609, 0.231934, 0.282715, -0.849609, 0.203125, 0.303955, -0.849609, 0.172363, 0.32251, -0.849609, 0.139893, 0.337891, -0.849609, 0.10614, 0.349854, -0.849609, 0.0713501, 0.358643, -0.849609, 0.0358276, 0.36377, -0.849609, 0, 0.365723, -0.849609, -0.0358276, 0.36377, -0.849609, -0.0713501, 0.358643, -0.849609, -0.10614, 0.349854, -0.849609, -0.139893, 0.337891, -0.849609, -0.172363, 0.32251, -0.849609, -0.203125, 0.303955, -0.849609, -0.231934, 0.282715, -0.849609, -0.258545, 0.258545, -0.849609, -0.282715, 0.231934, -0.849609, -0.303955, 0.203125, -0.849609, -0.32251, 0.172363, -0.849609, -0.337891, 0.139893, -0.849609, -0.349854, 0.10614, -0.849609, -0.358643, 0.0713501, -0.849609, -0.36377, 0.0358276, -0.849609, -0.365723, 0, -0.849609, -0.36377, -0.0358276, -0.849609, -0.358643, -0.0713501, -0.849609, -0.349854, -0.10614, -0.849609, -0.337891, -0.139893, -0.849609, -0.32251, -0.172363, -0.849609, -0.303955, -0.203125, -0.849609, -0.282715, -0.231934, -0.849609, -0.258545, -0.258545, -0.849609, -0.231934, -0.282715, -0.849609, -0.203125, -0.303955, -0.849609, -0.172363, -0.32251, -0.849609, -0.139893, -0.337891, -0.849609, -0.10614, -0.349854, -0.849609, -0.0713501, -0.358643, -0.849609, -0.0358276, -0.36377, -0.849609, 0, -0.365723, -0.849609, 0, -0.284424, -0.906738, 0.0278778, -0.282959, -0.906738, 0.055481, -0.278809, -0.906738, 0.0825806, -0.272217, -0.906738, 0.108826, -0.262695, -0.906738, 0.134033, -0.250732, -0.906738, 0.157959, -0.23645, -0.906738, 0.18042, -0.219849, -0.906738, 0.20105, -0.20105, -0.906738, 0.219849, -0.18042, -0.906738, 0.23645, -0.157959, -0.906738, 0.250732, -0.134033, -0.906738, 0.262695, -0.108826, -0.906738, 0.272217, -0.0825806, -0.906738, 0.278809, -0.055481, -0.906738, 0.282959, -0.0278778, -0.906738, 0.284424, 0, -0.906738, 0.282959, 0.0278778, -0.906738, 0.278809, 0.055481, -0.906738, 0.272217, 0.0825806, -0.906738, 0.262695, 0.108826, -0.906738, 0.250732, 0.134033, -0.906738, 0.23645, 0.157959, -0.906738, 0.219849, 0.18042, -0.906738, 0.20105, 0.20105, -0.906738, 0.18042, 0.219849, -0.906738, 0.157959, 0.23645, -0.906738, 0.134033, 0.250732, -0.906738, 0.108826, 0.262695, -0.906738, 0.0825806, 0.272217, -0.906738, 0.055481, 0.278809, -0.906738, 0.0278778, 0.282959, -0.906738, 0, 0.284424, -0.906738, -0.0278778, 0.282959, -0.906738, -0.055481, 0.278809, -0.906738, -0.0825806, 0.272217, -0.906738, -0.108826, 0.262695, -0.906738, -0.134033, 0.250732, -0.906738, -0.157959, 0.23645, -0.906738, -0.18042, 0.219849, -0.906738, -0.20105, 0.20105, -0.906738, -0.219849, 0.18042, -0.906738, -0.23645, 0.157959, -0.906738, -0.250732, 0.134033, -0.906738, -0.262695, 0.108826, -0.906738, -0.272217, 0.0825806, -0.906738, -0.278809, 0.055481, -0.906738, -0.282959, 0.0278778, -0.906738, -0.284424, 0, -0.906738, -0.282959, -0.0278778, -0.906738, -0.278809, -0.055481, -0.906738, -0.272217, -0.0825806, -0.906738, -0.262695, -0.108826, -0.906738, -0.250732, -0.134033, -0.906738, -0.23645, -0.157959, -0.906738, -0.219849, -0.18042, -0.906738, -0.20105, -0.20105, -0.906738, -0.18042, -0.219849, -0.906738, -0.157959, -0.23645, -0.906738, -0.134033, -0.250732, -0.906738, -0.108826, -0.262695, -0.906738, -0.0825806, -0.272217, -0.906738, -0.055481, -0.278809, -0.906738, -0.0278778, -0.282959, -0.906738, 0, -0.284424, -0.906738, 0, -0.19458, -0.948242, 0.0190735, -0.193604, -0.948242, 0.0379639, -0.190796, -0.948242, 0.056488, -0.186157, -0.948242, 0.0744629, -0.179688, -0.948242, 0.0917358, -0.171509, -0.948242, 0.108093, -0.161743, -0.948242, 0.123413, -0.150391, -0.948242, 0.137573, -0.137573, -0.948242, 0.150391, -0.123413, -0.948242, 0.161743, -0.108093, -0.948242, 0.171509, -0.0917358, -0.948242, 0.179688, -0.0744629, -0.948242, 0.186157, -0.056488, -0.948242, 0.190796, -0.0379639, -0.948242, 0.193604, -0.0190735, -0.948242, 0.19458, 0, -0.948242, 0.193604, 0.0190735, -0.948242, 0.190796, 0.0379639, -0.948242, 0.186157, 0.056488, -0.948242, 0.179688, 0.0744629, -0.948242, 0.171509, 0.0917358, -0.948242, 0.161743, 0.108093, -0.948242, 0.150391, 0.123413, -0.948242, 0.137573, 0.137573, -0.948242, 0.123413, 0.150391, -0.948242, 0.108093, 0.161743, -0.948242, 0.0917358, 0.171509, -0.948242, 0.0744629, 0.179688, -0.948242, 0.056488, 0.186157, -0.948242, 0.0379639, 0.190796, -0.948242, 0.0190735, 0.193604, -0.948242, 0, 0.19458, -0.948242, -0.0190735, 0.193604, -0.948242, -0.0379639, 0.190796, -0.948242, -0.056488, 0.186157, -0.948242, -0.0744629, 0.179688, -0.948242, -0.0917358, 0.171509, -0.948242, -0.108093, 0.161743, -0.948242, -0.123413, 0.150391, -0.948242, -0.137573, 0.137573, -0.948242, -0.150391, 0.123413, -0.948242, -0.161743, 0.108093, -0.948242, -0.171509, 0.0917358, -0.948242, -0.179688, 0.0744629, -0.948242, -0.186157, 0.056488, -0.948242, -0.190796, 0.0379639, -0.948242, -0.193604, 0.0190735, -0.948242, -0.19458, 0, -0.948242, -0.193604, -0.0190735, -0.948242, -0.190796, -0.0379639, -0.948242, -0.186157, -0.056488, -0.948242, -0.179688, -0.0744629, -0.948242, -0.171509, -0.0917358, -0.948242, -0.161743, -0.108093, -0.948242, -0.150391, -0.123413, -0.948242, -0.137573, -0.137573, -0.948242, -0.123413, -0.150391, -0.948242, -0.108093, -0.161743, -0.948242, -0.0917358, -0.171509, -0.948242, -0.0744629, -0.179688, -0.948242, -0.056488, -0.186157, -0.948242, -0.0379639, -0.190796, -0.948242, -0.0190735, -0.193604, -0.948242, 0, -0.19458, -0.948242, 0, -0.0987549, -0.974121, 0.0096817, -0.0983276, -0.974121, 0.0192719, -0.0968628, -0.974121, 0.0286713, -0.0945435, -0.974121, 0.0378113, -0.0912476, -0.974121, 0.0465698, -0.0870972, -0.974121, 0.0548706, -0.0821533, -0.974121, 0.0626221, -0.076355, -0.974121, 0.0698242, -0.0698242, -0.974121, 0.076355, -0.0626221, -0.974121, 0.0821533, -0.0548706, -0.974121, 0.0870972, -0.0465698, -0.974121, 0.0912476, -0.0378113, -0.974121, 0.0945435, -0.0286713, -0.974121, 0.0968628, -0.0192719, -0.974121, 0.0983276, -0.0096817, -0.974121, 0.0987549, 0, -0.974121, 0.0983276, 0.0096817, -0.974121, 0.0968628, 0.0192719, -0.974121, 0.0945435, 0.0286713, -0.974121, 0.0912476, 0.0378113, -0.974121, 0.0870972, 0.0465698, -0.974121, 0.0821533, 0.0548706, -0.974121, 0.076355, 0.0626221, -0.974121, 0.0698242, 0.0698242, -0.974121, 0.0626221, 0.076355, -0.974121, 0.0548706, 0.0821533, -0.974121, 0.0465698, 0.0870972, -0.974121, 0.0378113, 0.0912476, -0.974121, 0.0286713, 0.0945435, -0.974121, 0.0192719, 0.0968628, -0.974121, 0.0096817, 0.0983276, -0.974121, 0, 0.0987549, -0.974121, -0.0096817, 0.0983276, -0.974121, -0.0192719, 0.0968628, -0.974121, -0.0286713, 0.0945435, -0.974121, -0.0378113, 0.0912476, -0.974121, -0.0465698, 0.0870972, -0.974121, -0.0548706, 0.0821533, -0.974121, -0.0626221, 0.076355, -0.974121, -0.0698242, 0.0698242, -0.974121, -0.076355, 0.0626221, -0.974121, -0.0821533, 0.0548706, -0.974121, -0.0870972, 0.0465698, -0.974121, -0.0912476, 0.0378113, -0.974121, -0.0945435, 0.0286713, -0.974121, -0.0968628, 0.0192719, -0.974121, -0.0983276, 0.0096817, -0.974121, -0.0987549, 0, -0.974121, -0.0983276, -0.0096817, -0.974121, -0.0968628, -0.0192719, -0.974121, -0.0945435, -0.0286713, -0.974121, -0.0912476, -0.0378113, -0.974121, -0.0870972, -0.0465698, -0.974121, -0.0821533, -0.0548706, -0.974121, -0.076355, -0.0626221, -0.974121, -0.0698242, -0.0698242, -0.974121, -0.0626221, -0.076355, -0.974121, -0.0548706, -0.0821533, -0.974121, -0.0465698, -0.0870972, -0.974121, -0.0378113, -0.0912476, -0.974121, -0.0286713, -0.0945435, -0.974121, -0.0192719, -0.0968628, -0.974121, -0.0096817, -0.0983276, -0.974121, 0, -0.0987549, -0.974121, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291, 0, 0, -0.98291 ) [node name="Player" type="KinematicBody" index="0"] @@ -28,10 +28,11 @@ axis_lock_angular_y = false axis_lock_angular_z = false collision/safe_margin = 0.001 script = ExtResource( 1 ) +Speed = 10 [node name="MeshInstance" type="MeshInstance" parent="." index="0"] -transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0 ) +transform = Transform( 1, 0, 0, 0, -4.37114e-008, -1, 0, 1, -4.37114e-008, 0, 0, 0 ) layers = 1 material_override = null cast_shadow = 1 @@ -47,7 +48,7 @@ material/0 = null [node name="CollisionShape" type="CollisionShape" parent="." index="1"] -transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0 ) +transform = Transform( 1, 0, 0, 0, -4.37114e-008, -1, 0, 1, -4.37114e-008, 0, 0, 0 ) shape = SubResource( 2 ) disabled = false diff --git a/scenes/World_test.tscn b/scenes/World_test.tscn new file mode 100644 index 0000000..6a54809 --- /dev/null +++ b/scenes/World_test.tscn @@ -0,0 +1,124 @@ +[gd_scene load_steps=6 format=2] + +[ext_resource path="res://scenes/Player.tscn" type="PackedScene" id=1] +[ext_resource path="res://addons/alanscodelog.gimbalcontrol/GimbalControl.gd" type="Script" id=2] +[ext_resource path="res://addons/alanscodelog.gimbalcontrol/icon.png" type="Texture" id=3] + +[sub_resource type="QuadMesh" id=1] + +custom_aabb = AABB( 0, 0, 0, 0, 0, 0 ) +size = Vector2( 10, 10 ) + +[sub_resource type="ConvexPolygonShape" id=2] + +points = PoolVector3Array( -5, -5, 0, -5, 5, 0, 5, 5, 0, 5, -5, 0 ) + +[node name="Spatial" type="Spatial" index="0"] + +[node name="StaticBody" type="StaticBody" parent="." index="0"] + +editor/display_folded = true +input_ray_pickable = true +input_capture_on_drag = false +collision_layer = 1 +collision_mask = 1 +friction = 1.0 +bounce = 0.0 +constant_linear_velocity = Vector3( 0, 0, 0 ) +constant_angular_velocity = Vector3( 0, 0, 0 ) + +[node name="MeshInstance" type="MeshInstance" parent="StaticBody" index="0"] + +transform = Transform( 1, 0, 0, 0, -4.37114e-008, 1, 0, -1, -4.37114e-008, 0, 0, 0 ) +layers = 1 +material_override = null +cast_shadow = 1 +extra_cull_margin = 0.0 +use_in_baked_light = false +lod_min_distance = 0.0 +lod_min_hysteresis = 0.0 +lod_max_distance = 0.0 +lod_max_hysteresis = 0.0 +mesh = SubResource( 1 ) +skeleton = NodePath("..") +material/0 = null + +[node name="CollisionShape" type="CollisionShape" parent="StaticBody" index="1"] + +transform = Transform( 1, 0, 0, 0, -4.37114e-008, 1, 0, -1, -4.37114e-008, 0, 0, 0 ) +shape = SubResource( 2 ) +disabled = false + +[node name="Player" parent="." index="1" instance=ExtResource( 1 )] + +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0 ) +_sections_unfolded = [ "Transform" ] + +[node name="GimbalControl" type="Spatial" parent="Player" index="2"] + +script = ExtResource( 2 ) +__meta__ = { +"_editor_icon": ExtResource( 3 ) +} +target = NodePath("..") +move_to_target_on_change = true +interpolate_target_change = true +allow_stop_move_interpolation = true +interpolate_set_rotation_to = true +allow_stop_rotation_interpolation = true +interpolation_speed = 2 +rotate_globally = false +move_speed = 2 +look_speed = 0.3 +zoom_multiplier = 3 +scroll_zoom_multiplier = 5 +default_distance = 10 +min_distance = 0 +max_distance = 50 +zoom_toggle_distances = [ 0, 20, 40 ] +reverse_zoom_toggle_order = false +first_person_distance = 1 +rotation_limit_up_in_degrees = 90 +rotation_limit_down_in_degrees = 90 +rotation_limit_right_in_degrees = 360 +rotation_limit_left_in_degrees = 360 +start_rotation_in_degrees = Vector2( 0, 0 ) +reverse_up_down = false +reverse_left_right = false +reverse_mouse_zoom = false +enable_mouse_dragging = false +hide_mouse = true +enable_mouse_look = true +disable_right_left = true +emit_right_left = true +look_right_action_name = "look_right" +look_left_action_name = "look_left" +look_up_action_name = "look_up" +look_down_action_name = "look_down" +look_click_action_name = "look_click" +look_zoom_in_action_name = "look_zoom_in" +look_zoom_out_action_name = "look_zoom_out" +look_zoom_toggle_action_name = "ui_up" + +[node name="Camera" type="Camera" parent="Player/GimbalControl" index="0"] + +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) +keep_aspect = 1 +cull_mask = 1048575 +environment = null +h_offset = 0.0 +v_offset = 0.0 +doppler_tracking = 0 +projection = 0 +current = true +fov = 70.0 +size = 1.0 +near = 0.05 +far = 100.0 +_sections_unfolded = [ "Transform" ] + +[connection signal="look_left" from="Player/GimbalControl" to="Player" method="_on_look_left"] + +[connection signal="look_right" from="Player/GimbalControl" to="Player" method="_on_look_right"] + + diff --git a/scripts/Player/PlayerController.gd b/scripts/Player/PlayerController.gd index 8e467d6..bba646e 100644 --- a/scripts/Player/PlayerController.gd +++ b/scripts/Player/PlayerController.gd @@ -2,22 +2,31 @@ extends KinematicBody const UP = Vector3(0, 1, 0) +export var Speed = 10 + var Velocity = Vector3() func _process(delta): var vel = Vector3() + var b = get_global_transform().basis - if Input.is_action_pressed("player_up"): - vel.x = 1 - elif Input.is_action_pressed("player_down"): - vel.x = -1 + if Input.is_action_pressed("move_up"): + vel -= b.z + elif Input.is_action_pressed("move_down"): + vel += b.z - if Input.is_action_pressed("player_right"): - vel.z = 1 - elif Input.is_action_pressed("player_left"): - vel.z = -1 + if Input.is_action_pressed("move_right"): + vel += b.x + elif Input.is_action_pressed("move_left"): + vel -= b.x - Velocity = vel + Velocity = vel * Speed func _physics_process(delta): - move_and_slide(Velocity, UP) \ No newline at end of file + move_and_slide(Velocity, UP) + +func _on_look_left(amount): + rotate_y(amount) + +func _on_look_right(amount): + rotate_y(amount)