Add elements

Attempt to block line of sight with walls
This commit is contained in:
2024-09-06 22:04:00 -07:00
parent 8eeeb0890c
commit dc035eb1fe
35 changed files with 102 additions and 2219 deletions

View File

@@ -39,7 +39,7 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
[Dependency] IGameRepo GameRepo => this.DependOn<IGameRepo>();
[Export]
public EnemyStatInfo EnemyStatInfo { get; set; } = new();
public EnemyStatInfo EnemyStatInfo { get; set; } = default!;
public static PackedScene CollisionDetectorScene => GD.Load<PackedScene>("res://src/enemy/CollisionDetector.tscn");
@@ -57,6 +57,8 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
[Node] public AnimationPlayer AnimationPlayer { get; set; } = default!;
[Node] public RayCast3D Raycast { get; set; } = default!;
public void Setup()
{
EnemyLogic = new EnemyLogic();
@@ -99,7 +101,22 @@ public partial class Enemy : CharacterBody3D, IEnemy, IProvide<IEnemyLogic>
private void LineOfSight_BodyEntered(Node3D body)
{
EnemyLogic.Input(new EnemyLogic.Input.Alerted());
var overlappingBodies = LineOfSight.GetOverlappingBodies();
foreach (var overlap in overlappingBodies)
{
Raycast.LookAt(GameRepo.PlayerGlobalPosition.Value, Vector3.Up);
Raycast.ForceRaycastUpdate();
if (Raycast.IsColliding())
{
var collider = Raycast.GetCollider();
if (collider is IPlayer player)
{
Raycast.DebugShapeCustomColor = Color.FromString("Purple", Colors.Purple);
EnemyLogic.Input(new EnemyLogic.Input.Alerted());
}
}
}
}
public void OnResolved()

View File

@@ -15,21 +15,27 @@ namespace GameJamDungeon
public int BaseDefense { get; set; }
[Export]
public double ElementAResistance { get; set; }
public double TelluricResistance { get; set; }
[Export]
public double ElementBResistance { get; set; }
public double AeolicResistance { get; set; }
[Export]
public double ElementCResistance { get; set; }
public double HydricResistance { get; set; }
[Export]
public double BaseElementADamageBonus { get; set; }
public double IgneousResistance { get; set; }
[Export]
public double BaseElementBDamageBonus { get; set; }
public double TelluricDamageBonus { get; set; }
[Export]
public double BaseElementCDamageBonus { get; set; }
public double AeolicDamageBonus { get; set; }
[Export]
public double BaseHydricDamageBonus { get; set; }
[Export]
public double IgneousDamageBonus { get; set; }
}
}

View File

@@ -1,15 +1,17 @@
[gd_resource type="Resource" script_class="EnemyStatInfo" load_steps=2 format=3 uid="uid://c8h26ip4ly18r"]
[gd_resource type="Resource" script_class="EnemyStatInfo" load_steps=2 format=3 uid="uid://c08wbuumw6dk5"]
[ext_resource type="Script" path="res://src/enemy/EnemyStatInfo.cs" id="1_oabqi"]
[ext_resource type="Script" path="res://src/enemy/EnemyStatInfo.cs" id="1_2i74g"]
[resource]
script = ExtResource("1_oabqi")
script = ExtResource("1_2i74g")
MaximumHP = 50.0
BaseAttack = 10
BaseDefense = 1
ElementAResistance = 15.0
ElementBResistance = -20.0
ElementCResistance = 0.0
BaseElementADamageBonus = 0.0
BaseElementBDamageBonus = 0.0
BaseElementCDamageBonus = 0.0
BaseDefense = 2
TelluricResistance = 0.0
AeolicResistance = 0.0
HydricResistance = 0.0
IgneousResistance = 0.0
TelluricDamageBonus = 0.0
AeolicDamageBonus = 0.0
BaseHydricDamageBonus = 0.0
IgneousDamageBonus = 0.0

View File

