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:
+26
-17
@@ -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++)
|
||||
|
||||
Reference in New Issue
Block a user