Gateway destinations (#21040)

* Gateway generation

* Gateway stuff

* gatewehs

* mercenaries

* play area

* Range fixes and tweaks

* weh

* Gateway UI polish

* Lots of fixes

* Knock some items off

* Fix dungeon spawning

Realistically we should probably be using a salvage job.

* wahwah

* wehvs

* expression

* weh

* eee

* a

* a

* WEH

* frfr

* Gatwey

* Fix gateway windows

* Fix gateway windows

* a

* a

* Better layer masking

* a

* a

* Noise fixes

* a

* Fix fractal calculations

* a

* More fixes

* Fixes

* Add layers back in

* Fixes

* namespaces and ftl

* Other TODO

* Fix distance

* Cleanup

* Fix test
This commit is contained in:
metalgearsloth
2023-11-15 13:23:40 +11:00
committed by GitHub
parent 67a3c3a6a3
commit 816ee2e1ab
51 changed files with 1562 additions and 959 deletions

View File

@@ -1,3 +1,4 @@
using System.Numerics;
using Content.Client.Parallax.Data;
using Content.Client.Parallax.Managers;
using Content.Shared.Parallax;
@@ -72,4 +73,56 @@ public sealed class ParallaxSystem : SharedParallaxSystem
{
return TryComp<ParallaxComponent>(mapUid, out var parallax) ? parallax.Parallax : Fallback;
}
/// <summary>
/// Draws a texture as parallax in the specified world handle.
/// </summary>
/// <param name="worldHandle"></param>
/// <param name="worldAABB">WorldAABB to use</param>
/// <param name="sprite">Sprite to draw</param>
/// <param name="curTime">Current time, unused if scrolling not set</param>
/// <param name="position">Current position of the parallax</param>
/// <param name="scrolling">How much to scroll the parallax texture per second</param>
/// <param name="scale">Scale of the texture</param>
/// <param name="slowness">How slow the parallax moves compared to position</param>
/// <param name="modulate">Color modulation applied to drawing the texture</param>
public void DrawParallax(
DrawingHandleWorld worldHandle,
Box2 worldAABB,
Texture sprite,
TimeSpan curTime,
Vector2 position,
Vector2 scrolling,
float scale = 1f,
float slowness = 0f,
Color? modulate = null)
{
// Size of the texture in world units.
var size = sprite.Size / (float) EyeManager.PixelsPerMeter * scale;
var scrolled = scrolling * (float) curTime.TotalSeconds;
// Origin - start with the parallax shift itself.
var originBL = position * slowness + scrolled;
// Centre the image.
originBL -= size / 2;
// Remove offset so we can floor.
var flooredBL = worldAABB.BottomLeft - originBL;
// Floor to background size.
flooredBL = (flooredBL / size).Floored() * size;
// Re-offset.
flooredBL += originBL;
for (var x = flooredBL.X; x < worldAABB.Right; x += size.X)
{
for (var y = flooredBL.Y; y < worldAABB.Top; y += size.Y)
{
var box = Box2.FromDimensions(new Vector2(x, y), size);
worldHandle.DrawTextureRect(sprite, box, modulate);
}
}
}
}