bg nearly done

This commit is contained in:
AstrlJelly 2023-09-20 10:53:00 -04:00
parent d00cc849a0
commit 6433fd6ac9
3 changed files with 107 additions and 106 deletions

View file

@ -97613,6 +97613,10 @@ MonoBehaviour:
currentBgEffect: 0
BGPlane: {fileID: 5423016352081307686}
BGEffect: {fileID: 185016033042157469}
BGTextures:
- {fileID: 5147067056442997835}
- {fileID: 6796439334000697740}
- {fileID: 4189433424192044813}
BGGradient: {fileID: 2790469215453043610}
BGBlood: {fileID: 5404947306895237780}
BGRadial: {fileID: 8238140095837895901}

View file

@ -544,12 +544,16 @@ namespace HeavenStudio.Games
public SpriteRenderer BGPlane;
public GameObject BGEffect;
public SpriteRenderer[] BGTextures;
public GameObject BGGradient;
SpriteRenderer bgGradientRenderer;
public GameObject BGBlood;
SpriteRenderer bgBloodRenderer;
public GameObject BGRadial;
SpriteRenderer bgRadialRenderer;
public GameObject BGBlood;
SpriteRenderer bgBloodRenderer;
Animator bgEffectAnimator;
SpriteRenderer bgEffectSpriteRenderer;
@ -569,10 +573,6 @@ namespace HeavenStudio.Games
instance = this;
KarateManPot.ResetLastCombo();
cameraPosition = CameraPosition[0].position;
bgGradientRenderer = BGGradient.GetComponent<SpriteRenderer>();
bgBloodRenderer = BGBlood.GetComponent<SpriteRenderer>();
bgRadialRenderer = BGRadial.GetComponent<SpriteRenderer>();
colorEnds =
colorStarts = new Color[] {
@ -581,9 +581,7 @@ namespace HeavenStudio.Games
new(),
};
if (!Conductor.instance.NotStopped()) {
OnGameSwitch(Conductor.instance.songPositionInBeatsAsDouble);
}
OnGameSwitch(Conductor.instance.songPositionInBeatsAsDouble);
}
public override void OnGameSwitch(double beat)
@ -618,8 +616,8 @@ namespace HeavenStudio.Games
}
// init colors
RiqEntity bg = prevEntities.FindLast(c => c.beat < beat && c.datamodel.Split(1) == "background appearance");
RiqEntity obj = prevEntities.FindLast(c => c.beat < beat && c.datamodel.Split(1) == "set object colors");
RiqEntity bg = prevEntities.FindLast(c => c.beat <= beat && c.datamodel.Split(1) == "background appearance");
RiqEntity obj = prevEntities.FindLast(c => c.beat <= beat && c.datamodel.Split(1) == "set object colors");
if (bg != null) {
BackgroundColor(
@ -652,6 +650,7 @@ namespace HeavenStudio.Games
public override void OnStop(double beat)
{
OnGameSwitch(beat);
Debug.Log("ONSTOP BEAT : " + beat);
}
public override void OnPlay(double beat)
@ -664,10 +663,6 @@ namespace HeavenStudio.Games
GameCamera.additionalPosition = cameraPosition - GameCamera.defaultPosition;
bgEffectAnimator = BGEffect.GetComponent<Animator>();
bgEffectSpriteRenderer = BGEffect.GetComponent<SpriteRenderer>();
bgGradientRenderer = BGGradient.GetComponent<SpriteRenderer>();
bgBloodRenderer = BGBlood.GetComponent<SpriteRenderer>();
bgRadialRenderer = BGRadial.GetComponent<SpriteRenderer>();
}
private void Update()
@ -725,7 +720,6 @@ namespace HeavenStudio.Games
}
BackgroundColorUpdate();
Debug.Log(colorEnds[0]);
GameCamera.additionalPosition = cameraPosition - GameCamera.defaultPosition;
BGEffect.transform.position = new Vector3(GameCamera.instance.transform.position.x, GameCamera.instance.transform.position.y, 0);
@ -747,47 +741,6 @@ namespace HeavenStudio.Games
private Color TintColor(Color color) => Color.LerpUnclamped(color, new Color(195 / 255f, 48 / 255f, 2 / 255f), 0.45f);
static List<RiqEntity> allHits = new List<RiqEntity>();
static List<RiqEntity> allEnds = new List<RiqEntity>();
public static int CountHitsToEnd(double fromBeat)
{
allHits = EventCaller.GetAllInGameManagerList("karateman", new string[] { "hit", "bulb", "kick", "combo" });
allEnds = EventCaller.GetAllInGameManagerList("gameManager", new string[] { "switchGame", "end" });
allHits.Sort((x, y) => x.beat.CompareTo(y.beat));
allEnds.Sort((x, y) => x.beat.CompareTo(y.beat));
double endBeat = double.MaxValue;
//get the beat of the closest end event
foreach (var end in allEnds)
{
if (end.beat > fromBeat)
{
endBeat = end.beat;
break;
}
}
//count each hit event beginning from our current beat to the beat of the closest game switch or end
int count = 0;
string type;
for (int i = 0; i < allHits.Count; i++)
{
RiqEntity h = allHits[i];
if (h.beat >= fromBeat)
{
if (h.beat < endBeat) {
//kicks and combos count for 2 hits
type = h.datamodel.Split('/')[1];
count += (type is "kick" or "combo") ? 2 : 1;
} else {
break;
}
}
}
return count;
}
public static void DoSpecialCamera(double beat, float length, bool returns)
{
if (cameraAngle == CameraAngle.Normal)
@ -796,7 +749,7 @@ namespace HeavenStudio.Games
cameraAngle = CameraAngle.Special;
}
wantsReturn = returns ? beat + length - 0.001f : double.MaxValue;
cameraReturnLength = Mathf.Min(2f, length*0.5f);
cameraReturnLength = Mathf.Min(2f, length * 0.5f);
}
public void DoWord(double beat, double length, int type, bool pitchVoice, float forcePitch, bool customLength, bool doSound = true)
@ -947,7 +900,7 @@ namespace HeavenStudio.Games
{
int comboId = KarateManPot.GetNewCombo();
BeatAction.New(this, new List<BeatAction.Action>()
BeatAction.New(this, new List<BeatAction.Action>()
{
new BeatAction.Action(beat, delegate { CreateItemInstance(beat, "Item00", 0, KarateManPot.ItemType.ComboPot1, comboId); }),
new BeatAction.Action(beat + 0.25f, delegate { CreateItemInstance(beat + 0.25f, "Item00", 0, KarateManPot.ItemType.ComboPot2, comboId); }),
@ -1068,47 +1021,65 @@ namespace HeavenStudio.Games
colorStarts[1] = tinted ? Joe.Shadows[0].color : shadowStart;
colorEnds[1] = tinted ? (preset ? ShadowColors[presetBG] : TintColor(colorEnd)) : shadowEnd;
colorStarts[2] = autoColor ? bgBloodRenderer.color : filterStart;
colorStarts[2] = autoColor ? BGTextures[0].color : filterStart;
colorEnds[2] = autoColor ? TintColor(filterEnd) : filterEnd;
BGBlood.SetActive(textureType == (int)BackgroundTextureType.Blood);
BGGradient.SetActive(textureType == (int)BackgroundTextureType.Gradient);
BGRadial.SetActive(textureType == (int)BackgroundTextureType.Radial);
for (int i = 0; i < BGTextures.Length; i++) {
BGTextures[i].gameObject.SetActive(textureType == (i + 1));
}
// BGGradient.SetActive(textureType == (int)BackgroundTextureType.Gradient);
// BGRadial.SetActive(textureType == (int)BackgroundTextureType.Radial);
// BGBlood.SetActive(textureType == (int)BackgroundTextureType.Blood);
BackgroundColorUpdate();
}
private void BackgroundColorUpdate()
{
float[,] newRgb = new float[3, 3];
//float[,] newRgb = new float[3, 3];
SpriteRenderer[][] spriteRenderers = new[] {
new[] {BGPlane},
Joe.Shadows,
BGTextures,
};
for (int i = 0; i < newRgb.GetLength(0); i++)
for (int i = 0; i < spriteRenderers.Length; i++)
{
Debug.Log(colorStartBeats[i] + " and " + colorLengths[i]);
float normalizedBeat = Mathf.Clamp01(Conductor.instance.GetPositionFromBeat(colorStartBeats[i], colorLengths[i]));
if (double.IsNaN(normalizedBeat)) normalizedBeat = 0;
Debug.Log("normalizedBeat : " + normalizedBeat);
var func = Util.EasingFunction.GetEasingFunction(colorEases[i]);
Debug.Log("func : " + func);
float[] color = new float[3];
for (int j = 0; j < newRgb.GetLength(1); j++)
for (int j = 0; j < color.Length; j++)
{
float Hue(Color[] whichColors) => j switch {
0 => whichColors[i].r,
1 => whichColors[i].g,
2 => whichColors[i].b,
_ => 0,
_ => whichColors[i].b,
};
newRgb[i, j] = double.IsNaN(normalizedBeat) ? Hue(colorEnds) : func(Hue(colorStarts), Hue(colorEnds), normalizedBeat);
color[j] = func(Hue(colorStarts), Hue(colorEnds), normalizedBeat);
Debug.Log("color " + j + " : " + color[j]);
}
foreach (var renderer in spriteRenderers[i]) {
renderer.color = new Color(color[0], color[1], color[2]);
}
}
Debug.Log("newRgb[0, 0] : " + newRgb[0, 0]);
BGPlane.color = new Color(newRgb[0, 0], newRgb[0, 1], newRgb[0, 2]);
// manual color setting. remove this if the loop works
// BGPlane.color = new Color(newRgb[0, 0], newRgb[0, 1], newRgb[0, 2]);
foreach (var shadow in Joe.Shadows) {
shadow.color = new Color(newRgb[1, 0], newRgb[1, 1], newRgb[1, 2]);
}
// foreach (var shadow in Joe.Shadows) {
// shadow.color = new Color(newRgb[1, 0], newRgb[1, 1], newRgb[1, 2]);
// }
bgGradientRenderer.color =
bgBloodRenderer.color =
bgRadialRenderer.color = new Color(newRgb[2, 0], newRgb[2, 1], newRgb[2, 2]);
// foreach (var texture in BGTextures) {
// texture.color = new Color(newRgb[2, 0], newRgb[2, 1], newRgb[2, 2]);
// }
}
public void SetGameplayMods(double beat, int mode, bool combo)

View file

@ -2,6 +2,7 @@ using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Jukebox;
using HeavenStudio.Util;
@ -53,10 +54,8 @@ namespace HeavenStudio.Games.Scripts_KarateMan
{
float scaleFactor = 0f;
//clear all children of the holder
if (NoriHolder != null)
{
foreach (Transform child in NoriHolder)
{
if (NoriHolder != null) {
foreach (Transform child in NoriHolder) {
Destroy(child.gameObject);
}
}
@ -81,7 +80,7 @@ namespace HeavenStudio.Games.Scripts_KarateMan
NoriManiaInk01.SetActive(false);
playedJust = false;
inputsToSwitch = KarateMan.CountHitsToEnd(fromBeat);
inputsToSwitch = CountHitsToEnd(fromBeat);
break;
case (int) KarateMan.NoriMode.ManiaHorizontal:
MaxNori = 10;
@ -92,9 +91,9 @@ namespace HeavenStudio.Games.Scripts_KarateMan
NoriManiaInk01.SetActive(true);
playedJust = false;
inputsToSwitch = KarateMan.CountHitsToEnd(fromBeat);
inputsToSwitch = CountHitsToEnd(fromBeat);
break;
default:
default: //KarateMan.NoriMode.None
MaxNori = 0;
Nori = 0;
NoriManiaInk00.SetActive(false);
@ -249,21 +248,14 @@ namespace HeavenStudio.Games.Scripts_KarateMan
Material mat = NoriHeartMaterials[i];
if (noriMode == (int) KarateMan.NoriMode.Tengoku)
{
if (Nori == MaxNori)
{
if (Nori == MaxNori) {
mat.SetColor("_ColorAlpha", NoriColorsTengoku[3]);
}
else
{
if (KarateMan.instance.NoriPerformance < 0.6)
mat.SetColor("_ColorAlpha", NoriColorsTengoku[0]);
else
{
if (i < 2)
mat.SetColor("_ColorAlpha", NoriColorsTengoku[1]);
else
mat.SetColor("_ColorAlpha", NoriColorsTengoku[2]);
}
} else if (KarateMan.instance.NoriPerformance < 0.6) {
mat.SetColor("_ColorAlpha", NoriColorsTengoku[0]);
} else if (i < 2) {
mat.SetColor("_ColorAlpha", NoriColorsTengoku[1]);
} else {
mat.SetColor("_ColorAlpha", NoriColorsTengoku[2]);
}
}
else
@ -281,12 +273,10 @@ namespace HeavenStudio.Games.Scripts_KarateMan
flashPeriod = Mathf.Sin(cond.songPositionInBeats * Mathf.PI);
if (KarateMan.instance.NoriPerformance < 0.6)
c = NoriColorsMania[0];
else
{
if (i < MaxNori - 2)
c = NoriColorsMania[1];
else
c = NoriColorsMania[2];
else if (i < MaxNori - 2) {
c = NoriColorsMania[1];
} else {
c = NoriColorsMania[2];
}
c *= (flashPeriod * 0.5f) + 1f;
}
@ -300,15 +290,51 @@ namespace HeavenStudio.Games.Scripts_KarateMan
{
Transform target = GameCamera.instance.transform;
Vector3 displacement = target.forward * CameraOffset;
Vector3 displacement = target.forward * CameraOffset;
transform.position = target.position + displacement;
transform.rotation = target.rotation;
UpdateHeartColours();
float inkRot = (Conductor.instance.songPositionInBeats/ 8f) % 1f;
float inkRot = (Conductor.instance.songPositionInBeats / 8f) % 1f;
NoriManiaInk00.transform.localRotation = Quaternion.Euler(0, 0, inkRot * 360);
NoriManiaInk01.transform.localRotation = Quaternion.Euler(0, 0, inkRot * 360);
}
public int CountHitsToEnd(double fromBeat)
{
List<RiqEntity> allHits = EventCaller.GetAllInGameManagerList("karateman", new string[] { "hit", "bulb", "kick", "combo" });
List<RiqEntity> allEnds = EventCaller.GetAllInGameManagerList("gameManager", new string[] { "switchGame", "end" });
allHits.Sort((x, y) => x.beat.CompareTo(y.beat));
allEnds.Sort((x, y) => x.beat.CompareTo(y.beat));
double endBeat = double.MaxValue;
//get the beat of the closest end event
foreach (var end in allEnds) {
if (end.beat > fromBeat) {
endBeat = end.beat;
break;
}
}
//count each hit event beginning from our current beat to the beat of the closest game switch or end
int count = 0;
string type;
for (int i = 0; i < allHits.Count; i++)
{
RiqEntity h = allHits[i];
if (h.beat >= fromBeat)
{
if (h.beat < endBeat) {
//kicks and combos count for 2 hits
type = h.datamodel.Split('/')[1];
count += (type is "kick" or "combo") ? 2 : 1;
} else {
break;
}
}
}
return count;
}
}
}