ColorEase struct, new spritesheet

This commit is contained in:
AstrlJelly 2024-01-24 13:03:36 -05:00
parent 58238f0484
commit e1d55fce67
10 changed files with 331 additions and 75 deletions

View file

@ -661,7 +661,7 @@ SpriteRenderer:
m_FlipX: 0 m_FlipX: 0
m_FlipY: 0 m_FlipY: 0
m_DrawMode: 2 m_DrawMode: 2
m_Size: {x: 100, y: 0.47} m_Size: {x: 100, y: 0.45}
m_AdaptiveModeThreshold: 0.5 m_AdaptiveModeThreshold: 0.5
m_SpriteTileMode: 0 m_SpriteTileMode: 0
m_WasSpriteAssigned: 1 m_WasSpriteAssigned: 1
@ -761,6 +761,8 @@ MonoBehaviour:
scheduledInputs: [] scheduledInputs: []
canGO: {fileID: 8575099813453766973} canGO: {fileID: 8575099813453766973}
blackout: {fileID: 6779319467216197044} blackout: {fileID: 6779319467216197044}
alarmMat: {fileID: 2100000, guid: cffd715f1564d4440881c6fe148baa9c, type: 2}
bgPlaneSR: {fileID: 5948254459511631684}
conveyorBeltAnim: {fileID: 3839135881600344077} conveyorBeltAnim: {fileID: 3839135881600344077}
alarmAnim: {fileID: 3637100343128600021} alarmAnim: {fileID: 3637100343128600021}
dingAnim: {fileID: 7386547292618809648} dingAnim: {fileID: 7386547292618809648}
@ -1087,12 +1089,8 @@ MonoBehaviour:
m_Name: m_Name:
m_EditorClassIdentifier: m_EditorClassIdentifier:
startBeat: 0 startBeat: 0
parentAnim: {fileID: 0}
anim: {fileID: 5817211847633092072} anim: {fileID: 5817211847633092072}
sr: {fileID: 8380232789943656751}
canSprites:
- {fileID: 947544752, guid: 5a8f2715082952e4b804a4b950cf25d4, type: 3}
- {fileID: -1665090095, guid: 5a8f2715082952e4b804a4b950cf25d4, type: 3}
cannedSprite: {fileID: 1930332746, guid: 5a8f2715082952e4b804a4b950cf25d4, type: 3}
--- !u!95 &5817211847633092072 --- !u!95 &5817211847633092072
Animator: Animator:
serializedVersion: 5 serializedVersion: 5

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

After

Width:  |  Height:  |  Size: 164 KiB

View file

