|
@@ -1,4 +1,5 @@
|
|
|
using UnityEngine;
|
|
|
+using UnityEngine.UI;
|
|
|
using UnityEngine.AI;
|
|
|
using System.Collections.Generic;
|
|
|
using System.IO;
|
|
@@ -23,10 +24,15 @@ public class WalkLerpPlayback : MonoBehaviour
|
|
|
private Animator[][] humansA;
|
|
|
|
|
|
// Playback variables
|
|
|
+ private int[] maxIJ;
|
|
|
private int indexChangeRate;
|
|
|
[HideInInspector]
|
|
|
public bool rewind, pause, play; //PlaybackController
|
|
|
|
|
|
+ // Slider Settings
|
|
|
+ public Slider slider;
|
|
|
+ private float prevSliderValue;
|
|
|
+
|
|
|
private void Start()
|
|
|
{
|
|
|
// Get information from InstatiatePrefab
|
|
@@ -55,8 +61,22 @@ public class WalkLerpPlayback : MonoBehaviour
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // Set the Slider settings
|
|
|
+ if (slider == null)
|
|
|
+ {
|
|
|
+ Debug.Log("No Slider instance attached");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ maxIJ = GetHumanWithLongestScreenTime();
|
|
|
+ float maxTime = (float) Math.Round(timePosRotList[maxIJ[0]][maxIJ[1]].Item1[timePosRotList[maxIJ[0]][maxIJ[1]].Item1.Count - 1], 2);
|
|
|
+ slider.minValue = 0;
|
|
|
+ slider.maxValue = (maxTime / Time.deltaTime);
|
|
|
+ slider.wholeNumbers = true;
|
|
|
+ prevSliderValue = slider.value;
|
|
|
+
|
|
|
SetTransform(currentStartPoint);
|
|
|
currentStartPoint++;
|
|
|
+ slider.value = currentStartPoint;
|
|
|
startTime = Time.time;
|
|
|
}
|
|
|
|
|
@@ -68,21 +88,45 @@ public class WalkLerpPlayback : MonoBehaviour
|
|
|
indexChangeRate = 1;
|
|
|
if (rewind)
|
|
|
indexChangeRate = -1;
|
|
|
-
|
|
|
+
|
|
|
if (play || rewind)
|
|
|
{
|
|
|
- if ((currentStartPoint + indexChangeRate) < timePosRotList[0][0].Item2.Count && (currentStartPoint + indexChangeRate) >= 0)
|
|
|
+ if ((currentStartPoint + indexChangeRate) < timePosRotList[maxIJ[0]][maxIJ[1]].Item2.Count && (currentStartPoint + indexChangeRate) >= 0)
|
|
|
{
|
|
|
- currentStartPoint += indexChangeRate;
|
|
|
+ if(slider.value - prevSliderValue == -1 || slider.value - prevSliderValue == 0 || slider.value - prevSliderValue == 1) // rewind || play
|
|
|
+ {
|
|
|
+ prevSliderValue = slider.value;
|
|
|
+ currentStartPoint += indexChangeRate;
|
|
|
+ slider.value = currentStartPoint;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ prevSliderValue = slider.value;
|
|
|
+ currentStartPoint = (int) slider.value;
|
|
|
+ }
|
|
|
SetTransform(currentStartPoint);
|
|
|
}
|
|
|
+ else if(slider.value - prevSliderValue != -1|| slider.value - prevSliderValue != 0 || slider.value - prevSliderValue != 1)
|
|
|
+ {
|
|
|
+ currentStartPoint = (int) slider.value;
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
+ // upper else-Statement only for pause
|
|
|
+ if (slider.value - prevSliderValue != 0)
|
|
|
+ {
|
|
|
+ //prevSliderValue = slider.value;
|
|
|
+ currentStartPoint = (int) slider.value;
|
|
|
+ }
|
|
|
+
|
|
|
for (int i = 0; i < humansGO.Length; ++i)
|
|
|
{
|
|
|
for (int j = 0; j < humansGO[i].Length; ++j)
|
|
|
{
|
|
|
+ humansGO[i][j].transform.position = timePosRotList[i][j].Item2[currentStartPoint]; // First entry of Position
|
|
|
+ humansGO[i][j].transform.rotation = timePosRotList[i][j].Item3[currentStartPoint]; // First entry of Rotation
|
|
|
+
|
|
|
humansA[i][j].SetBool("isWalking", false);
|
|
|
}
|
|
|
}
|
|
@@ -128,4 +172,25 @@ public class WalkLerpPlayback : MonoBehaviour
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ private int[] GetHumanWithLongestScreenTime()
|
|
|
+ {
|
|
|
+ int[] maxIJ = new int[2] { 0, 0 };
|
|
|
+ float currentMaxTime = 0;
|
|
|
+
|
|
|
+ for (int i = 0; i < humansGO.Length; ++i)
|
|
|
+ {
|
|
|
+ for (int j = 0; j < humansGO[i].Length; ++j)
|
|
|
+ {
|
|
|
+ if(currentMaxTime < timePosRotList[i][j].Item1.Count)
|
|
|
+ {
|
|
|
+ currentMaxTime = timePosRotList[i][j].Item1.Count;
|
|
|
+ maxIJ[0] = i;
|
|
|
+ maxIJ[1] = j;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return maxIJ;
|
|
|
+ }
|
|
|
}
|