Add initial implementation of game mechanics and resources management

This commit is contained in:
2025-08-23 00:38:46 +02:00
commit e12acb0238
91 changed files with 2018 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
using System;
using Godot;
namespace ParasiticGod.Scripts.Core.Effects;
[GlobalClass]
public partial class AddResourceEffect : Effect
{
[Export] public ResourceType TargetResource { get; set; }
[Export] public double Value { get; set; }
public override void Execute(GameState state)
{
switch (TargetResource)
{
case ResourceType.Faith:
state.Faith += Value;
break;
case ResourceType.Followers:
state.Followers += (long)Value;
break;
case ResourceType.Corruption:
state.Corruption += Value;
break;
default:
throw new ArgumentOutOfRangeException();
}
}
}

View File

@@ -0,0 +1 @@
uid://flyhl4i86han

View File

@@ -0,0 +1,24 @@
using Godot;
namespace ParasiticGod.Scripts.Core.Effects;
[GlobalClass]
public partial class ApplyBuffEffect : Effect
{
public enum BuffTarget { FaithGeneration }
[Export] public BuffTarget TargetStat { get; set; }
[Export] public float Multiplier { get; set; } = 2.0f;
[Export] public double Duration { get; set; } = 30.0;
public override void Execute(GameState gameState)
{
var newBuff = new Buff
{
Multiplier = Multiplier,
Duration = Duration
};
gameState.ActiveBuffs.Add(newBuff);
}
}

View File

@@ -0,0 +1 @@
uid://cmhd8jmckgtep

View File

@@ -0,0 +1,7 @@
namespace ParasiticGod.Scripts.Core.Effects;
public class Buff
{
public float Multiplier { get; set; } = 1.0f;
public double Duration { get; set; }
}

View File

@@ -0,0 +1 @@
uid://c5fq6vt4uyce2

View File

@@ -0,0 +1,36 @@
using Godot;
namespace ParasiticGod.Scripts.Core.Effects;
[GlobalClass]
public partial class ConvertResourceEffect : Effect
{
[Export] public ResourceType FromResource { get; set; }
[Export] public double FromAmount { get; set; }
[Export] public ResourceType ToResource { get; set; }
[Export] public double ToAmount { get; set; }
public override void Execute(GameState gameState)
{
double GetValue(ResourceType type) => type switch {
ResourceType.Faith => gameState.Faith,
ResourceType.Followers => gameState.Followers,
ResourceType.Corruption => gameState.Corruption,
_ => 0
};
void SetValue(ResourceType type, double value) {
switch(type) {
case ResourceType.Faith: gameState.Faith = value; break;
case ResourceType.Followers: gameState.Followers = (long)value; break;
case ResourceType.Corruption: gameState.Corruption = value; break;
}
}
if (GetValue(FromResource) >= FromAmount)
{
SetValue(FromResource, GetValue(FromResource) - FromAmount);
SetValue(ToResource, GetValue(ToResource) + ToAmount);
}
}
}

View File

@@ -0,0 +1 @@
uid://chiq1n5fde3eo

View File

@@ -0,0 +1,11 @@
using Godot;
namespace ParasiticGod.Scripts.Core.Effects;
[GlobalClass]
public partial class DestroySelfEffect : Effect
{
public override void Execute(GameState gameState)
{
}
}

View File

@@ -0,0 +1 @@
uid://dhnma6yerqpwn

View File

@@ -0,0 +1,8 @@
using Godot;
namespace ParasiticGod.Scripts.Core.Effects;
public abstract partial class Effect : Resource
{
public abstract void Execute(GameState gameState);
}

View File

@@ -0,0 +1 @@
uid://c1futvi1xm03q

View File

@@ -0,0 +1,30 @@
using Godot;
namespace ParasiticGod.Scripts.Core.Effects;
[GlobalClass]
public partial class ModifyStatEffect : Effect
{
public enum Stat { FaithPerFollower }
public enum Operation { Add, Multiply }
[Export] public Stat TargetStat { get; set; }
[Export] public Operation Op { get; set; }
[Export] public double Value { get; set; }
public override void Execute(GameState gameState)
{
if (TargetStat == Stat.FaithPerFollower)
{
switch (Op)
{
case Operation.Add:
gameState.FaithPerFollower += Value;
break;
case Operation.Multiply:
gameState.FaithPerFollower *= Value;
break;
}
}
}
}

View File

@@ -0,0 +1 @@
uid://dy6avn8snuuq1

View File

@@ -0,0 +1,3 @@
namespace ParasiticGod.Scripts.Core.Effects;
public enum ResourceType { Faith, Followers, Corruption }

View File

@@ -0,0 +1 @@
uid://do6aurfs8oif0

View File

@@ -0,0 +1,16 @@
using Godot;
using Godot.Collections;
namespace ParasiticGod.Scripts.Core.Effects;
[GlobalClass]
public partial class UnlockMiracleEffect : Effect
{
[Export]
public Array<string> MiraclesToUnlock { get; set; }
public override void Execute(GameState gameState)
{
}
}

View File

@@ -0,0 +1 @@
uid://c1oieyvbcqjcc