@ -47,7 +47,7 @@ TextureImporter:
spriteMeshType: 1 spriteMeshType: 1
alignment: 0 alignment: 0
spritePivot: {x: 0.5, y: 0.5} spritePivot: {x: 0.5, y: 0.5}
spritePixelsToUnits: 215 spritePixelsToUnits: 197
spriteBorder: {x: 0, y: 0, z: 0, w: 0} spriteBorder: {x: 0, y: 0, z: 0, w: 0}
spriteGenerateFallbackPhysicsShape: 1 spriteGenerateFallbackPhysicsShape: 1
alphaUsage: 1 alphaUsage: 1
@ -108,10 +108,10 @@ TextureImporter:
name: Cannery_0 name: Cannery_0
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 139 x: 129
y: 1886 y: 1907
width: 222 width: 206
height: 178 height: 116
alignment: 0 alignment: 0
pivot: {x: 0.5, y: 0.5} pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
@ -129,10 +129,10 @@ TextureImporter:
name: Cannery_1 name: Cannery_1
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 408 x: 378
y: 1886 y: 1906
width: 222 width: 206
height: 178 height: 141
alignment: 0 alignment: 0
pivot: {x: 0.5, y: 0.5} pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
@ -150,10 +150,10 @@ TextureImporter:
name: Cannery_2 name: Cannery_2
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 659 x: 610
y: 1887 y: 1907
width: 223 width: 207
height: 178 height: 165
alignment: 0 alignment: 0
pivot: {x: 0.5, y: 0.5} pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
@ -171,10 +171,10 @@ TextureImporter:
name: Cannery_3 name: Cannery_3
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 1042 x: 965
y: 1868 y: 1893
width: 188 width: 174
height: 104 height: 90
alignment: 0 alignment: 0
pivot: {x: 0.5, y: 0.5} pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
@ -192,10 +192,10 @@ TextureImporter:
name: Cannery_4 name: Cannery_4
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 1958 x: 1784
y: 352 y: 569
width: 212 width: 175
height: 1659 height: 1459
alignment: 0 alignment: 0
pivot: {x: 0.5, y: 0.5} pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
@ -213,10 +213,10 @@ TextureImporter:
name: Cannery_5 name: Cannery_5
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 2354 x: 2172
y: 352 y: 1559
width: 212 width: 177
height: 1659 height: 371
alignment: 0 alignment: 0
pivot: {x: 0.5, y: 0.5} pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
@ -234,10 +234,10 @@ TextureImporter:
name: Cannery_9 name: Cannery_9
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 1035 x: 963
y: 1025 y: 1114
width: 776 width: 709
height: 680 height: 619
alignment: 0 alignment: 0
pivot: {x: 0.5, y: 0.5} pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
@ -255,10 +255,10 @@ TextureImporter:
name: Cannery_16 name: Cannery_16
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 712 x: 659
y: 505 y: 627
width: 243 width: 225
height: 370 height: 323
alignment: 0 alignment: 0
pivot: {x: 0.5, y: 0.5} pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
@ -276,12 +276,12 @@ TextureImporter:
name: Cannery_17 name: Cannery_17
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 1067 x: 483
y: 502 y: 511
width: 243 width: 224
height: 370 height: 93
alignment: 0 alignment: 0
pivot: {x: 0.5, y: 0.5} pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
outline: [] outline: []
physicsShape: [] physicsShape: []
@ -297,12 +297,12 @@ TextureImporter:
name: Cannery_18 name: Cannery_18
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 1439 x: 122
y: 508 y: 585
width: 243 width: 251
height: 370 height: 167
alignment: 0 alignment: 0
pivot: {x: 0.5, y: 0.5} pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
outline: [] outline: []
physicsShape: [] physicsShape: []
@ -318,10 +318,10 @@ TextureImporter:
name: Cannery_21 name: Cannery_21
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 224 x: 208
y: 86 y: 240
width: 2218 width: 2054
height: 206 height: 190
alignment: 0 alignment: 0
pivot: {x: 0.5, y: 0.5} pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
@ -339,10 +339,10 @@ TextureImporter:
name: Cannery_15 name: Cannery_15
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 446 x: 436
y: 695 y: 777
width: 93 width: 87
height: 147 height: 136
alignment: 0 alignment: 0
pivot: {x: 0.5, y: 0.5} pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
@ -360,10 +360,10 @@ TextureImporter:
name: Cannery_6 name: Cannery_6
rect: rect:
serializedVersion: 2 serializedVersion: 2
x: 123 x: 114
y: 1048 y: 1130
width: 754 width: 699
height: 762 height: 706
alignment: 0 alignment: 0
pivot: {x: 0.5, y: 0.5} pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0} border: {x: 0, y: 0, z: 0, w: 0}
@ -377,6 +377,174 @@ TextureImporter:
indices: indices:
edges: [] edges: []
weights: [] weights: []
- serializedVersion: 2
name: Cannery_7
rect:
serializedVersion: 2
x: 2628
y: 1343
width: 720
height: 630
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: e88f826d2c942d343ad384ad304e4622
internalID: -2125757524
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: Cannery_8
rect:
serializedVersion: 2
x: 2157
y: 1192
width: 196
height: 108
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 3b04e321e20f74343985c4951f592cb1
internalID: -506358788
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: Cannery_10
rect:
serializedVersion: 2
x: 2119
y: 1005
width: 255
height: 97
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 9a0758c2c57fe0245982ee36c145e82c
internalID: -595179016
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: Cannery_11
rect:
serializedVersion: 2
x: 2093
y: 878
width: 308
height: 76
alignment: 0
pivot: {x: 0.5, y: 0.5}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 84d71a99c626fcb47bf9af2c04cdf16f
internalID: -627351396
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: Cannery_12
rect:
serializedVersion: 2
x: 1047
y: 744
width: 225
height: 267
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: aae6773ff14e4384ba6defdf7b0daa2d
internalID: -107611502
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: Cannery_13
rect:
serializedVersion: 2
x: 1308
y: 497
width: 222
height: 81
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: a5ffdad5e5873c64fa570dd143d1f2ac
internalID: -930593981
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: Cannery_14
rect:
serializedVersion: 2
x: 1033
y: 512
width: 207
height: 86
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 5f2a7f616cb9c2d4ab01c0ffbba4b53c
internalID: 626725903
vertices: []
indices:
edges: []
weights: []
- serializedVersion: 2
name: Cannery_19
rect:
serializedVersion: 2
x: 115
y: 922
width: 266
height: 177
alignment: 0
pivot: {x: 0, y: 0}
border: {x: 0, y: 0, z: 0, w: 0}
outline: []
physicsShape: []
tessellationDetail: 0
bones: []
spriteID: 6d1615345ef625841af57697ace0af3c
internalID: -2139971189
vertices: []
indices:
edges: []
weights: []
outline: [] outline: []
physicsShape: [] physicsShape: []
bones: [] bones: []

