GodotWIP/Position2D.gd

96 lines
3.1 KiB
GDScript

extends Position2D
export(String) var LINE_COLOR_HEX = '#FFEB3B'
var grid_position = Vector2()
var grid_size = Vector2()
var t = 0.0
onready var parent = get_node("../Player")
#onready var parent = $Player
func _ready():
# If you drag the camera from the OffsetPivot node,
# its position will not be (0, 0)
#$Camera2D.global_position = Vector2(160,90) # when doing grid snapping
#$Left.position = Vector2(160,90)
$Camera2D.position = Vector2(0,-4)
#grid_size = OS.get_screen_size()
grid_size = get_node("/root").size
#grid_size = get_node("/root").get_visible_rect().size
print(grid_size)
set_as_toplevel(true)
update_grid_position()
print("Camera Set: ",grid_position, position)
print("Ray Left: ", $Left.global_position, $Left.cast_to)
func _physics_process(delta):
t += delta * 0.4
#print(parent.position.x)
update_grid_position()
#draw_line( Vector2(0, -half_line_length), Vector2(0, half_line_length), color, 3.0)
#func _draw():
# var color = Color(LINE_COLOR_HEX)
# draw_line( $Left.position, $Left.cast_to, color, 3.0)
# draw_line( Vector2(0,0), Vector2(200,200), color, 3.0)
func update_grid_position():
var new_grid_position = calculate_grid_position()
# if $Left.is_colliding():
# print("Oh God! No!")
# if grid_position == new_grid_position:
# return
grid_position = new_grid_position
jump_to_grid_position()
#$Left.position = Vector2(grid_position * grid_size)
#print("Ray Left: ", $Left.global_position, $Left.cast_to)
func calculate_grid_position():
# this needs to heavily round off the parents position
var x_offset = floor(parent.position.x / grid_size.x)
var y_offset = floor(parent.position.y / grid_size.y)
var x = round(x_offset)
#var x = (((grid_position.x * grid_size.x) + ((grid_position.x + 1) * grid_size.x))/2)
var y = round(y_offset)
#var y = round(parent.position.y / grid_size.y)
return Vector2(x, y)
func jump_to_grid_position():
#var x_pos = (((grid_position.x * grid_size.x) + ((grid_position.x + 1) * grid_size.x))/2)
# rounding or flooring position seems to just cause a lot of jitter
var x_pos = (parent.position.x - grid_size.x/2)
# if (x_pos - grid_size.x/2) < 0:
# x_pos = grid_size.x/2
# if x_pos < 0:
# x_pos = 0
if $Left.is_colliding():
#print("Oh God! No! ", $Left.get_collision_point().x, $Left.global_position)
$Camera2D.limit_left = $Left.get_collision_point().x
# attempts to just change the position to the collision point created a
# ghosting behavior, now I just set the limit of the camera to the point
#x_pos = $Left.get_collision_point().x+1
#position = Vector2($Left.get_collision_point().x+1, grid_position.y * grid_size.y)
else:
$Camera2D.limit_left = -10000000
if $Right.is_colliding():
print("Oh God! No! ", $Right.get_collision_point().x, $Right.global_position)
$Camera2D.limit_right = $Right.get_collision_point().x
else:
$Camera2D.limit_right = 10000000
position = Vector2( x_pos ,grid_position.y * grid_size.y)
#$Camera2D.force_update_scroll()
#position = Vector2( grid_position * grid_size)
#print("Camera Move: ",grid_position, position)
#func _physics_process(delta):
#
# $Sprite2D.position = $A.position.lerp($B.position, t)