moved bucket to the playercontroller, changed tweenStages to a list of pegactions, so processtween takes in actions and builds off of that so that movement/actions priority will line up properly. change tweenstages key to be priority:loop. added category to actions to divide into movement vs action

This commit is contained in:
2026-06-30 02:46:00 -04:00
parent 982c3e6786
commit c8e81e4f48
12 changed files with 48 additions and 41 deletions
+26 -17
View File
@@ -14,7 +14,7 @@ public partial class PegController : TurnController
public List<PackedScene> _hostilePegScenes;
public List<Peg> _pegs = new();
public PlayerController _playerController;
public Dictionary<string, List<Tween>> _tweenStages = new();
public Dictionary<string, List<Tuple<Peg, PegAction>>> _tweenStages = new();
public Tween _tween;
public XmlDocument _pegProbabilities = new();
@@ -69,17 +69,27 @@ public partial class PegController : TurnController
_tweenStages.Clear();
int loop = 0;
bool noPegsActed = false;
while (!noPegsActed)
bool anyPegsActed = true;
while (anyPegsActed)
{
noPegsActed = true;
anyPegsActed = false;
for (int i = 0; i < _pegs.Count; i++)
{
Peg peg = _pegs[i];
bool pegActed = peg.Act(loop);
if (pegActed && noPegsActed)
PegAction action = peg.SelectAction();
if (action != null)
{
noPegsActed = false;
string key = action._priority + ":" + loop;
if (!_tweenStages.ContainsKey(key))
{
_tweenStages[key] = new();
}
_tweenStages[key].Add(new(peg, action));
if (!anyPegsActed)
{
anyPegsActed = true;
}
}
}
loop++;
@@ -135,37 +145,36 @@ public partial class PegController : TurnController
public void ProcessTween()
{
_tweenStages = _tweenStages.OrderBy(s => s.Key.Split(":")[0]).ThenBy(s => s.Key.Split(":")[1]).ToDictionary();
_tweenStages = _tweenStages.OrderBy(s => int.Parse(s.Key.Split(":")[0])).ThenBy(s => int.Parse(s.Key.Split(":")[1])).ToDictionary();
if (_tweenStages.Count <= 0)
{
EndTurn();
return;
}
if (_tween != null)
{
_tween.Kill();
}
_tween?.Kill();
_tween = CreateTween();
for (int i = 0; i < _tweenStages.Count; i++)
{
_tween.Chain().TweenInterval(0.5f);
List<Tween> tweenSteps = _tweenStages.Values.ElementAt(i);
List<Tuple<Peg, PegAction>> tweenSteps = _tweenStages.Values.ElementAt(i);
for (int j = 0; j < tweenSteps.Count; j++)
{
Tween step = tweenSteps[j];
_tween.Parallel().TweenSubtween(step);
Tuple<Peg, PegAction> step = tweenSteps[j];
Peg peg = step.Item1;
PegAction action = step.Item2;
Tween tween = action.CreateAnimation(peg);
_tween.Parallel().TweenSubtween(tween);
}
}
_tween.TweenCallback(Callable.From(EndTurn));
}
public override void StartTurn()
{
AddHostilePegs(4);
for (int i = 0; i < _pegs.Count; i++)