FreezeFrame randomness update

hey AJ so i was cleaning my room when i was struck by an idea for how to make the randomization more consistent without seeding. *yes unfortunately* it requires a static variable but i promise u i used it responsibly.
This commit is contained in:
playinful 2024-03-11 22:03:53 -04:00
parent 34b15726ef
commit 2e86a2513e

View file

@ -90,7 +90,7 @@ namespace HeavenStudio.Games.Loaders
// distractions // distractions
new GameAction("spawnPerson", "Spawn Walker") new GameAction("spawnPerson", "Spawn Walker")
{ {
function = delegate { var e = eventCaller.currentEntity; FreezeFrame.SummonWalker(e.beat, e.length, e["personType"], e["direction"], e["layer"]); }, function = delegate { var e = eventCaller.currentEntity; FreezeFrame.SummonWalker(e); },
defaultLength = 4f, defaultLength = 4f,
resizable = true, resizable = true,
parameters = new List<Param>() parameters = new List<Param>()
@ -297,6 +297,8 @@ namespace HeavenStudio.Games
public List<SpawnCarArgs> QueuedCars { get; set; } = new(); public List<SpawnCarArgs> QueuedCars { get; set; } = new();
public static Dictionary<RiqEntity, PersonDirection> WalkerDirections = new();
//protected static int? SuperSeed { get; set; } //protected static int? SuperSeed { get; set; }
// UNITY BUILTIN METHODS // UNITY BUILTIN METHODS
@ -446,6 +448,7 @@ namespace HeavenStudio.Games
// calculation // calculation
CalculateAutoShowPhotos(); CalculateAutoShowPhotos();
CalculateCarSpawns(); CalculateCarSpawns();
PreRandomizeWalkers();
// setting local variables // setting local variables
RiqEntity e = GetLastEntityOfType(beat, "bop"); RiqEntity e = GetLastEntityOfType(beat, "bop");
@ -473,7 +476,7 @@ namespace HeavenStudio.Games
{ {
foreach (RiqEntity entity in eList) foreach (RiqEntity entity in eList)
{ {
SummonWalker(entity.beat, entity.length, entity["personType"], entity["direction"], entity["layer"]); SummonWalker(entity);
} }
} }
@ -716,35 +719,48 @@ namespace HeavenStudio.Games
{ {
PhotoList.Clear(); PhotoList.Clear();
} }
public static void SummonWalker(double beat, double length, int walkerType, int direction, int layer = 0) public static void SummonWalker(RiqEntity e/*double beat, double length, int walkerType, int direction, int layer = 0*/)
{ {
if (Instance == null) return; if (Instance == null) return;
double beat = e.beat;
double length = e.length;
PersonType walkerType = (PersonType)e["personType"];
PersonDirection direction = (PersonDirection)e["direction"];
int layer = e["layer"];
GameObject walker = Instantiate(Instance.WalkerPrefab, Instance.WalkerSpawn.transform); GameObject walker = Instantiate(Instance.WalkerPrefab, Instance.WalkerSpawn.transform);
Animator animator = walker.GetComponent<Animator>(); Animator animator = walker.GetComponent<Animator>();
walker.GetComponent<SortingGroup>().sortingOrder = layer; walker.GetComponent<SortingGroup>().sortingOrder = layer;
switch (walkerType) switch (walkerType)
{ {
case (int)PersonType.Girlfriend: case PersonType.Girlfriend:
animator.DoScaledAnimationAsync("Girlfriend", animLayer: 2); animator.DoScaledAnimationAsync("Girlfriend", animLayer: 2);
break; break;
case (int)PersonType.Dude2: case PersonType.Dude2:
animator.DoScaledAnimationAsync("Dude2", animLayer: 2); animator.DoScaledAnimationAsync("Dude2", animLayer: 2);
break; break;
case (int)PersonType.Dude1: case PersonType.Dude1:
default: default:
animator.DoScaledAnimationAsync("Dude1", animLayer: 2); animator.DoScaledAnimationAsync("Dude1", animLayer: 2);
break; break;
} }
if (direction == (int)PersonDirection.Random) /*if (direction == (int)PersonDirection.Random)
{ {
int seed = BitConverter.ToInt32(BitConverter.GetBytes((float)beat)); int seed = BitConverter.ToInt32(BitConverter.GetBytes((float)beat));
direction = new System.Random(seed).Next(1, 3); direction = new System.Random(seed).Next(1, 3);
}*/
if (direction == PersonDirection.Random)
{
if (WalkerDirections.ContainsKey(e))
direction = WalkerDirections[e];
else
direction = PersonDirection.Right;
} }
if (direction == (int)PersonDirection.Left) if (direction == PersonDirection.Left)
Instance.Walkers.Add(new WalkerArgs(animator, beat, length, "EnterLeft")); Instance.Walkers.Add(new WalkerArgs(animator, beat, length, "EnterLeft"));
else else
Instance.Walkers.Add(new WalkerArgs(animator, beat, length, "EnterRight")); Instance.Walkers.Add(new WalkerArgs(animator, beat, length, "EnterRight"));
@ -1141,6 +1157,36 @@ namespace HeavenStudio.Games
} }
} }
} }
public void PreRandomizeWalkers()
{
IEnumerable<RiqEntity> walkers = EventCaller.GetAllInGameManagerList("freezeFrame", new string[] { "spawnPerson" }).Where(e => (PersonDirection)e["direction"] == PersonDirection.Random);
foreach (RiqEntity e in walkers)
{
if (!WalkerDirections.ContainsKey(e))
{
float rand = UnityEngine.Random.Range(0.0f, 1.0f);
if (rand >= 0.5)
{
WalkerDirections.Add(e, PersonDirection.Left);
}
else
{
WalkerDirections.Add(e, PersonDirection.Right);
}
}
}
List<RiqEntity> keysToRemove = new();
foreach (RiqEntity key in WalkerDirections.Keys)
{
if (!walkers.Contains(key))
keysToRemove.Add(key);
}
foreach (RiqEntity key in keysToRemove)
{
WalkerDirections.Remove(key);
}
Debug.Log($"Walker Count: {WalkerDirections.Count}");
}
public void CarbageCollection() public void CarbageCollection()
{ {
foreach (Transform child in FarCarSpawn) foreach (Transform child in FarCarSpawn)