Stack to Left

This commit is contained in:
fu-majime 2024-04-01 00:58:54 +09:00
parent 7cebb7bfca
commit 8c60729806
5 changed files with 112 additions and 74 deletions

View file

@ -870,16 +870,14 @@ MonoBehaviour:
size: 2
holdLength: 7
limbFallHeight: 15
fuelColor: {r: 1, g: 0.385, b: 0.385, a: 1}
lampColorOff: {r: 0, g: 0, b: 0, a: 0}
lampColorOn: {r: 0, g: 0, b: 0, a: 0}
flyDistance: 2.05
stackDistanceRate: 0.34
fullBody: {fileID: 7967358876063018519}
legs: {fileID: 7489285146181854031}
body: {fileID: 233663896046199226}
head: {fileID: 1555999227183591988}
fuelFill: {fileID: 1253665520920512372}
fillAnim: {fileID: 3960380650713155144}
flyDistance: 2.05
--- !u!210 &755017336671867292
SortingGroup:
m_ObjectHideFlags: 0

View file

@ -870,16 +870,14 @@ MonoBehaviour:
size: 1
holdLength: 3
limbFallHeight: 15
fuelColor: {r: 0, g: 0, b: 0, a: 0}
lampColorOff: {r: 0, g: 0, b: 0, a: 0}
lampColorOn: {r: 0, g: 0, b: 0, a: 0}
flyDistance: 2.05
stackDistanceRate: 0.34
fullBody: {fileID: 7967358876063018519}
legs: {fileID: 7489285146181854031}
body: {fileID: 233663896046199226}
head: {fileID: 1555999227183591988}
fuelFill: {fileID: 1253665520920512372}
fillAnim: {fileID: 3960380650713155144}
flyDistance: 2.05
--- !u!210 &755017336671867292
SortingGroup:
m_ObjectHideFlags: 0

View file

@ -870,16 +870,14 @@ MonoBehaviour:
size: 0
holdLength: 1
limbFallHeight: 15
fuelColor: {r: 0, g: 0, b: 0, a: 0}
lampColorOff: {r: 0, g: 0, b: 0, a: 0}
lampColorOn: {r: 0, g: 0, b: 0, a: 0}
flyDistance: 2.05
stackDistanceRate: 0.34
fullBody: {fileID: 7967358876063018519}
legs: {fileID: 7489285146181854031}
body: {fileID: 233663896046199226}
head: {fileID: 1555999227183591988}
fuelFill: {fileID: 1253665520920512372}
fillAnim: {fileID: 3960380650713155144}
flyDistance: 2.05
--- !u!210 &755017336671867292
SortingGroup:
m_ObjectHideFlags: 0

View file