View file

@ -12,21 +12,19 @@ namespace HeavenStudio.Games.Scripts_Cannery
public double startBeat; public double startBeat;
[Header("Components")] [Header("Components")]
[SerializeField] Animator parentAnim;
[SerializeField] Animator anim; [SerializeField] Animator anim;
[SerializeField] SpriteRenderer sr; // [SerializeField] SpriteRenderer sr;
[Header("Sprites")]
[SerializeField] Sprite[] canSprites;
[SerializeField] Sprite cannedSprite;
Cannery game; Cannery game;
private void Awake() private void Awake()
{ {
game = Cannery.instance; game = Cannery.instance;
int random = Random.Range(0, 2); int random = Random.Range(-1, 1);
Debug.Log(random); Debug.Log(random);
sr.sprite = canSprites[random]; var pos = transform.position;
pos.x *= random;
game.ScheduleInput(startBeat, 1, Minigame.InputAction_BasicPress, Hit, null, null); game.ScheduleInput(startBeat, 1, Minigame.InputAction_BasicPress, Hit, null, null);
} }
@ -36,14 +34,14 @@ namespace HeavenStudio.Games.Scripts_Cannery
float normalizedBeat = Conductor.instance.GetPositionFromBeat(startBeat, 2); float normalizedBeat = Conductor.instance.GetPositionFromBeat(startBeat, 2);
Debug.Log(normalizedBeat); Debug.Log(normalizedBeat);
if (normalizedBeat > 1) Destroy(gameObject); if (normalizedBeat > 1) Destroy(gameObject);
anim.DoNormalizedAnimation("Move", normalizedBeat); parentAnim.DoNormalizedAnimation("Move", normalizedBeat);
} }
private void Hit(PlayerActionEvent caller, float state) private void Hit(PlayerActionEvent caller, float state)
{ {
game.cannerAnim.DoScaledAnimationAsync("Can", 0.5f); game.cannerAnim.DoScaledAnimationAsync("Can", 0.5f);
SoundByte.PlayOneShotGame("cannery/can"); SoundByte.PlayOneShotGame("cannery/can");
sr.sprite = cannedSprite; anim.DoScaledAnimationAsync("Canned", 0.5f);
} }
} }
} }

View file

