Add elements
Attempt to block line of sight with walls
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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="."]
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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; }
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user