-
Notifications
You must be signed in to change notification settings - Fork 4
/
target_tracker.gd
42 lines (25 loc) · 1.08 KB
/
target_tracker.gd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
extends Spatial
onready var sprite = $Sprite
var current_cam #the current camera
var to2d #parent 3d position to 2d position
var screen_border_offset = Vector2( 20.0, 20.0 )
func _ready():
pass
func _process(delta):
#get current camera
current_cam = get_tree().get_root().get_camera()
#if cant get current cam exit
if not current_cam: return
#convert objects 3d point to onscreen 2d point
to2d = current_cam.unproject_position(get_global_transform().origin)
#get 2d screen viewport rect
var viewport_rect = sprite.get_viewport_rect()
#incase you forgot what clamp does
#float clamp(value: float, min: float, max: float) example:clamp(100,1,50)=50 clamp(-10,1,50)=1
#set sprite xy pos (limit to border offset)
sprite.position.x = clamp(to2d.x, screen_border_offset.x, viewport_rect.size.x - screen_border_offset.x)
sprite.position.y = clamp(to2d.y, screen_border_offset.y, viewport_rect.size.y - screen_border_offset.y)
#show only when object is offscreen
if viewport_rect.has_point(to2d):sprite.visible = false
else:sprite.visible = true
pass #end _process