Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extends Control
- export(Texture) var mira1
- var global
- var viewPort
- var enemyNode
- var visibles = []
- var verts = Vector2Array()
- var uvs = Vector2Array()
- var angle = 0
- var RAD = 210*PI/180
- var PIH = PI/2
- func _process(delta):
- var cam = global.current_camera
- if cam==null:
- return
- #print(cam.unproject_position( Vector3(0,0,0) ))
- var oudVSize = visibles.size()
- visibles.clear()
- var cOri = cam.get_global_transform().origin #basis.xform( Vector3(0,0,1) )
- var cBas = cam.get_global_transform().basis.xform( Vector3(0,0,1) )
- var rv = viewPort.get_rect()
- for enemy in enemyNode.get_children():
- var pos = cam.unproject_position( enemy.get_global_transform().origin )
- if pos.x>=0 and pos.x<rv.size.width:
- if pos.y>=0 and pos.y<rv.size.height:
- var eP = enemy.get_global_transform().origin - cOri
- if cBas.dot( eP.normalized() )<0:
- visibles.push_back(pos)
- if visibles.size()>0 or visibles.size() != oudVSize:
- angle += RAD*delta
- if angle>PI:
- angle = -PI + angle-PI
- update()
- func _draw():
- var d = Vector2(0,1).rotated(angle)
- var v
- v = Vector2(0.5,0.5) + Vector2(0.5,0).rotated(angle)
- uvs[0].x = v.x
- uvs[0].y = v.y
- v = Vector2(0.5,0.5) + Vector2(0.5,0).rotated(angle+PIH)
- uvs[1].x = v.x
- uvs[1].y = v.y
- v = Vector2(0.5,0.5) + Vector2(0.5,0).rotated(angle+PI)
- uvs[2].x = v.x
- uvs[2].y = v.y
- v = Vector2(0.5,0.5) + Vector2(0.5,0).rotated(angle-PIH)
- uvs[3].x = v.x
- uvs[3].y = v.y
- if visibles.size()>0:
- for p in visibles:
- #draw_texture( mira1, Vector2(p.x-32,p.y-32) )
- #draw_set_transform(Vector2(p.x,p.y), 0, Vector2(1,1))
- verts[0].x = -32 + p.x
- verts[0].y = -32 + p.y
- verts[1].x = 32 + p.x
- verts[1].y = -32 + p.y
- verts[2].x = 32 + p.x
- verts[2].y = 32 + p.y
- verts[3].x = -32 + p.x
- verts[3].y = 32 + p.y
- draw_colored_polygon( verts, Color(1.0,1.0,1.0,1.0), uvs, mira1 )
- func _ready():
- global = get_node("/root/Persistente")
- viewPort = get_viewport()
- enemyNode = get_node("/root").get_child( get_node("/root").get_child_count() -1 ).get_node("inimigos")
- # se objeto inimigos estiver vazio monta um fake
- if enemyNode==null:
- enemyNode = Node.new()
- # desenha retangulo
- verts.push_back( Vector2(-32,-32) )
- verts.push_back( Vector2(32,-32) )
- verts.push_back( Vector2(32,32) )
- verts.push_back( Vector2(-32,32) )
- uvs.push_back( Vector2(0,0) )
- uvs.push_back( Vector2(1,0) )
- uvs.push_back( Vector2(1,1) )
- uvs.push_back( Vector2(0,1) )
- set_process(true)
Advertisement
Add Comment
Please, Sign In to add comment