split screen tiling into two different events

This commit is contained in:
Rapandrasmus 2023-11-24 20:15:47 +01:00
parent 7ca0117e0e
commit 247465681f
2 changed files with 62 additions and 13 deletions

View file

@ -1025,7 +1025,7 @@ namespace HeavenStudio
}), }),
} }
}, },
new GameAction("screenTiling", "Screen Tiling") new GameAction("screenTiling", "Tile Screen")
{ {
resizable = true, resizable = true,
parameters = new() parameters = new()
@ -1034,15 +1034,26 @@ namespace HeavenStudio
new("yStart", new EntityTypes.Float(1, 100, 1), "Start Vertical Tiles"), new("yStart", new EntityTypes.Float(1, 100, 1), "Start Vertical Tiles"),
new("xEnd", new EntityTypes.Float(1, 100, 1), "End Horizontal Tiles"), new("xEnd", new EntityTypes.Float(1, 100, 1), "End Horizontal Tiles"),
new("yEnd", new EntityTypes.Float(1, 100, 1), "End Vertical Tiles"), new("yEnd", new EntityTypes.Float(1, 100, 1), "End Vertical Tiles"),
new Param("axis", StaticCamera.ViewAxis.All, "Axis"),
new("ease", Util.EasingFunction.Ease.Linear, "Ease", "", new()
{
new((x, y) => (Util.EasingFunction.Ease)x != Util.EasingFunction.Ease.Instant, new string[] { "xStart", "yStart" })
}),
}
},
new GameAction("scrollTiles", "Scroll Tiles")
{
resizable = true,
parameters = new()
{
new("xScrollStart", new EntityTypes.Float(-100, 100, 0), "Start Horizontal Scroll"), new("xScrollStart", new EntityTypes.Float(-100, 100, 0), "Start Horizontal Scroll"),
new("yScrollStart", new EntityTypes.Float(-100, 100, 0), "Start Vertical Scroll"), new("yScrollStart", new EntityTypes.Float(-100, 100, 0), "Start Vertical Scroll"),
new("xScrollEnd", new EntityTypes.Float(-100, 100, 0), "End Horizontal Scroll"), new("xScrollEnd", new EntityTypes.Float(-100, 100, 0), "End Horizontal Scroll"),
new("yScrollEnd", new EntityTypes.Float(-100, 100, 0), "End Vertical Scroll"), new("yScrollEnd", new EntityTypes.Float(-100, 100, 0), "End Vertical Scroll"),
new Param("axis", StaticCamera.ViewAxis.All, "Axis"),
new("ease", Util.EasingFunction.Ease.Linear, "Ease", "", new() new("ease", Util.EasingFunction.Ease.Linear, "Ease", "", new()
{ {
new((x, y) => (Util.EasingFunction.Ease)x != Util.EasingFunction.Ease.Instant, new string[] { "xStart", "yStart", "xScrollStart", "yScrollStart" }) new((x, y) => (Util.EasingFunction.Ease)x != Util.EasingFunction.Ease.Instant, new string[] { "xScrollStart", "yScrollStart" })
}), }),
} }
} }

View file

@ -10,7 +10,8 @@ namespace HeavenStudio
{ {
private RawImage _image; private RawImage _image;
private List<RiqEntity> _events = new(); private List<RiqEntity> _tileEvents = new();
private List<RiqEntity> _scrollEvents = new();
private void Awake() private void Awake()
{ {
@ -24,14 +25,19 @@ namespace HeavenStudio
public void OnBeatChanged(double beat) public void OnBeatChanged(double beat)
{ {
_events = EventCaller.GetAllInGameManagerList("vfx", new string[] { "screenTiling" }); _tileEvents = EventCaller.GetAllInGameManagerList("vfx", new string[] { "screenTiling" });
_scrollEvents = EventCaller.GetAllInGameManagerList("vfx", new string[] { "scrollTiles" });
ResetUVRect(); ResetUVRect();
Update(); Update();
} }
private void Update() private void Update()
{ {
foreach (var e in _events) float newXTiles = 1;
float newYTiles = 1;
float newXScroll = 0;
float newYScroll = 0;
foreach (var e in _tileEvents)
{ {
float normalized = Conductor.instance.GetPositionFromBeat(e.beat, e.length); float normalized = Conductor.instance.GetPositionFromBeat(e.beat, e.length);
if (normalized < 0) break; if (normalized < 0) break;
@ -40,13 +46,45 @@ namespace HeavenStudio
var func = Util.EasingFunction.GetEasingFunction((Util.EasingFunction.Ease)e["ease"]); var func = Util.EasingFunction.GetEasingFunction((Util.EasingFunction.Ease)e["ease"]);
float newXTiles = func(e["xStart"], e["xEnd"], clampNormal); switch ((StaticCamera.ViewAxis)e["axis"])
float newYTiles = func(e["yStart"], e["yEnd"], clampNormal); {
float newXScroll = func(e["xScrollStart"], e["xScrollEnd"], clampNormal); case StaticCamera.ViewAxis.All:
float newYScroll = func(e["yScrollStart"], e["yScrollEnd"], clampNormal); newXTiles = func(e["xStart"], e["xEnd"], clampNormal);
newYTiles = func(e["yStart"], e["yEnd"], clampNormal);
_image.uvRect = new Rect(newXScroll, newYScroll, newXTiles, newYTiles); break;
case StaticCamera.ViewAxis.X:
newXTiles = func(e["xStart"], e["xEnd"], clampNormal);
break;
case StaticCamera.ViewAxis.Y:
newYTiles = func(e["yStart"], e["yEnd"], clampNormal);
break;
}
} }
foreach (var e in _scrollEvents)
{
float normalized = Conductor.instance.GetPositionFromBeat(e.beat, e.length);
if (normalized < 0) break;
float clampNormal = Mathf.Clamp01(normalized);
var func = Util.EasingFunction.GetEasingFunction((Util.EasingFunction.Ease)e["ease"]);
switch ((StaticCamera.ViewAxis)e["axis"])
{
case StaticCamera.ViewAxis.All:
newXScroll = func(e["xScrollStart"], e["xScrollEnd"], clampNormal);
newYScroll = func(e["yScrollStart"], e["yScrollEnd"], clampNormal);
break;
case StaticCamera.ViewAxis.X:
newXScroll = func(e["xScrollStart"], e["xScrollEnd"], clampNormal);
break;
case StaticCamera.ViewAxis.Y:
newYScroll = func(e["yScrollStart"], e["yScrollEnd"], clampNormal);
break;
}
}
_image.uvRect = new Rect(newXScroll, newYScroll, newXTiles, newYTiles);
} }
public void ResetUVRect() public void ResetUVRect()