@@ -1,7 +1,7 @@
[gd_scene load_steps=15 format=4 uid="uid://dcgj5i52i76gj"]
[ext_resource type="Script" path="res://src/enemy/Enemy.cs" id="1_jw471"]
[ext_resource type="Resource" uid="uid://c8h26ip4ly18r" path="res://src/enemy/enemy_types/floating_enemy/FloatingEnemy.tres" id="2_ewaf6"]
[ext_resource type="Resource" uid="uid://c08wbuumw6dk5" path="res://src/enemy/enemy_types/floating_enemy/FloatingEnemy.tres" id="2_b8sx5"]
[ext_resource type="Script" path="res://src/hitbox/Hitbox.cs" id="3_erpyl"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_5tio6"]
@@ -179,7 +179,7 @@ collision_layer = 10
collision_mask = 9
axis_lock_linear_y = true
script = ExtResource("1_jw471")
EnemyStatInfo = ExtResource("2_ewaf6")
EnemyStatInfo = ExtResource("2_b8sx5")
[node name="DISSAPPEARING ENEMY" type="Node3D" parent="."]
@@ -231,3 +231,8 @@ script = ExtResource("3_erpyl")
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.189337, 0.217529, -0.78415)
shape = SubResource("BoxShape3D_0yire")
disabled = true
[node name="Raycast" type="RayCast3D" parent="."]
unique_name_in_owner = true
target_position = Vector3(0, 0, -3)
collision_mask = 3

View File

@@ -29,6 +29,8 @@ environment = SubResource("Environment_fke5g")
[node name="Player" parent="." instance=ExtResource("3_kk6ly")]
process_mode = 1
transform = Transform3D(0.0871905, 0, -0.996192, 0, 1, 0, 0.996192, 0, 0.0871905, -71.4241, -4.70883, -0.527107)
MoveSpeed = 8.0
Acceleration = 4.0
[node name="RigidBody3D" type="StaticBody3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -69.9907, -4.96505, 0)

View File

@@ -127,6 +127,8 @@ axis_lock_angular_z = true
motion_mode = 1
script = ExtResource("1_xcol5")
RotationSpeed = 0.025
MoveSpeed = 3.0
Acceleration = 0.01
PlayerStatInfo = ExtResource("2_nuh2a")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]

View File

@@ -18,21 +18,27 @@ namespace GameJamDungeon
public int BaseDefense { get; set; }
[Export]
public double ElementAResistance { get; set; }
public double TelluricResistance { get; set; }
[Export]
public double ElementBResistance { get; set; }
public double AeolicResistance { get; set; }
[Export]
public double ElementCResistance { get; set; }
public double HydricResistance { get; set; }
[Export]
public double BaseElementADamageBonus { get; set; }
public double IgneousResistance { get; set; }
[Export]
public double BaseElementBDamageBonus { get; set; }
public double TelluricDamageBonus { get; set; }
[Export]
public double BaseElementCDamageBonus { get; set; }
public double AeolicDamageBonus { get; set; }
[Export]
public double BaseHydricDamageBonus { get; set; }
[Export]
public double IgneousDamageBonus { get; set; }
}
}

View File