@ -30,7 +30,7 @@ namespace HeavenStudio.Games.Loaders
{
preFunction = delegate {
var e = eventCaller.currentEntity;
Fillbots.PreSpawnFillbot(e.beat, 3, Scripts_Fillbots.BotSize.Medium, e["colorFuel"], e["colorLampOff"], e["colorLampOn"], e["type"], e["alt"]);
Fillbots.PreSpawnFillbot(e.beat, 3, (int)Scripts_Fillbots.BotSize.Medium, e["colorFuel"], e["colorLampOff"], e["colorLampOn"], e["type"], e["alt"]);
},
defaultLength = 8f,
parameters = new List<Param>()
@ -46,7 +46,7 @@ namespace HeavenStudio.Games.Loaders
{
preFunction = delegate {
var e = eventCaller.currentEntity;
Fillbots.PreSpawnFillbot(e.beat, 7, Scripts_Fillbots.BotSize.Large, e["colorFuel"], e["colorLampOff"], e["colorLampOn"], e["type"], e["alt"]);
Fillbots.PreSpawnFillbot(e.beat, 7, (int)Scripts_Fillbots.BotSize.Large, e["colorFuel"], e["colorLampOff"], e["colorLampOn"], e["type"], e["alt"]);
},
defaultLength = 12f,
parameters = new List<Param>()
@ -62,7 +62,7 @@ namespace HeavenStudio.Games.Loaders
{
preFunction = delegate {
var e = eventCaller.currentEntity;
Fillbots.PreSpawnFillbot(e.beat, 1, Scripts_Fillbots.BotSize.Small, e["colorFuel"], e["colorLampOff"], e["colorLampOn"], e["type"], e["alt"]);
Fillbots.PreSpawnFillbot(e.beat, 1, (int)Scripts_Fillbots.BotSize.Small, e["colorFuel"], e["colorLampOff"], e["colorLampOn"], e["type"], e["alt"]);
},
defaultLength = 6f,
parameters = new List<Param>()
@ -74,6 +74,24 @@ namespace HeavenStudio.Games.Loaders
new Param("colorLampOn", new Color(1f, 1f, 0.42f), "On Lamp Color", "Set the color of the on lamp."),
},
},
new GameAction("custom", "Custom Bot")
{
preFunction = delegate {
var e = eventCaller.currentEntity;
Fillbots.PreSpawnFillbot(e.beat, e.length-5, e["size"], e["colorFuel"], e["colorLampOff"], e["colorLampOn"], e["type"], e["alt"]);
},
defaultLength = 6f,
resizable = true,
parameters = new List<Param>()
{
new Param("size", Scripts_Fillbots.BotSize.Medium, "Size", "Set the size of the Robot."),
new Param("alt", false, "Alternate OK"),
new Param("type", Scripts_Fillbots.EndAnim.Both, "Success Reaction", "Set the reaction of the Robot."),
new Param("colorFuel", new Color(1f, 0.385f, 0.385f), "Fuel Color", "Set the color of the fuel."),
new Param("colorLampOff", new Color(0.635f, 0.635f, 0.185f), "Off Lamp Color", "Set the color of the off lamp."),
new Param("colorLampOn", new Color(1f, 1f, 0.42f), "On Lamp Color", "Set the color of the on lamp."),
},
},
new GameAction("blackout", "Blackout")
{
function = delegate { Fillbots.instance.Blackout();},
@ -216,12 +234,11 @@ namespace HeavenStudio.Games
}
}
public static void PreSpawnFillbot(double beat, double holdLength, BotSize size, Color fuelColor, Color lampColorOff, Color lampColorOn, int endAnim, bool altOK)
public static void PreSpawnFillbot(double beat, double holdLength, int size, Color fuelColor, Color lampColorOff, Color lampColorOn, int endAnim, bool altOK)
{
Debug.Log(altOK);
if (GameManager.instance.currentGame == "fillbots")
{
instance.SpawnFillbot(beat, holdLength, size, fuelColor, lampColorOff, lampColorOn, (EndAnim)endAnim, altOK);
instance.SpawnFillbot(beat, holdLength, (BotSize)size, fuelColor, lampColorOff, lampColorOn, (EndAnim)endAnim, altOK);
}
else
{
@ -229,7 +246,7 @@ namespace HeavenStudio.Games
{
beat = beat,
holdLength = holdLength,
size = size,
size = (BotSize)size,
fuelColor = fuelColor,
lampColorOff = lampColorOff,
lampColorOn = lampColorOn,
@ -254,27 +271,46 @@ namespace HeavenStudio.Games
spawnedBot.holdLength = holdLength;
}
spawnedBot.startBeat = beat;
spawnedBot.fuelColor = fuelColor;
spawnedBot.lampColorOff = lampColorOff;
spawnedBot.lampColorOn = lampColorOn;
spawnedBot.endAnim = endAnim;
spawnedBot.altOK = altOK;
spawnedBot.Init(beat);
BeatAction.New(instance, new List<BeatAction.Action>()
{
new BeatAction.Action(beat - 0.5, delegate
spawnedBot.Init();
var actions = new List<BeatAction.Action>();
var fallingBots = currentBots.FindAll(x => x.startBeat < beat && x.startBeat + 3 >= beat);
if (fallingBots is null) {
actions.Add(new BeatAction.Action(beat - 0.5, delegate
{
if (conveyerStartBeat != -1) conveyerNormalizedOffset = Conductor.instance.GetPositionFromBeat(conveyerStartBeat, 1);
conveyerStartBeat = -2;
}),
new BeatAction.Action(beat + 3, delegate
}));
} else {
actions.Add(new BeatAction.Action(beat - 0.25, delegate
{
if (!PlayerInput.GetIsAction(InputAction_BasicPress)) filler.DoScaledAnimationAsync("FillerPrepare", 0.5f);
conveyerStartBeat = beat + 3;
fillerPosition = size;
})
});
foreach (var bot in fallingBots)
{
bot.StackToLeft(beat, 0.25);
}
conveyerStartBeat = beat - 0.25;
}));
actions.Add(new BeatAction.Action(beat, delegate
{
if (conveyerStartBeat != -1) conveyerNormalizedOffset = Conductor.instance.GetPositionFromBeat(conveyerStartBeat, 1);
conveyerStartBeat = -2;
}));
}
actions.Add(new BeatAction.Action(beat + 3, delegate
{
if (!PlayerInput.GetIsAction(InputAction_BasicPress)) filler.DoScaledAnimationAsync("FillerPrepare", 0.5f);
conveyerStartBeat = beat + 3;
fillerPosition = size;
}));
BeatAction.New(instance, actions);
}
public void ToggleBop(double beat, float length, bool bopOrNah, bool autoBop)

