mirror of
https://github.com/RHeavenStudioPlus/HeavenStudioPlus.git
synced 2024-11-27 03:53:01 +00:00
Merge pull request #149 from ThatZeoMan/screen-shake
Screen shake event (VFX)
This commit is contained in:
commit
4522557bba
2 changed files with 43 additions and 1 deletions
|
@ -15,6 +15,7 @@ namespace HeavenStudio
|
||||||
private List<Beatmap.Entity> positionEvents = new List<Beatmap.Entity>();
|
private List<Beatmap.Entity> positionEvents = new List<Beatmap.Entity>();
|
||||||
private List<Beatmap.Entity> rotationEvents = new List<Beatmap.Entity>();
|
private List<Beatmap.Entity> rotationEvents = new List<Beatmap.Entity>();
|
||||||
private List<Beatmap.Entity> scaleEvents = new List<Beatmap.Entity>();
|
private List<Beatmap.Entity> scaleEvents = new List<Beatmap.Entity>();
|
||||||
|
private List<Beatmap.Entity> shakeEvents = new List<Beatmap.Entity>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
default cam position, for quick-resetting
|
default cam position, for quick-resetting
|
||||||
|
@ -22,6 +23,7 @@ namespace HeavenStudio
|
||||||
public static Vector3 defaultPosition = new Vector3(0, 0, -10);
|
public static Vector3 defaultPosition = new Vector3(0, 0, -10);
|
||||||
public static Vector3 defaultRotEluer = new Vector3(0, 0, 0);
|
public static Vector3 defaultRotEluer = new Vector3(0, 0, 0);
|
||||||
public static Vector3 defaultScale = new Vector3(16, 9, 1);
|
public static Vector3 defaultScale = new Vector3(16, 9, 1);
|
||||||
|
public static Vector3 defaultShake = new Vector3(0, 0, 0);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
camera's current transformation
|
camera's current transformation
|
||||||
|
@ -30,6 +32,7 @@ namespace HeavenStudio
|
||||||
private static Vector3 position;
|
private static Vector3 position;
|
||||||
private static Vector3 rotEluer;
|
private static Vector3 rotEluer;
|
||||||
private static Vector3 scale;
|
private static Vector3 scale;
|
||||||
|
private static Vector3 shakeResult;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
camera's last transformation
|
camera's last transformation
|
||||||
|
@ -38,6 +41,7 @@ namespace HeavenStudio
|
||||||
private static Vector3 positionLast;
|
private static Vector3 positionLast;
|
||||||
private static Vector3 rotEluerLast;
|
private static Vector3 rotEluerLast;
|
||||||
private static Vector3 scaleLast;
|
private static Vector3 scaleLast;
|
||||||
|
private static Vector3 shakeLast;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
transformations to apply *after* the global transform,
|
transformations to apply *after* the global transform,
|
||||||
|
@ -89,20 +93,27 @@ namespace HeavenStudio
|
||||||
rotationEvents = EventCaller.GetAllInGameManagerList("vfx", new string[] { "rotate camera" });
|
rotationEvents = EventCaller.GetAllInGameManagerList("vfx", new string[] { "rotate camera" });
|
||||||
positionEvents.AddRange(EventCaller.GetAllInGameManagerList("gameManager", new string[] { "rotate camera" }));
|
positionEvents.AddRange(EventCaller.GetAllInGameManagerList("gameManager", new string[] { "rotate camera" }));
|
||||||
|
|
||||||
|
//screen shake time baybee
|
||||||
|
|
||||||
|
shakeEvents = EventCaller.GetAllInGameManagerList("vfx", new string[] { "screen shake" });
|
||||||
|
|
||||||
|
|
||||||
//scale (TODO)
|
//scale (TODO)
|
||||||
// scaleEvents = EventCaller.GetAllInGameManagerList("vfx", new string[] { "scale camera" });
|
// scaleEvents = EventCaller.GetAllInGameManagerList("vfx", new string[] { "scale camera" });
|
||||||
|
|
||||||
UpdateCameraTranslate();
|
UpdateCameraTranslate();
|
||||||
UpdateCameraRotate();
|
UpdateCameraRotate();
|
||||||
|
SetShakeIntensity();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Update()
|
private void Update()
|
||||||
{
|
{
|
||||||
UpdateCameraTranslate();
|
UpdateCameraTranslate();
|
||||||
UpdateCameraRotate();
|
UpdateCameraRotate();
|
||||||
|
SetShakeIntensity();
|
||||||
|
|
||||||
Camera cam = GetCamera();
|
Camera cam = GetCamera();
|
||||||
cam.transform.localPosition = position + additionalPosition;
|
cam.transform.localPosition = position + additionalPosition + shakeResult;
|
||||||
cam.transform.eulerAngles = rotEluer + additionalRotEluer;
|
cam.transform.eulerAngles = rotEluer + additionalRotEluer;
|
||||||
cam.transform.localScale = Vector3.Scale(scale, additionalScale);
|
cam.transform.localScale = Vector3.Scale(scale, additionalScale);
|
||||||
}
|
}
|
||||||
|
@ -139,6 +150,7 @@ namespace HeavenStudio
|
||||||
float dy = func(rotEluerLast.y, e.valB, Mathf.Min(prog, 1f));
|
float dy = func(rotEluerLast.y, e.valB, Mathf.Min(prog, 1f));
|
||||||
float dz = func(rotEluerLast.z, e.valC, Mathf.Min(prog, 1f));
|
float dz = func(rotEluerLast.z, e.valC, Mathf.Min(prog, 1f));
|
||||||
rotEluer = new Vector3(dx, dy, dz);
|
rotEluer = new Vector3(dx, dy, dz);
|
||||||
|
|
||||||
}
|
}
|
||||||
if (prog > 1f)
|
if (prog > 1f)
|
||||||
{
|
{
|
||||||
|
@ -147,11 +159,33 @@ namespace HeavenStudio
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//scren shake spaghetti
|
||||||
|
private void SetShakeIntensity()
|
||||||
|
{
|
||||||
|
foreach (var e in shakeEvents)
|
||||||
|
{
|
||||||
|
float prog = Conductor.instance.GetPositionFromBeat(e.beat, e.length);
|
||||||
|
if (prog >= 0f)
|
||||||
|
{
|
||||||
|
EasingFunction.Function func = EasingFunction.GetEasingFunction(e.ease);
|
||||||
|
float dx = func(positionLast.x, e.valA, Mathf.Min(prog, 1f));
|
||||||
|
float dy = func(positionLast.y, e.valA, Mathf.Min(prog, 1f));
|
||||||
|
shakeResult = new Vector3(Mathf.Cos(dx * e.length * 20f) * (e.valA / 2), Mathf.Cos(dy * e.length * 30f) * (e.valA / 2));
|
||||||
|
|
||||||
|
}
|
||||||
|
if (prog > 1f)
|
||||||
|
{
|
||||||
|
shakeResult = new Vector3(0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void ResetTransforms()
|
public static void ResetTransforms()
|
||||||
{
|
{
|
||||||
position = defaultPosition;
|
position = defaultPosition;
|
||||||
rotEluer = defaultRotEluer;
|
rotEluer = defaultRotEluer;
|
||||||
scale = defaultScale;
|
scale = defaultScale;
|
||||||
|
shakeResult = defaultShake;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void ResetAdditionalTransforms()
|
public static void ResetAdditionalTransforms()
|
||||||
|
|
|
@ -332,6 +332,14 @@ namespace HeavenStudio
|
||||||
new Param("ease", EasingFunction.Ease.Linear, "Ease")
|
new Param("ease", EasingFunction.Ease.Linear, "Ease")
|
||||||
}, hidden: false ),
|
}, hidden: false ),
|
||||||
|
|
||||||
|
new GameAction("screen shake", delegate
|
||||||
|
{
|
||||||
|
//TODO: move cam
|
||||||
|
}, 1f, true, new List<Param>()
|
||||||
|
{
|
||||||
|
new Param("valA", new EntityTypes.Float(0, 10, 2), "Intensity")
|
||||||
|
} ),
|
||||||
|
|
||||||
new GameAction("move camera", delegate
|
new GameAction("move camera", delegate
|
||||||
{
|
{
|
||||||
//TODO: move cam
|
//TODO: move cam
|
||||||
|
|
Loading…
Reference in a new issue