96 lines
3.1 KiB
GDScript
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 = PlayerInfo
|
|
#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.player_position.x / grid_size.x)
|
|
var y_offset = floor(parent.player_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.player_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)
|