Advertisement
bitetti

Optimizing game ui pt2

Aug 3rd, 2014
243
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.50 KB | None | 0 0
  1.  
  2. extends Control
  3.  
  4. export(Texture) var mira1
  5.  
  6. var global
  7. var viewPort
  8. var enemyNode
  9. var visibles = []
  10. var verts = Array()
  11. var uvs = Array()
  12. var colors = [Color(1.0,1.0,1.0,1.0),Color(1.0,1.0,1.0,1.0),Color(1.0,1.0,1.0,1.0),Color(1.0,1.0,1.0,1.0)]
  13. var angle = 0
  14. var RAD = 210*PI/180
  15. var PIH = PI/2
  16.        
  17. func _process(delta):
  18.     var cam = global.current_camera
  19.     if cam==null:
  20.         return
  21.    
  22.     #print(cam.unproject_position( Vector3(0,0,0) ))
  23.     var oudVSize = visibles.size()
  24.     visibles.clear()
  25.     var cOri = cam.get_global_transform().origin #basis.xform( Vector3(0,0,1) )
  26.     var cBas = cam.get_global_transform().basis.xform( Vector3(0,0,1) )
  27.     var rv = viewPort.get_rect()
  28.     for enemy in enemyNode.get_children():
  29.         var pos = cam.unproject_position( enemy.get_global_transform().origin )
  30.         if pos.x>=0 and pos.x<rv.size.width:
  31.             if pos.y>=0 and pos.y<rv.size.height:
  32.                 var eP = enemy.get_global_transform().origin - cOri
  33.                 if cBas.dot( eP.normalized() )<0:
  34.                     visibles.push_back(pos)
  35.    
  36.     if visibles.size()>0 or visibles.size() != oudVSize:
  37.         angle += RAD*delta
  38.         if angle>PI:
  39.             angle = -PI + angle-PI
  40.         update()
  41.    
  42.  
  43. func _draw():
  44.    
  45.     var d = Vector2(0,1).rotated(angle)
  46.     var v
  47.     uvs[0] = Vector2(0.5,0.5) + Vector2(0.5,0).rotated(angle)
  48.     uvs[1] = Vector2(0.5,0.5) + Vector2(0.5,0).rotated(angle+PIH)
  49.     uvs[2] = Vector2(0.5,0.5) + Vector2(0.5,0).rotated(angle+PI)
  50.     uvs[3] = Vector2(0.5,0.5) + Vector2(0.5,0).rotated(angle-PIH)
  51.    
  52.     if visibles.size()>0:
  53.         for p in visibles:
  54.            
  55.             verts[0] = p + Vector2(-32,-32)
  56.             verts[1] = p + Vector2( 32,-32)
  57.             verts[2] = p + Vector2( 32, 32)
  58.             verts[3] = p + Vector2(-32, 32)
  59.            
  60.             #draw_set_transform(p, angle, Vector2(1,1))
  61.             #draw_texture( mira1, Vector2(-32,-32) )
  62.            
  63.             #draw_colored_polygon( verts, Color(1.0,1.0,1.0,1.0), uvs, mira1 )
  64.             draw_primitive( verts, colors, uvs, mira1 )
  65.  
  66.  
  67. func _ready():
  68.     global = get_node("/root/Persistente")
  69.  
  70.     viewPort = get_viewport()
  71.     enemyNode = get_node("/root").get_child( get_node("/root").get_child_count() -1 ).get_node("inimigos")
  72.    
  73.     # se objeto inimigos estiver vazio monta um fake
  74.     if enemyNode==null:
  75.         enemyNode = Node.new()
  76.    
  77.     # desenha retangulo
  78.     verts.push_back( Vector2(-32,-32) )
  79.     verts.push_back( Vector2(32,-32) )
  80.     verts.push_back( Vector2(32,32) )
  81.     verts.push_back( Vector2(-32,32) )
  82.     uvs.push_back( Vector2(0,0) )
  83.     uvs.push_back( Vector2(1,0) )
  84.     uvs.push_back( Vector2(1,1) )
  85.     uvs.push_back( Vector2(0,1) )
  86.    
  87.    
  88.     #print(viewPort.get_global_canvas_transform())
  89.     set_process(true)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement