diff options
Diffstat (limited to 'demos/2d/shower_of_bullets')
-rw-r--r-- | demos/2d/shower_of_bullets/bullets.gd | 60 | ||||
-rw-r--r-- | demos/2d/shower_of_bullets/shower.gd | 30 |
2 files changed, 40 insertions, 50 deletions
diff --git a/demos/2d/shower_of_bullets/bullets.gd b/demos/2d/shower_of_bullets/bullets.gd index 79f4faaae6..b62c796f32 100644 --- a/demos/2d/shower_of_bullets/bullets.gd +++ b/demos/2d/shower_of_bullets/bullets.gd @@ -4,73 +4,69 @@ 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 +# Member variables const BULLET_COUNT = 500 const SPEED_MIN = 20 const SPEED_MAX = 50 -var bullets=[] +var bullets = [] var shape + +# Inner classes class Bullet: var pos = Vector2() var speed = 1.0 var body = RID() - -func _draw(): +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) - - + 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 + 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) + 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 +func _ready(): + # Initialization here + 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.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) + 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 + 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) + mat.o = b.pos + Physics2DServer.body_set_state(b.body, Physics2DServer.BODY_STATE_TRANSFORM, mat) bullets.append(b) - - - set_process(true) - + set_process(true) + + func _exit_tree(): for b in bullets: Physics2DServer.free_rid(b.body) Physics2DServer.free_rid(shape) - # Initalization here bullets.clear() - - pass - - diff --git a/demos/2d/shower_of_bullets/shower.gd b/demos/2d/shower_of_bullets/shower.gd index bba8431764..0f87c60bcd 100644 --- a/demos/2d/shower_of_bullets/shower.gd +++ b/demos/2d/shower_of_bullets/shower.gd @@ -1,32 +1,26 @@ extends Node2D -# member variables here, example: -# var a=2 -# var b="textvar" +# Member variables +var touching = 0 -var touching=0 +func _input(event): + if (event.type == InputEvent.MOUSE_MOTION): + get_node("player").set_pos(event.pos - Vector2(0, 16)) -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): +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): +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(): + # Initialization here set_process_input(true) - pass |