View file

@ -39,11 +39,16 @@ namespace HeavenStudio.Games.Scripts_Fillbots
[System.NonSerialized] public Color lampColorOn;
double conveyerRestartLength = 0.5;
[System.NonSerialized] public double startBeat = -1;
private double conveyerStartBeat = -1;
private double conveyerLength = 1;
private Vector2 startPos;
private float lerpDistance;
private float lerpIdleDistance;
[SerializeField] private float flyDistance;
private float stackDistanceRate = 0.2f;
[SerializeField] private float stackDistanceRate;
[Header("Body Parts")]
[SerializeField] private Animator fullBody;
@ -62,9 +67,6 @@ namespace HeavenStudio.Games.Scripts_Fillbots
private float bodyPosY;
private float headPosY;
private double startBeat = -1;
private double conveyerStartBeat = -1;
private bool legsHaveFallen;
private bool bodyHasFallen;
private bool headHasFallen;
@ -79,6 +81,8 @@ namespace HeavenStudio.Games.Scripts_Fillbots
private BotState botState = BotState.Idle;
private bool isExplode = false;
[System.NonSerialized] public bool isStack;
private double stackBeat, stackLength;
[System.NonSerialized] public EndAnim endAnim;
[System.NonSerialized] public bool altOK;
@ -108,32 +112,20 @@ namespace HeavenStudio.Games.Scripts_Fillbots
startPos = transform.position;
lerpDistance = 0 - startPos.x;
lerpIdleDistance = lerpDistance;
}
public void MoveConveyer(float normalized)
public void MoveConveyer(float normalized, float lerpDistance, float flyDistance = 0)
{
if (botState is BotState.Holding)
{
StopConveyer();
return;
}
if (!headHasFallen || !bodyHasFallen || !legsHaveFallen) return;
transform.position = new Vector3(Mathf.LerpUnclamped(startPos.x, startPos.x + lerpDistance, normalized), startPos.y);
if (normalized >= 4)
{
game.currentBots.Remove(this);
Destroy(gameObject);
}
}
public void FlyConveyer(float normalized)
{
if (botState is not BotState.Ace) return;
if (!headHasFallen || !bodyHasFallen || !legsHaveFallen) return;
transform.position = new Vector3(Mathf.LerpUnclamped(startPos.x, startPos.x + lerpDistance, normalized),
Mathf.LerpUnclamped(startPos.y, startPos.y + flyDistance, normalized));
if (normalized >= 4)
if (normalized >= 5)
{
game.currentBots.Remove(this);
Destroy(gameObject);
@ -142,14 +134,23 @@ namespace HeavenStudio.Games.Scripts_Fillbots
public void StopConveyer()
{
if (!headHasFallen || !bodyHasFallen || !legsHaveFallen) return;
startPos = transform.position;
lerpIdleDistance = 0 - startPos.x;
}
public void Init(double beat)
public void StackToLeft(double beat, double length)
{
startBeat = beat;
conveyerStartBeat = beat + 3;
if (conveyerLength <= stackDistanceRate) return;
isStack = true;
stackBeat = beat - length;
stackLength = length;
conveyerStartBeat += stackDistanceRate;
conveyerLength -= stackDistanceRate;
}
public void Init()
{
conveyerStartBeat = startBeat + 3;
fullBodyMaterial = fullBody.GetComponent<SpriteRenderer>().material;
fullBodyMaterial.SetColor("_ColorBravo", fuelColor);
@ -168,10 +169,10 @@ namespace HeavenStudio.Games.Scripts_Fillbots
BeatAction.New(game, new List<BeatAction.Action>()
{
new BeatAction.Action(beat, delegate { legs.Play("Impact", 0, 0); legsHaveFallen = true; legsTrans.position = new Vector3(legsTrans.position.x, legsPosY); }),
new BeatAction.Action(beat + 1, delegate { body.Play("Impact", 0, 0); bodyHasFallen = true; bodyTrans.position = new Vector3(bodyTrans.position.x, bodyPosY);}),
new BeatAction.Action(beat + 2, delegate { head.Play("Impact", 0, 0); headHasFallen = true; headTrans.position = new Vector3(headTrans.position.x, headPosY);}),
new BeatAction.Action(beat + 3, delegate
new BeatAction.Action(startBeat, delegate { legs.Play("Impact", 0, 0); legsHaveFallen = true; legsTrans.position = new Vector3(legsTrans.position.x, legsPosY); }),
new BeatAction.Action(startBeat + 1, delegate { body.Play("Impact", 0, 0); bodyHasFallen = true; bodyTrans.position = new Vector3(bodyTrans.position.x, bodyPosY);}),
new BeatAction.Action(startBeat + 2, delegate { head.Play("Impact", 0, 0); headHasFallen = true; headTrans.position = new Vector3(headTrans.position.x, headPosY);}),
new BeatAction.Action(startBeat + 3, delegate
{
fullBody.gameObject.SetActive(true);
legs.gameObject.SetActive(false);
@ -190,9 +191,9 @@ namespace HeavenStudio.Games.Scripts_Fillbots
MultiSound.Play(new MultiSound.Sound[]
{
new MultiSound.Sound("fillbots/" + sizePrefix + "Fall", beat),
new MultiSound.Sound("fillbots/" + sizePrefix + "Fall", beat + 1),
new MultiSound.Sound("fillbots/" + sizePrefix + "Fall", beat + 2),
new MultiSound.Sound("fillbots/" + sizePrefix + "Fall", startBeat),
new MultiSound.Sound("fillbots/" + sizePrefix + "Fall", startBeat + 1),
new MultiSound.Sound("fillbots/" + sizePrefix + "Fall", startBeat + 2),
});
game.ScheduleInput(startBeat, 4, Fillbots.InputAction_BasicPress, JustHold, Empty, Empty);
@ -226,16 +227,30 @@ namespace HeavenStudio.Games.Scripts_Fillbots
float lerpedY = Mathf.Lerp(headPosY + limbFallHeight, headPosY, normalizedBeat);
headTrans.position = new Vector3(headTrans.position.x, Mathf.Clamp(lerpedY, headPosY, headPosY + limbFallHeight));
}
if (true)
if (isStack)
{
float normalizedBeat = cond.GetPositionFromBeat(this.conveyerStartBeat, 1);
if (normalizedBeat >= 0)
float normalizedBeat = cond.GetPositionFromBeat(stackBeat, stackLength);
if (normalizedBeat >= 0 && normalizedBeat < 1)
{
if (botState is BotState.Ace) FlyConveyer(normalizedBeat);
else MoveConveyer(normalizedBeat);
MoveConveyer(normalizedBeat, lerpDistance*stackDistanceRate);
}
else if (normalizedBeat >= 1)
{
MoveConveyer(1, lerpDistance*stackDistanceRate);
StopConveyer();
isStack = false;
}
}
if (headHasFallen && bodyHasFallen && legsHaveFallen)
{
float normalizedBeat = cond.GetPositionFromBeat(this.conveyerStartBeat, conveyerLength);
if (normalizedBeat >= 0)
{
if (botState is BotState.Ace) MoveConveyer(normalizedBeat, lerpDistance, flyDistance);
else if (botState is BotState.Idle) MoveConveyer(normalizedBeat, lerpIdleDistance);
else MoveConveyer(normalizedBeat, lerpDistance);
}
}
}
if (botState is BotState.Holding)
@ -295,14 +310,6 @@ namespace HeavenStudio.Games.Scripts_Fillbots
if (game.conveyerStartBeat == -1) game.conveyerStartBeat = this.conveyerStartBeat;
releaseEvent.Disable();
}
}
else if (botState is BotState.Ace)
{
}
else if (botState is BotState.Just)
{
}
else
{
@ -330,6 +337,7 @@ namespace HeavenStudio.Games.Scripts_Fillbots
}
if (game.conveyerStartBeat != -1) game.conveyerNormalizedOffset = Conductor.instance.GetPositionFromBeat(game.conveyerStartBeat, 1);
game.conveyerStartBeat = -1;
conveyerLength = 1;
transform.position = new Vector3(0, transform.position.y, 0);
botState = BotState.Holding;
fullBody.DoScaledAnimationAsync("Hold", 1f);