@@ -7,10 +7,11 @@ namespace GameJamDungeon
public static double CalculatePlayerDamage(int attackDamage, PlayerStatInfo playerStatInfo, EnemyStatInfo enemyStatInfo)
{
var baseDamage = attackDamage + playerStatInfo.BaseAttack;
var elementADamage = (playerStatInfo.BaseElementADamageBonus > 0 ? playerStatInfo.BaseElementADamageBonus - enemyStatInfo.ElementAResistance : 0) / 100;
var elementBDamage = (playerStatInfo.BaseElementBDamageBonus > 0 ? playerStatInfo.BaseElementBDamageBonus - enemyStatInfo.ElementBResistance : 0) / 100;
var elementCDamage = (playerStatInfo.BaseElementCDamageBonus > 0 ? playerStatInfo.BaseElementCDamageBonus - enemyStatInfo.ElementCResistance : 0) / 100;
var elementalBonusDamage = baseDamage + (baseDamage * elementADamage) + (baseDamage * elementBDamage) + (baseDamage * elementCDamage);
var elementADamage = (playerStatInfo.BaseHydricDamageBonus > 0 ? playerStatInfo.BaseHydricDamageBonus - enemyStatInfo.HydricResistance : 0) / 100;
var elementBDamage = (playerStatInfo.IgneousDamageBonus > 0 ? playerStatInfo.IgneousDamageBonus - enemyStatInfo.IgneousResistance : 0) / 100;
var elementCDamage = (playerStatInfo.TelluricDamageBonus > 0 ? playerStatInfo.TelluricDamageBonus - enemyStatInfo.TelluricResistance : 0) / 100;
var elementDDamage = (playerStatInfo.AeolicDamageBonus > 0 ? playerStatInfo.AeolicDamageBonus - enemyStatInfo.AeolicResistance : 0) / 100;
var elementalBonusDamage = baseDamage + (baseDamage * elementADamage) + (baseDamage * elementBDamage) + (baseDamage * elementCDamage) + (baseDamage * elementDDamage);
var calculatedDamage = elementalBonusDamage - enemyStatInfo.BaseDefense;
return calculatedDamage;
}
@@ -18,11 +19,12 @@ namespace GameJamDungeon
public static double CalculateEnemyDamage(int attackDamage, PlayerStatInfo playerStatInfo, EnemyStatInfo enemyStatInfo)
{
var baseDamage = attackDamage + enemyStatInfo.BaseAttack;
var elementADamage = (enemyStatInfo.BaseElementADamageBonus > 0 ? enemyStatInfo.BaseElementADamageBonus - playerStatInfo.ElementAResistance : 0) / 100;
var elementBDamage = (enemyStatInfo.BaseElementBDamageBonus > 0 ? enemyStatInfo.BaseElementBDamageBonus - playerStatInfo.ElementBResistance : 0) / 100;
var elementCDamage = (enemyStatInfo.BaseElementCDamageBonus > 0 ? enemyStatInfo.BaseElementCDamageBonus - playerStatInfo.ElementCResistance : 0) / 100;
var elementalBonusDamage = baseDamage + (baseDamage * elementADamage) + (baseDamage * elementBDamage) + (baseDamage * elementCDamage);
var calculatedDamage = elementalBonusDamage - enemyStatInfo.BaseDefense;
var elementADamage = (enemyStatInfo.BaseHydricDamageBonus > 0 ? enemyStatInfo.BaseHydricDamageBonus - playerStatInfo.HydricResistance : 0) / 100;
var elementBDamage = (enemyStatInfo.IgneousDamageBonus > 0 ? enemyStatInfo.IgneousDamageBonus - playerStatInfo.IgneousResistance : 0) / 100;
var elementCDamage = (enemyStatInfo.TelluricDamageBonus > 0 ? enemyStatInfo.TelluricDamageBonus - playerStatInfo.TelluricResistance : 0) / 100;
var elementDDamage = (enemyStatInfo.AeolicDamageBonus > 0 ? enemyStatInfo.AeolicDamageBonus - playerStatInfo.AeolicResistance : 0) / 100;
var elementalBonusDamage = baseDamage + (baseDamage * elementADamage) + (baseDamage * elementBDamage) + (baseDamage * elementCDamage) + (baseDamage * elementDDamage);
var calculatedDamage = elementalBonusDamage - playerStatInfo.BaseDefense;
return calculatedDamage;
}
}

View File

@@ -1,4 +1,6 @@
namespace GameJamDungeon
using Godot;
namespace GameJamDungeon
{
public interface ICharacterStats
{
@@ -8,10 +10,28 @@
public int BaseDefense { get; }
public double ElementAResistance { get; }
[Export]
public double TelluricResistance { get; set; }
public double ElementBResistance { get; }
[Export]
public double AeolicResistance { get; set; }
public double ElementCResistance { get; }
[Export]
public double HydricResistance { get; set; }
[Export]
public double IgneousResistance { get; set; }
[Export]
public double TelluricDamageBonus { get; set; }
[Export]
public double AeolicDamageBonus { get; set; }
[Export]
public double BaseHydricDamageBonus { get; set; }
[Export]
public double IgneousDamageBonus { get; set; }
}
}