mirror of
https://github.com/RYGhub/the-cold-night.git
synced 2024-11-22 04:34:19 +00:00
💥 Properly setup bullet collisions
This commit is contained in:
parent
f81acea7c8
commit
431255dd13
7 changed files with 37 additions and 8 deletions
|
@ -84,8 +84,9 @@ player_shoot={
|
||||||
2d_render/layer_1="Game"
|
2d_render/layer_1="Game"
|
||||||
2d_render/layer_2="UserInterface"
|
2d_render/layer_2="UserInterface"
|
||||||
2d_physics/layer_1="Entities"
|
2d_physics/layer_1="Entities"
|
||||||
2d_physics/layer_2="Projectiles"
|
2d_physics/layer_2="Damageable"
|
||||||
2d_physics/layer_3="UI"
|
2d_physics/layer_3="Projectiles"
|
||||||
|
2d_physics/layer_4="UI"
|
||||||
|
|
||||||
[physics]
|
[physics]
|
||||||
|
|
||||||
|
|
21
src/entities/Bullet.gd
Normal file
21
src/entities/Bullet.gd
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
extends KinematicBody2D
|
||||||
|
|
||||||
|
|
||||||
|
export var damage: int = 1
|
||||||
|
|
||||||
|
|
||||||
|
func _on_BulletMovement_hit(collision: KinematicCollision2D):
|
||||||
|
# Find the owner of this bullet
|
||||||
|
var bullet_owner = Ownership.get_value(self)
|
||||||
|
# Check if the bullet should do damage
|
||||||
|
var same_alliance = Alliance.compare(bullet_owner, collision.collider)
|
||||||
|
if same_alliance:
|
||||||
|
return
|
||||||
|
# Check if it is possible to damage the collider
|
||||||
|
var damageable = collision.collider.get_node("Damageable")
|
||||||
|
if damageable == null:
|
||||||
|
return
|
||||||
|
# Damage the collider!
|
||||||
|
damageable.health -= damage
|
||||||
|
# Alas, destroy self
|
||||||
|
queue_free()
|
|
@ -1,18 +1,20 @@
|
||||||
[gd_scene load_steps=5 format=2]
|
[gd_scene load_steps=6 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://src/mechanics/White.png" type="Texture" id=1]
|
[ext_resource path="res://src/mechanics/White.png" type="Texture" id=1]
|
||||||
[ext_resource path="res://src/entities/behaviours/BulletMovement.gd" type="Script" id=2]
|
[ext_resource path="res://src/entities/behaviours/BulletMovement.gd" type="Script" id=2]
|
||||||
[ext_resource path="res://src/entities/behaviours/Ownership.tscn" type="PackedScene" id=3]
|
[ext_resource path="res://src/entities/behaviours/Ownership.tscn" type="PackedScene" id=3]
|
||||||
|
[ext_resource path="res://src/entities/Bullet.gd" type="Script" id=4]
|
||||||
|
|
||||||
[sub_resource type="RectangleShape2D" id=1]
|
[sub_resource type="RectangleShape2D" id=1]
|
||||||
extents = Vector2( 16, 8 )
|
extents = Vector2( 16, 8 )
|
||||||
|
|
||||||
[node name="Bullet" type="KinematicBody2D"]
|
[node name="Bullet" type="KinematicBody2D"]
|
||||||
collision_layer = 2
|
collision_layer = 4
|
||||||
|
collision_mask = 2
|
||||||
|
script = ExtResource( 4 )
|
||||||
|
|
||||||
[node name="Shape" type="CollisionShape2D" parent="."]
|
[node name="Shape" type="CollisionShape2D" parent="."]
|
||||||
shape = SubResource( 1 )
|
shape = SubResource( 1 )
|
||||||
disabled = true
|
|
||||||
|
|
||||||
[node name="Sprite" type="Sprite" parent="Shape"]
|
[node name="Sprite" type="Sprite" parent="Shape"]
|
||||||
scale = Vector2( 1, 0.5 )
|
scale = Vector2( 1, 0.5 )
|
||||||
|
@ -22,3 +24,5 @@ texture = ExtResource( 1 )
|
||||||
script = ExtResource( 2 )
|
script = ExtResource( 2 )
|
||||||
|
|
||||||
[node name="Ownership" parent="." instance=ExtResource( 3 )]
|
[node name="Ownership" parent="." instance=ExtResource( 3 )]
|
||||||
|
|
||||||
|
[connection signal="hit" from="BulletMovement" to="." method="_on_BulletMovement_hit"]
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
extents = Vector2( 16, 16 )
|
extents = Vector2( 16, 16 )
|
||||||
|
|
||||||
[node name="Enemy" type="KinematicBody2D"]
|
[node name="Enemy" type="KinematicBody2D"]
|
||||||
|
collision_layer = 3
|
||||||
|
|
||||||
[node name="Shape" type="CollisionShape2D" parent="."]
|
[node name="Shape" type="CollisionShape2D" parent="."]
|
||||||
shape = SubResource( 1 )
|
shape = SubResource( 1 )
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
extents = Vector2( 16, 16 )
|
extents = Vector2( 16, 16 )
|
||||||
|
|
||||||
[node name="Player" type="KinematicBody2D"]
|
[node name="Player" type="KinematicBody2D"]
|
||||||
|
collision_layer = 3
|
||||||
collision/safe_margin = 0.02
|
collision/safe_margin = 0.02
|
||||||
|
|
||||||
[node name="Shape" type="CollisionShape2D" parent="."]
|
[node name="Shape" type="CollisionShape2D" parent="."]
|
||||||
|
|
|
@ -19,3 +19,4 @@ func shoot():
|
||||||
var rotation = new_bullet.get_angle_to(source.get_global_mouse_position())
|
var rotation = new_bullet.get_angle_to(source.get_global_mouse_position())
|
||||||
new_bullet.set_rotation(rotation)
|
new_bullet.set_rotation(rotation)
|
||||||
new_bullet.get_node("Ownership").entity_owner = source
|
new_bullet.get_node("Ownership").entity_owner = source
|
||||||
|
new_bullet.add_collision_exception_with(source)
|
||||||
|
|
|
@ -7,7 +7,7 @@ var entity_owner: Node = null
|
||||||
|
|
||||||
static func get_value(first) -> Node:
|
static func get_value(first) -> Node:
|
||||||
var first_node = first.get_node("Ownership")
|
var first_node = first.get_node("Ownership")
|
||||||
var first_alliance = null
|
var first_eowner = null
|
||||||
if first_node != null:
|
if first_node != null:
|
||||||
first_alliance = first_node.alliance
|
first_eowner = first_node.entity_owner
|
||||||
return first_alliance
|
return first_eowner
|
||||||
|
|
Loading…
Reference in a new issue