@ -37,6 +37,35 @@ namespace HeavenStudio.Games.Loaders
function = delegate { Cannery.instance.Blackout(); }, function = delegate { Cannery.instance.Blackout(); },
defaultLength = 0.5f, defaultLength = 0.5f,
}, },
new GameAction("backgroundColor", "Background Color")
{
function = delegate {
var e = eventCaller.currentEntity;
Cannery.instance.BackgroundColorChange(e.beat, e.length, e["startColor"], e["endColor"], e["ease"]);
},
defaultLength = 1f,
resizable = true,
parameters = new List<Param>()
{
new Param("startColor", new Color(1, 1, 1), "Start Color", "Set the color at the start of the event."),
new Param("endColor", new Color(1, 1, 1), "End Color", "Set the color at the end of the event."),
new Param("ease", Util.EasingFunction.Ease.Instant, "Ease", "Set the easing of the action."),
},
},
new GameAction("alarmColor", "Alarm Color")
{
function = delegate {
var e = eventCaller.currentEntity;
Cannery.instance.AlarmColor(e.beat, e.length, e["startColor"], e["endColor"], e["ease"]);
},
defaultLength = 0.5f,
parameters = new List<Param>()
{
new Param("startColor", new Color(0.8627f, 0.3725f, 0.0313f), "Start Color", "Set the color at the start of the event."),
new Param("endColor", new Color(0.8627f, 0.3725f, 0.0313f), "End Color", "Set the color at the end of the event."),
new Param("ease", Util.EasingFunction.Ease.Instant, "Ease", "Set the easing of the action."),
}
},
} }
// , // ,
// new List<string>() { "mob", "normal" }, // new List<string>() { "mob", "normal" },
@ -56,6 +85,8 @@ namespace HeavenStudio.Games
[Header("Objects")] [Header("Objects")]
[SerializeField] GameObject canGO; [SerializeField] GameObject canGO;
[SerializeField] GameObject blackout; [SerializeField] GameObject blackout;
[SerializeField] Material alarmMat;
[SerializeField] SpriteRenderer bgPlaneSR;
[Header("Animators")] [Header("Animators")]
[SerializeField] Animator conveyorBeltAnim; [SerializeField] Animator conveyorBeltAnim;
@ -63,27 +94,48 @@ namespace HeavenStudio.Games
public Animator dingAnim; public Animator dingAnim;
public Animator cannerAnim; public Animator cannerAnim;
private ColorEase bgColorEase;
private ColorEase alarmColorEase;
private bool alarmBop = true; private bool alarmBop = true;
public static Cannery instance; public static Cannery instance;
void Awake() private void Awake()
{ {
instance = this; instance = this;
canGO.SetActive(false); canGO.SetActive(false);
} }
void Update() private void Update()
{ {
conveyorBeltAnim.DoNormalizedAnimation("Move", (Conductor.instance.songPositionInBeats / 2) % 1); conveyorBeltAnim.DoNormalizedAnimation("Move", (Conductor.instance.songPositionInBeats / 2) % 1);
bgPlaneSR.color = GetNewColor(bgColorEase);
alarmMat.SetColor("_ColorAlpha", GetNewColor(alarmColorEase));
} }
public override void OnGameSwitch(double beat) public override void OnGameSwitch(double beat)
{ {
List<RiqEntity> cans = GameManager.instance.Beatmap.Entities.FindAll(e => e.datamodel == "cannery/can" && beat > e.beat && beat < e.beat + 1); List<RiqEntity> events = GameManager.instance.Beatmap.Entities.FindAll(e => e.datamodel.Split('/')[0] == "cannery");
List<RiqEntity> cans = events.FindAll(e => e.datamodel == "cannery/can" && beat > e.beat && beat < e.beat + 1);
foreach (var can in cans) { foreach (var can in cans) {
SendCan(can.beat); SendCan(can.beat);
} }
RiqEntity bgEvent = events.FindLast(e => e.datamodel == "cannery/backgroundColor" && e.beat < beat);
if (bgEvent != null) {
var e = bgEvent;
BackgroundColorChange(e.beat, e.length, e["startColor"], e["endColor"], e["ease"]);
} else {
BackgroundColorChange(0, 0, new Color(0.8627f, 0.3725f, 0.0313f), new Color(0.8627f, 0.3725f, 0.0313f), 0);
}
RiqEntity alarmEvent = events.FindLast(e => e.datamodel == "cannery/alarmColor" && e.beat < beat);
if (alarmEvent != null) {
var e = alarmEvent;
BackgroundColorChange(e.beat, e.length, e["startColor"], e["endColor"], e["ease"]);
} else {
BackgroundColorChange(0, 0, Color.white, Color.white, 0);
}
} }
public override void OnPlay(double beat) public override void OnPlay(double beat)
@ -110,6 +162,16 @@ namespace HeavenStudio.Games
} }
} }
public void AlarmColor(double beat, float length, Color startColor, Color endColor, int ease)
{
alarmColorEase = new(beat, length, startColor, endColor, ease);
}
public void BackgroundColorChange(double beat, float length, Color startColor, Color endColor, int ease)
{
bgColorEase = new(beat, length, startColor, endColor, ease);
}
public static void CanSFX(double beat) public static void CanSFX(double beat)
{ {
SoundByte.PlayOneShotGame("cannery/ding", beat); SoundByte.PlayOneShotGame("cannery/ding", beat);
@ -117,7 +179,6 @@ namespace HeavenStudio.Games
public void SendCan(double beat) public void SendCan(double beat)
{ {
// dingAnim.DoScaledAnimationFromBeatAsync("Ding", 0.5f, beat);
// do the ding animation on the beat // do the ding animation on the beat
BeatAction.New(this, new() { new(beat, delegate { dingAnim.DoScaledAnimationFromBeatAsync("Ding", 0.5f, beat); }) }); BeatAction.New(this, new() { new(beat, delegate { dingAnim.DoScaledAnimationFromBeatAsync("Ding", 0.5f, beat); }) });

View file

@ -485,6 +485,36 @@ namespace HeavenStudio.Games
#endregion #endregion
#region Color
public struct ColorEase
{
public double startBeat;
public float length;
public Color startColor, endColor;
public Util.EasingFunction.Ease ease;
public readonly Util.EasingFunction.Function easeFunc;
public ColorEase(double startBeat, float length, Color startColor, Color endColor, int ease) {
this.startBeat = startBeat;
this.length = length;
(this.startColor, this.endColor) = (startColor, endColor);
this.ease = (Util.EasingFunction.Ease)ease;
this.easeFunc = Util.EasingFunction.GetEasingFunction(this.ease);
}
}
public Color GetNewColor(ColorEase ce) => GetNewColor(ce.startBeat, ce.length, ce.startColor, ce.endColor, ce.easeFunc);
public Color GetNewColor(double beat, float length, Color start, Color end, Util.EasingFunction.Function func)
{
float normalizedBeat = Mathf.Clamp01(Conductor.instance.GetPositionFromBeat(beat, length));
float newR = func(start.r, end.r, normalizedBeat);
float newG = func(start.g, end.g, normalizedBeat);
float newB = func(start.b, end.b, normalizedBeat);
return new Color(newR, newG, newB);
}
#endregion
private void OnDestroy() private void OnDestroy()
{ {
foreach (var evt in scheduledInputs) foreach (var evt in scheduledInputs)

View file

@ -17,6 +17,7 @@ MonoBehaviour:
DenseViewWidthThreshold: 512 DenseViewWidthThreshold: 512
_disableAutoReloadInBackground: 0 _disableAutoReloadInBackground: 0
ImportedScriptPaths: ImportedScriptPaths:
- Assets/Scripts/Games/RhythmCannery/Can.cs - Assets/Scripts/Games/Cannery/Can.cs
- Assets/Scripts/Games/Cannery/Cannery.cs
PathsToSkipImportEvent: [] PathsToSkipImportEvent: []
PathsToIgnoreOverwriteSettingOnAttribute: [] PathsToIgnoreOverwriteSettingOnAttribute: []