player collision with asteroids, health displayed on hud
This commit is contained in:
parent
3de5c44ebc
commit
c942179ebd
|
|
@ -15,3 +15,5 @@ texture = ExtResource("2_rmklb")
|
|||
[node name="CollisionShape2D" type="CollisionShape2D" parent="."]
|
||||
position = Vector2(1, -1)
|
||||
shape = ExtResource("3_pxcia")
|
||||
|
||||
[connection signal="body_entered" from="." to="." method="OnBodyEntered"]
|
||||
|
|
|
|||
|
|
@ -16,7 +16,8 @@ script = ExtResource("1_dukjm")
|
|||
position = Vector2(800, 450)
|
||||
scale = Vector2(0.6, 0.6)
|
||||
collision_layer = 8
|
||||
type = 2
|
||||
color = 1
|
||||
type = 1
|
||||
|
||||
[node name="Lasers" type="Node" parent="."]
|
||||
|
||||
|
|
@ -39,6 +40,7 @@ position = Vector2(769, 202)
|
|||
[node name="Asteroid5" parent="Asteroids" instance=ExtResource("3_b8wlr")]
|
||||
position = Vector2(387, 230)
|
||||
|
||||
[connection signal="HealthUpdate" from="Player" to="." method="OnPlayerHealthUpdate"]
|
||||
[connection signal="LaserShot" from="Player" to="." method="OnPlayerLaserShot"]
|
||||
[connection signal="Exploded" from="Asteroids/Asteroid" to="." method="OnAsteroidExploded"]
|
||||
[connection signal="Exploded" from="Asteroids/Asteroid2" to="." method="OnAsteroidExploded"]
|
||||
|
|
|
|||
7
MB_FYP/scenes/hud.tres
Normal file
7
MB_FYP/scenes/hud.tres
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
[gd_resource type="LabelSettings" load_steps=2 format=3 uid="uid://lnjklxelhfuv"]
|
||||
|
||||
[ext_resource type="FontFile" uid="uid://be6xxaq8drt5q" path="res://assets/Fonts/Kenney Pixel Square.ttf" id="1_3xllx"]
|
||||
|
||||
[resource]
|
||||
font = ExtResource("1_3xllx")
|
||||
font_size = 48
|
||||
|
|
@ -1,11 +1,7 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://b6myj160l6vf8"]
|
||||
[gd_scene load_steps=3 format=3 uid="uid://b6myj160l6vf8"]
|
||||
|
||||
[ext_resource type="Script" path="res://script/hud.cs" id="1_aksh1"]
|
||||
[ext_resource type="FontFile" uid="uid://be6xxaq8drt5q" path="res://assets/Fonts/Kenney Pixel Square.ttf" id="2_2d36h"]
|
||||
|
||||
[sub_resource type="LabelSettings" id="LabelSettings_588nb"]
|
||||
font = ExtResource("2_2d36h")
|
||||
font_size = 48
|
||||
[ext_resource type="LabelSettings" uid="uid://lnjklxelhfuv" path="res://scenes/hud.tres" id="2_ns78v"]
|
||||
|
||||
[node name="HUD" type="Control"]
|
||||
layout_mode = 3
|
||||
|
|
@ -21,4 +17,13 @@ offset_top = 15.0
|
|||
offset_right = 363.0
|
||||
offset_bottom = 90.0
|
||||
text = "SCORE: 9999"
|
||||
label_settings = SubResource("LabelSettings_588nb")
|
||||
label_settings = ExtResource("2_ns78v")
|
||||
|
||||
[node name="Health" type="Label" parent="."]
|
||||
layout_mode = 0
|
||||
offset_left = 17.0
|
||||
offset_top = 95.0
|
||||
offset_right = 384.0
|
||||
offset_bottom = 167.0
|
||||
text = "Health:"
|
||||
label_settings = ExtResource("2_ns78v")
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
[gd_scene load_steps=4 format=3 uid="uid://ckh362yqjkpi0"]
|
||||
[gd_scene load_steps=5 format=3 uid="uid://ckh362yqjkpi0"]
|
||||
|
||||
[ext_resource type="Script" path="res://script/player.cs" id="1_lhmq0"]
|
||||
[ext_resource type="Texture2D" uid="uid://ofevjaw7ld0a" path="res://assets/Player/Fighter/ShipBlue.png" id="2_3806w"]
|
||||
[ext_resource type="Script" path="res://script/camera.cs" id="3_ui7sm"]
|
||||
|
||||
[sub_resource type="CircleShape2D" id="CircleShape2D_btpq3"]
|
||||
radius = 41.0488
|
||||
|
||||
[node name="Player" type="CharacterBody2D"]
|
||||
collision_mask = 5
|
||||
motion_mode = 1
|
||||
script = ExtResource("1_lhmq0")
|
||||
|
||||
|
|
@ -14,6 +16,7 @@ script = ExtResource("1_lhmq0")
|
|||
shape = SubResource("CircleShape2D_btpq3")
|
||||
|
||||
[node name="ShipSprite" type="Sprite2D" parent="."]
|
||||
texture = ExtResource("2_3806w")
|
||||
|
||||
[node name="LaserSpawn" type="Node2D" parent="."]
|
||||
position = Vector2(0, -58)
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ using System;
|
|||
public partial class Laser : Area2D
|
||||
{
|
||||
[Export]
|
||||
public int Speed { get; set;} = 500;
|
||||
public int Speed { get; set;} = 1000;
|
||||
|
||||
public Vector2 MovementVector { get; set; } = new Vector2(0, -1);
|
||||
|
||||
|
|
|
|||
|
|
@ -73,6 +73,15 @@ public partial class asteroid : Area2D
|
|||
QueueFree();
|
||||
}
|
||||
|
||||
public void OnBodyEntered(CharacterBody2D body)
|
||||
{
|
||||
if (body is player player)
|
||||
{
|
||||
player.ShipDamage(30);
|
||||
GD.Print("player asteroid collide");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public override void _PhysicsProcess(double delta)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -11,6 +11,8 @@ public partial class game : Node2D
|
|||
|
||||
public Label ScoreLabel = null;
|
||||
|
||||
public Label HealthLabel = null;
|
||||
|
||||
public hud h;
|
||||
|
||||
|
||||
|
|
@ -22,7 +24,7 @@ public partial class game : Node2D
|
|||
{
|
||||
HUD = GetNode<Control>("UI/HUD");
|
||||
ScoreLabel = GetNode<Label>("UI/HUD/Score");
|
||||
|
||||
//HealthLabel = GetNode<Label>("UI/HUD/Health");
|
||||
|
||||
Asteroids = GetNode<Node>("Asteroids");
|
||||
var a = new asteroid();
|
||||
|
|
@ -33,9 +35,8 @@ public partial class game : Node2D
|
|||
|
||||
Lasers = GetNode<Node>("Lasers");
|
||||
Player = GetNode<CharacterBody2D>("Player");
|
||||
var p = new player();
|
||||
p.LaserShot += OnPlayerLaserShot;
|
||||
|
||||
//var p = new player();
|
||||
//p.LaserShot += OnPlayerLaserShot;
|
||||
}
|
||||
|
||||
public override void _Process(double delta)
|
||||
|
|
@ -66,6 +67,15 @@ public partial class game : Node2D
|
|||
ScoreLabel.Text = "SCORE: " + score.ToString();
|
||||
}
|
||||
|
||||
public void UpdateHealthLabel(int health)
|
||||
{
|
||||
if (HealthLabel == null)
|
||||
{
|
||||
HealthLabel = GetNode<Label>("UI/HUD/Health");
|
||||
}
|
||||
HealthLabel.Text = "HEALTH: " + health.ToString();
|
||||
}
|
||||
|
||||
//Signals and Connections
|
||||
public void OnPlayerLaserShot(Area2D Laser)
|
||||
{
|
||||
|
|
@ -74,6 +84,11 @@ public partial class game : Node2D
|
|||
GD.Print(Player.Position);
|
||||
}
|
||||
|
||||
public void OnPlayerHealthUpdate(int health)
|
||||
{
|
||||
UpdateHealthLabel(health);
|
||||
}
|
||||
|
||||
public void OnAsteroidExploded(Vector2 pos, int size)
|
||||
{
|
||||
//score hardcoded for now, will make implementation of enemy scores easier later on
|
||||
|
|
|
|||
|
|
@ -5,6 +5,9 @@ public partial class player : ship // Inherits from base ship class
|
|||
{
|
||||
public enum ShipColor{RED, GREEN, BLUE}
|
||||
|
||||
[Signal]
|
||||
public delegate void HealthUpdateEventHandler(int health);
|
||||
|
||||
[Export]
|
||||
public ShipColor color;
|
||||
|
||||
|
|
@ -23,13 +26,19 @@ public partial class player : ship // Inherits from base ship class
|
|||
|
||||
//move into selection statement for toggling between fa off and on
|
||||
if(Input.GetAxis("strafe_left", "strafe_right") == 0){
|
||||
Velocity = Velocity.MoveToward(Vector2.Zero, 1.5f);
|
||||
Velocity = Velocity.MoveToward(Vector2.Zero, 2.5f);
|
||||
}
|
||||
else if(Input.GetAxis("down", "up") == 0){
|
||||
Velocity = Velocity.MoveToward(Vector2.Zero, 1.5f);
|
||||
Velocity = Velocity.MoveToward(Vector2.Zero, 2.5f);
|
||||
}
|
||||
}
|
||||
|
||||
public override void ShipDamage(int damage)
|
||||
{
|
||||
base.ShipDamage(damage);
|
||||
EmitSignal(SignalName.HealthUpdate, Health);
|
||||
}
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
Sprite = GetNode<Sprite2D>("ShipSprite");
|
||||
|
|
@ -70,6 +79,10 @@ public partial class player : ship // Inherits from base ship class
|
|||
|
||||
|
||||
LaserSpawn = GetNode<Node2D>("LaserSpawn");
|
||||
//Connect("body_entered" +=)
|
||||
SetShipStats();
|
||||
Health = MaxHealth;
|
||||
EmitSignal(SignalName.HealthUpdate, Health);
|
||||
}
|
||||
|
||||
public override void _Process(double delta)
|
||||
|
|
@ -78,6 +91,12 @@ public partial class player : ship // Inherits from base ship class
|
|||
{
|
||||
ShootLaser();
|
||||
}
|
||||
|
||||
if (Health < 0)
|
||||
{
|
||||
GD.Print("dead lol");
|
||||
}
|
||||
|
||||
}
|
||||
public override void _PhysicsProcess(double delta)
|
||||
{ // every frame
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
using System.Collections;
|
||||
using Godot;
|
||||
|
||||
public partial class ship : CharacterBody2D
|
||||
|
|
@ -10,9 +11,13 @@ public partial class ship : CharacterBody2D
|
|||
//[Export]
|
||||
//public Vector2 ScreenSize;
|
||||
[Export]
|
||||
public int Health { get; set; } = 100;
|
||||
[Export]
|
||||
public int MaxHealth { get; set; } = 100;
|
||||
[Export]
|
||||
public int MaxSpeed { get; set;} = 300;
|
||||
[Export]
|
||||
public int MainSpeed { get; set; } = 10;
|
||||
public int MainSpeed { get; set; } = 20;
|
||||
[Export]
|
||||
public int StrafeSpeed { get; set; } = 5;
|
||||
[Export]
|
||||
|
|
@ -34,6 +39,33 @@ public partial class ship : CharacterBody2D
|
|||
EmitSignal(SignalName.LaserShot, Laser);
|
||||
}
|
||||
|
||||
public void SetShipStats()
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case ShipType.INTERCEPTOR:
|
||||
MaxSpeed = 450;
|
||||
MainSpeed = 35;
|
||||
StrafeSpeed = 10;
|
||||
RotationSpeed = 4f;
|
||||
MaxHealth = 75;
|
||||
break;
|
||||
|
||||
case ShipType.GUARDIAN:
|
||||
MaxSpeed = 200;
|
||||
MainSpeed = 10;
|
||||
StrafeSpeed = 3;
|
||||
RotationSpeed = 1f;
|
||||
MaxHealth = 250;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void ShipDamage(int damage)
|
||||
{
|
||||
Health -= damage;
|
||||
}
|
||||
|
||||
public override void _Ready()
|
||||
{
|
||||
//ScreenSize = GetViewportRect().Size;
|
||||
|
|
|
|||
Loading…
Reference in a new issue