diff options
Diffstat (limited to 'demos/2d')
-rw-r--r-- | demos/2d/shower_of_bullets/bullet.png | bin | 0 -> 477 bytes | |||
-rw-r--r-- | demos/2d/shower_of_bullets/bullets.gd | 76 | ||||
-rw-r--r-- | demos/2d/shower_of_bullets/engine.cfg | 16 | ||||
-rw-r--r-- | demos/2d/shower_of_bullets/face_happy.png | bin | 0 -> 1243 bytes | |||
-rw-r--r-- | demos/2d/shower_of_bullets/face_sad.png | bin | 0 -> 1240 bytes | |||
-rw-r--r-- | demos/2d/shower_of_bullets/icon.png | bin | 0 -> 2777 bytes | |||
-rw-r--r-- | demos/2d/shower_of_bullets/shower.gd | 32 | ||||
-rw-r--r-- | demos/2d/shower_of_bullets/shower.scn | bin | 0 -> 1836 bytes |
8 files changed, 124 insertions, 0 deletions
diff --git a/demos/2d/shower_of_bullets/bullet.png b/demos/2d/shower_of_bullets/bullet.png Binary files differnew file mode 100644 index 0000000000..7466374129 --- /dev/null +++ b/demos/2d/shower_of_bullets/bullet.png diff --git a/demos/2d/shower_of_bullets/bullets.gd b/demos/2d/shower_of_bullets/bullets.gd new file mode 100644 index 0000000000..f76fcc38ba --- /dev/null +++ b/demos/2d/shower_of_bullets/bullets.gd @@ -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 + + diff --git a/demos/2d/shower_of_bullets/engine.cfg b/demos/2d/shower_of_bullets/engine.cfg new file mode 100644 index 0000000000..cad5751985 --- /dev/null +++ b/demos/2d/shower_of_bullets/engine.cfg @@ -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 diff --git a/demos/2d/shower_of_bullets/face_happy.png b/demos/2d/shower_of_bullets/face_happy.png Binary files differnew file mode 100644 index 0000000000..6ed643b62d --- /dev/null +++ b/demos/2d/shower_of_bullets/face_happy.png diff --git a/demos/2d/shower_of_bullets/face_sad.png b/demos/2d/shower_of_bullets/face_sad.png Binary files differnew file mode 100644 index 0000000000..d6318b20a3 --- /dev/null +++ b/demos/2d/shower_of_bullets/face_sad.png diff --git a/demos/2d/shower_of_bullets/icon.png b/demos/2d/shower_of_bullets/icon.png Binary files differnew file mode 100644 index 0000000000..432c74a5a3 --- /dev/null +++ b/demos/2d/shower_of_bullets/icon.png diff --git a/demos/2d/shower_of_bullets/shower.gd b/demos/2d/shower_of_bullets/shower.gd new file mode 100644 index 0000000000..bba8431764 --- /dev/null +++ b/demos/2d/shower_of_bullets/shower.gd @@ -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 diff --git a/demos/2d/shower_of_bullets/shower.scn b/demos/2d/shower_of_bullets/shower.scn Binary files differnew file mode 100644 index 0000000000..648888d099 --- /dev/null +++ b/demos/2d/shower_of_bullets/shower.scn |