From dcdc9171cd919c24291841acbcefc62eec7db00b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robin=20H=C3=BCbner?= Date: Fri, 11 Aug 2017 23:10:43 +0200 Subject: [PATCH] boolet impacts --- Asteroid.gd | 12 +++++------- Bullet.gd | 23 +++++++++++++++++++++++ Bullet.tscn | 1 - BulletImpact.gd | 16 ++++++++++++++++ BulletImpact.tscn | 14 ++++++++++++++ Game.tscn | 7 ++++++- raw/bullet_impact.ase | 3 +++ raw/bullet_impact.png | Bin 0 -> 1162 bytes raw/bullet_impact.png.flags | 2 ++ 9 files changed, 69 insertions(+), 9 deletions(-) create mode 100644 BulletImpact.gd create mode 100644 BulletImpact.tscn create mode 100644 raw/bullet_impact.ase create mode 100644 raw/bullet_impact.png create mode 100644 raw/bullet_impact.png.flags diff --git a/Asteroid.gd b/Asteroid.gd index 4d33670..eb35e0b 100644 --- a/Asteroid.gd +++ b/Asteroid.gd @@ -30,8 +30,11 @@ func wrap(v, v_min, v_max): else: return v -func explode(): +func on_explode(): queue_free() + +func do_damage(v): + health -= v func _fixed_process(delta): @@ -40,13 +43,8 @@ func _fixed_process(delta): # cur_pos.y = wrap(cur_pos.y, 1, get_viewport().get_rect().size.y) # set_pos(cur_pos) - if is_colliding(): - var e = get_collider() - if e.type() == "Bullet": - health -= 25 - if health <= 0: - explode() + on_explode() self.move(velocity) self.rotate(rot_vel) diff --git a/Bullet.gd b/Bullet.gd index f843396..bcb6cdf 100644 --- a/Bullet.gd +++ b/Bullet.gd @@ -1,8 +1,12 @@ extends KinematicBody2D +var BulletImpact = load("res://BulletImpact.tscn") + var velocity = Vector2(1, 0) var lifetime = 16 # seconds +var bullet_dmg = 0.25 + onready var sprite = get_node("Sprite") func _ready(): @@ -14,6 +18,23 @@ func fire(delta, vel, dir, speed): func type(): return "Bullet" + +func on_impact(e): + + # create bullet impact + var new_bi = BulletImpact.instance() + e.add_child(new_bi) + # get_tree().get_root().add_child(new_bi) + new_bi.set_global_pos(get_collision_pos() + velocity/2) + + # align along "hit normal, the lazy way" + new_bi.set_global_rot((-get_collision_normal()).angle()) + + # new_bi.rotate(deg2rad(180)) + + # damage and free + e.do_damage(bullet_dmg) + queue_free() func _fixed_process(delta): @@ -22,6 +43,8 @@ func _fixed_process(delta): if is_colliding(): var e = get_collider() + if e.type() == "Asteroid": + on_impact(e) if lifetime <= 0: queue_free() \ No newline at end of file diff --git a/Bullet.tscn b/Bullet.tscn index 02315b8..1e5d693 100644 --- a/Bullet.tscn +++ b/Bullet.tscn @@ -11,7 +11,6 @@ extents = Vector2( 0.99762, 3.98857 ) [node name="Bullet" type="KinematicBody2D"] transform/rot = 180.0 -transform/scale = Vector2( 2, 2 ) input/pickable = false shapes/0/shape = SubResource( 1 ) shapes/0/transform = Matrix32( 1, 0, 0, 1, 0, 0 ) diff --git a/BulletImpact.gd b/BulletImpact.gd new file mode 100644 index 0000000..4b723ec --- /dev/null +++ b/BulletImpact.gd @@ -0,0 +1,16 @@ +extends Sprite + +var current_time = 0 +var frames_per_second = 0.05 + +func _ready(): + set_process(true) + +func _process(delta): + + if int(current_time / frames_per_second) >= get_hframes() - 1: + queue_free() + + set_frame(int(current_time / frames_per_second)) + + current_time += delta diff --git a/BulletImpact.tscn b/BulletImpact.tscn new file mode 100644 index 0000000..ec0a577 --- /dev/null +++ b/BulletImpact.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=3 format=1] + +[ext_resource path="res://raw/bullet_impact.png" type="Texture" id=1] +[ext_resource path="res://BulletImpact.gd" type="Script" id=2] + +[node name="BulletImpact" type="Sprite"] + +transform/scale = Vector2( 0.25, 0.25 ) +texture = ExtResource( 1 ) +hframes = 5 +region_rect = Rect2( 0, 0, 32, 48 ) +script/script = ExtResource( 2 ) + + diff --git a/Game.tscn b/Game.tscn index 1c056f1..de40a35 100644 --- a/Game.tscn +++ b/Game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=8 format=1] +[gd_scene load_steps=9 format=1] [ext_resource path="res://Game.gd" type="Script" id=1] [ext_resource path="res://Minimap.tscn" type="PackedScene" id=2] @@ -7,6 +7,7 @@ [ext_resource path="res://Player.tscn" type="PackedScene" id=5] [ext_resource path="res://raw/space.png" type="Texture" id=6] [ext_resource path="res://EnemyGrunt.tscn" type="PackedScene" id=7] +[ext_resource path="res://BulletImpact.tscn" type="PackedScene" id=8] [node name="Game" type="Node"] @@ -71,4 +72,8 @@ region_rect = Rect2( 0, 0, 8192, 8192 ) transform/pos = Vector2( 127.878, -20.3627 ) transform/scale = Vector2( 1.5, 1.5 ) +[node name="BulletImpact" parent="." instance=ExtResource( 8 )] + +transform/pos = Vector2( 53.4955, -25.9372 ) + diff --git a/raw/bullet_impact.ase b/raw/bullet_impact.ase new file mode 100644 index 0000000..72df931 --- /dev/null +++ b/raw/bullet_impact.ase @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:896eb637ccb13bcf07b70f21ebba8b0c86f10332466dff35253fe4a6a03609a8 +size 1504 diff --git a/raw/bullet_impact.png b/raw/bullet_impact.png new file mode 100644 index 0000000000000000000000000000000000000000..1805158022bed9ba126eb19b551e4d9909a3e389 GIT binary patch literal 1162 zcmV;51a001xu1^@s6mZ@=W000D0NklPqi42h?yg?>Nn@i*F^{IT95z<+&F>(+DfB;2_bb{~B z7h57hCj13}ptIQoK@eCt@AgB9HcR%eWjpvIXd()M{Q|6uh}-4#2?8@Y!nqZ(b+soD z`1pQ)P=$5(^66gF^KL)fzrU@j1sF2~*chA`u;@|()7sV$T8gG76N~{dQ6WiQP->Us z71yG#J%N@<=4=o+yYLx{3ct8ElD$$n<$1Rsr0ZV$!4=CN4;GZZO529d z_$TJ_`Z!!(A1Bwjz9k=)IfOVFES?U2N((6o$1*1Me$*!J2ZF=G?6{2th^s%GRGYLNwFP6qwVE4~Rvv;Rm#-(@3w%8daF0Iyw2uWY z5A%drOJDj&htD4GnFICW+*|?yEGC@yPyvp@l2L%%B6tOtLb9iYUU<*tcvf&<$-b9A zaTI426BZzMPqLRnTOhDSbFkDHnoY_3dFL(7mCm8`12%`|$}m!{!wIe59=m>foa8UG zE!eUwrnE4ym|70jA5NVn8q1>N{H#Bmx>U}mLHkQNX${ZSthbaFPYSiT9}dkP+koa7 zJf27sptOUw+Ac*a9e{;r_=20pSEQvb=Ysr1i z&NJ1Y3qjBhhZt{P43r^gh${dbj%uGSEAow0hSQIWV_i1 zKoikuQ4^n2*J&HiT;|?`_u7GfNvwI`TC^fQ)&ow$B+7MK&5zJ+MEVMqhm@ReF(-&Sq;; z^GNKx+YhP-