Moony z level hack (#15031)

* save work

* Adds Z levels

* a

* ladders + parallax scroll

* zoom out not in

* oops, sandbox

* oops i broke the law

* run ci

* fuck

---------

Co-authored-by: moonheart08 <moonheart08@users.noreply.github.com>
This commit is contained in:
Moony
2023-03-31 21:49:10 -05:00
committed by GitHub
parent 56b1628e58
commit 1f6663912b
17 changed files with 665 additions and 2 deletions

View File

@@ -1,4 +1,5 @@
using Content.Client.Parallax.Managers;
using Content.Shared._Afterlight.ThirdDimension;
using Content.Shared.CCVar;
using Content.Shared.Parallax.Biomes;
using Robust.Client.Graphics;
@@ -19,6 +20,7 @@ public sealed class ParallaxOverlay : Overlay
[Dependency] private readonly IMapManager _mapManager = default!;
[Dependency] private readonly IParallaxManager _manager = default!;
private readonly ParallaxSystem _parallax;
private readonly SharedZLevelSystem _zlevel = default!;
public override OverlaySpace Space => OverlaySpace.WorldSpaceBelowWorld;
@@ -27,11 +29,12 @@ public sealed class ParallaxOverlay : Overlay
ZIndex = ParallaxSystem.ParallaxZIndex;
IoCManager.InjectDependencies(this);
_parallax = _entManager.System<ParallaxSystem>();
_zlevel = _entManager.System<SharedZLevelSystem>();
}
protected override bool BeforeDraw(in OverlayDrawArgs args)
{
if (args.MapId == MapId.Nullspace || _entManager.HasComponent<BiomeComponent>(_mapManager.GetMapEntityId(args.MapId)))
if (args.MapId == MapId.Nullspace || _entManager.HasComponent<BiomeComponent>(_mapManager.GetMapEntityId(args.MapId)) || _zlevel.MapBelow[(int)args.MapId] != null)
return false;
return true;

View File

@@ -1,5 +1,7 @@
using System.Linq;
using Content.Client.UserInterface.Controls;
using Content.Client.UserInterface.Systems.Gameplay;
using Content.Shared._Afterlight.ThirdDimension;
using Content.Shared.CCVar;
using Robust.Client.GameObjects;
using Robust.Client.Graphics;
@@ -77,16 +79,28 @@ public sealed class ViewportUIController : UIController
base.FrameUpdate(e);
Viewport.Viewport.Eye = _eyeManager.CurrentEye;
// verify that the current eye is not "null". Fuck IEyeManager.
var ent = _playerMan.LocalPlayer?.ControlledEntity;
if (_entMan.TryGetComponent(ent, out ZViewComponent? view))
{
Viewport.Viewport.LowerEyes = view.DownViewEnts.Select(x =>
{
var eye = _entMan.GetComponent<EyeComponent>(x);
eye.Rotation = _eyeManager.CurrentEye.Rotation;
eye.DrawFov = false; // We're z leveling, no FoV.
return eye.Eye!;
}).ToArray();
}
if (_eyeManager.CurrentEye.Position != default || ent == null)
return;
_entMan.TryGetComponent(ent, out EyeComponent? eye);
if (eye?.Eye == _eyeManager.CurrentEye
&& _entMan.GetComponent<TransformComponent>(ent.Value).WorldPosition == default)
return; // nothing to worry about, the player is just in null space... actually that is probably a problem?

View File

@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Robust.Client.Graphics;
using Robust.Client.Input;
using Robust.Client.UserInterface;
@@ -24,7 +25,9 @@ namespace Content.Client.Viewport
// Internal viewport creation is deferred.
private IClydeViewport? _viewport;
private List<IClydeViewport> _lowerPorts = new();
private IEye? _eye;
private IEye[] _lowerEyes = new IEye[] {};
private Vector2i _viewportSize;
private int _curRenderScale;
private ScalingViewportStretchMode _stretchMode = ScalingViewportStretchMode.Bilinear;
@@ -50,6 +53,27 @@ namespace Content.Client.Viewport
}
}
public IEye[] LowerEyes
{
get => _lowerEyes;
set
{
var old = value;
_lowerEyes = value;
if (old.Length != value.Length)
{
InvalidateViewport();
Logger.Debug("Eyes updated..");
}
foreach (var (eye, port) in _lowerEyes.Zip(_lowerPorts))
{
port.Eye = eye;
}
}
}
/// <summary>
/// The size, in unscaled pixels, of the internal viewport.
/// </summary>
@@ -137,6 +161,11 @@ namespace Content.Client.Viewport
_viewport!.Render();
foreach (var viewport in _lowerPorts)
{
viewport.Render();
}
if (_queuedScreenshots.Count != 0)
{
var callbacks = _queuedScreenshots.ToArray();
@@ -155,6 +184,10 @@ namespace Content.Client.Viewport
var drawBox = GetDrawBox();
var drawBoxGlobal = drawBox.Translated(GlobalPixelPosition);
_viewport.RenderScreenOverlaysBelow(handle, this, drawBoxGlobal);
foreach (var viewport in _lowerPorts.AsEnumerable().Reverse())
{
handle.DrawTextureRect(viewport.RenderTarget.Texture, drawBox);
}
handle.DrawTextureRect(_viewport.RenderTarget.Texture, drawBox);
_viewport.RenderScreenOverlaysAbove(handle, this, drawBoxGlobal);
}
@@ -224,6 +257,23 @@ namespace Content.Client.Viewport
{
Filter = StretchMode == ScalingViewportStretchMode.Bilinear,
});
_viewport.ClearColor = Color.Blue.WithAlpha(0.02f);
_lowerPorts.Clear();
for (var i = 0; i < _lowerEyes.Length; i++)
{
_lowerPorts.Add(_clyde.CreateViewport(
ViewportSize * renderScale,
new TextureSampleParameters
{
Filter = StretchMode == ScalingViewportStretchMode.Bilinear,
}));
_lowerPorts[i].RenderScale = (renderScale, renderScale);
_lowerPorts[i].ClearColor = Color.Blue.WithAlpha(0.02f);
_lowerPorts[i].Eye = _lowerEyes[i];
_lowerPorts[i].Eye!.Zoom = _lowerPorts[i].Eye!.Zoom * (1.02f + i * 0.02f);
}
_viewport.RenderScale = (renderScale, renderScale);
@@ -241,6 +291,11 @@ namespace Content.Client.Viewport
{
_viewport?.Dispose();
_viewport = null;
foreach (var port in _lowerPorts)
{
port.Dispose();
}
_lowerPorts = new();
}
public MapCoordinates ScreenToMap(Vector2 coords)
@@ -291,7 +346,7 @@ namespace Content.Client.Viewport
private void EnsureViewportCreated()
{
if (_viewport == null)
if (_viewport == null || _lowerPorts.Count != _lowerEyes.Length)
{
RegenerateViewport();
}

View File

@@ -0,0 +1,17 @@
using Content.Shared._Afterlight.ThirdDimension;
using Robust.Shared.Map;
namespace Content.Client.zlevels;
public sealed class ZViewSystem : SharedZViewSystem
{
public override EntityUid SpawnViewEnt(EntityUid source, MapCoordinates loc)
{
throw new NotImplementedException();
}
public override bool CanSetup(EntityUid source)
{
return false;
}
}