Bullets collide with blocks and players

main
copygirl 4 years ago
parent a974149c9e
commit 1dc140d31d
  1. 9
      project.godot
  2. 2
      scene/Block.tscn
  3. 2
      scene/Player.tscn
  4. 26
      src/Objects/Bullet.cs

@ -28,6 +28,10 @@ window/size/width=1280
window/size/height=720 window/size/height=720
window/stretch/mode="viewport" window/stretch/mode="viewport"
[global]
layer=false
[importer_defaults] [importer_defaults]
texture={ texture={
@ -104,6 +108,11 @@ ui_menu={
] ]
} }
[layer_names]
2d_physics/layer_1="players"
2d_physics/layer_2="blocks"
[rendering] [rendering]
2d/snapping/use_gpu_pixel_snap=true 2d/snapping/use_gpu_pixel_snap=true

@ -7,6 +7,8 @@
extents = Vector2( 8, 8 ) extents = Vector2( 8, 8 )
[node name="Block" type="StaticBody2D"] [node name="Block" type="StaticBody2D"]
collision_layer = 2
collision_mask = 0
script = ExtResource( 2 ) script = ExtResource( 2 )
[node name="RectangleShape" type="CollisionShape2D" parent="."] [node name="RectangleShape" type="CollisionShape2D" parent="."]

@ -22,7 +22,7 @@ radius = 8.0
[node name="Player" type="KinematicBody2D"] [node name="Player" type="KinematicBody2D"]
z_index = 10 z_index = 10
collision_layer = 0 collision_mask = 2
script = ExtResource( 3 ) script = ExtResource( 3 )
DisplayNamePath = NodePath("DisplayName") DisplayNamePath = NodePath("DisplayName")
SpritePath = NodePath("Sprite") SpritePath = NodePath("Sprite")

@ -33,18 +33,32 @@ public class Bullet : Node2D
{ {
_age += TimeSpan.FromSeconds(delta); _age += TimeSpan.FromSeconds(delta);
if (_distance < MaximumRange) {
_distance = Mathf.Min(MaximumRange, Speed * (float)_age.TotalSeconds);
Position = _startPosition + Direction * _distance;
Update();
}
if (_age > TRAIL_DURATION) { if (_age > TRAIL_DURATION) {
Modulate = new Color(Modulate, Modulate.a - delta * 2); Modulate = new Color(Modulate, Modulate.a - delta * 2);
if (Modulate.a <= 0) this.RemoveFromParent(); if (Modulate.a <= 0) this.RemoveFromParent();
} }
} }
public override void _PhysicsProcess(float delta)
{
var previousPosition = Position;
_distance = Mathf.Min(MaximumRange, Speed * (float)_age.TotalSeconds);
Position = _startPosition + Direction * _distance;
var collision = GetWorld2d().DirectSpaceState.IntersectRay(
previousPosition, Position, collisionLayer: 0b11);
if (collision.Count != 0) {
Position = (Vector2)collision["position"];
_distance = _startPosition.DistanceTo(Position);
SetPhysicsProcess(false);
}
if (_distance > MaximumRange)
SetPhysicsProcess(false);
Update();
}
public override void _Draw() public override void _Draw()
{ {
var numPoints = 2 var numPoints = 2

Loading…
Cancel
Save