SceneMainLoop -> SceneTree

-=-=-=-=-=-=-=-=-=-=-=-=-=-

*YOUR SOURCE MIGHT NOT WORK*
For mor information on fix:
https://github.com/okamstudio/godot/wiki/devel_scene_tree

Other stuff:
-Shower of bullets demo
-Fixes all around
This commit is contained in:
Juan Linietsky
2014-11-05 21:20:42 -03:00
parent ad587cc27f
commit bf79221919
10 changed files with 128 additions and 4 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 B

View File

@@ -0,0 +1,76 @@
extends Node2D
# This demo is an example of controling a high number of 2D objects with logic and collision without using scene nodes.
# This technique is a lot more efficient than using instancing and nodes, but requires more programming and is less visual
const BULLET_COUNT = 500
const SPEED_MIN = 20
const SPEED_MAX = 50
var bullets=[]
var shape
class Bullet:
var pos = Vector2()
var speed = 1.0
var body = RID()
func _draw():
var t = preload("res://bullet.png")
var tofs = -t.get_size()*0.5
for b in bullets:
draw_texture(t,b.pos+tofs)
func _process(delta):
var width = get_viewport_rect().size.x*2.0
var mat = Matrix32()
for b in bullets:
b.pos.x-=b.speed*delta
if (b.pos.x < -30):
b.pos.x+=width
mat.o=b.pos
Physics2DServer.body_set_state(b.body,Physics2DServer.BODY_STATE_TRANSFORM,mat)
update()
func _ready():
shape = Physics2DServer.shape_create(Physics2DServer.SHAPE_CIRCLE)
Physics2DServer.shape_set_data(shape,8) #radius
for i in range(BULLET_COUNT):
var b = Bullet.new()
b.speed=rand_range(SPEED_MIN,SPEED_MAX)
b.body = Physics2DServer.body_create(Physics2DServer.BODY_MODE_KINEMATIC)
Physics2DServer.body_set_space(b.body,get_world_2d().get_space())
Physics2DServer.body_add_shape(b.body,shape)
b.pos = Vector2( get_viewport_rect().size * Vector2(randf()*2.0,randf()) ) #twice as long
b.pos.x += get_viewport_rect().size.x # start outside
var mat = Matrix32()
mat.o=b.pos
Physics2DServer.body_set_state(b.body,Physics2DServer.BODY_STATE_TRANSFORM,mat)
bullets.append(b)
set_process(true)
func _exit_tree():
for b in bullets:
Physics2DServer.free(b.body)
Physics2DServer.free(shape)
# Initalization here
bullets.clear()
pass

View File

@@ -0,0 +1,16 @@
[application]
name="Bullet Shower"
main_scene="res://shower.scn"
icon="res://icon.png"
[display]
width=1024
height=600
resizable=true
stretch_aspect="keep"
[physics_2d]
cell_size=64

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1,32 @@
extends Node2D
# member variables here, example:
# var a=2
# var b="textvar"
var touching=0
func _input(ev):
if (ev.type==InputEvent.MOUSE_MOTION):
get_node("player").set_pos(ev.pos-Vector2(0,16))
func _on_player_body_enter_shape( body_id, body, body_shape, area_shape ):
touching+=1
if (touching==1):
get_node("player/sprite").set_frame(1)
func _on_player_body_exit_shape( body_id, body, body_shape, area_shape ):
touching-=1
if (touching==0):
get_node("player/sprite").set_frame(0)
func _ready():
set_process_input(true)
pass

Binary file not shown.

View File

@@ -12,12 +12,12 @@ func goto_scene(scene):
#instance the new scene
current_scene = s.instance()
#add it to the active scene, as child of root
get_scene().get_root().add_child(current_scene)
get_tree().get_root().add_child(current_scene)
func _ready():
# get the current scene
# it is always the last child of root,
# after the autoloaded nodes
var root = get_scene().get_root()
var root = get_tree().get_root()
current_scene = root.get_child( root.get_child_count() -1 )

View File

@@ -5,11 +5,11 @@ extends Spatial
func _on_pause_pressed():
get_node("pause_popup").set_exclusive(true)
get_node("pause_popup").popup()
get_scene().set_pause(true)
get_tree().set_pause(true)
func _on_unpause_pressed():
get_node("pause_popup").hide()
get_scene().set_pause(false)
get_tree().set_pause(false)