protected override void Draw(DrawingHandleBase handle, OverlaySpace currentSpace) { var map = _owner.eyeManager.CurrentMap; var worldHandle = (DrawingHandleWorld)handle; ShaderInstance?currentShader = null; var player = _playerManager.LocalPlayer?.ControlledEntity; foreach (var effect in _owner._Effects) { if (effect.AttachedEntity?.Transform.MapID != player?.Transform.MapID && _mapManager.GetGrid(effect.Coordinates.GetGridId(_entityManager)).ParentMapId != map) { continue; } var newShader = effect.Shaded ? null : _unshadedShader; if (newShader != currentShader) { worldHandle.UseShader(newShader); currentShader = newShader; } var effectSprite = effect.EffectSprite; var effectOrigin = effect.AttachedEntity?.Transform.MapPosition.Position + effect.AttachedOffset ?? effect.Coordinates.ToMapPos(_entityManager); var effectArea = Box2.CenteredAround(effectOrigin, effect.Size); var rotatedBox = new Box2Rotated(effectArea, effect.Rotation, effectOrigin); worldHandle.DrawTextureRect(effectSprite, rotatedBox, ToColor(effect.Color)); } }
protected override void Draw(DrawingHandleBase handle, OverlaySpace currentSpace) { var map = _owner.eyeManager.CurrentMap; var worldHandle = (DrawingHandleWorld)handle; ShaderInstance?currentShader = null; foreach (var effect in _owner._Effects) { if (_mapManager.GetGrid(effect.Coordinates.GridID).ParentMapId != map) { continue; } var newShader = effect.Shaded ? null : _unshadedShader; if (newShader != currentShader) { worldHandle.UseShader(newShader); currentShader = newShader; } var effectSprite = effect.EffectSprite; var effectOrigin = effect.Coordinates.ToMapPos(_mapManager); var effectArea = Box2.CenteredAround(effectOrigin, effect.Size); var rotatedBox = new Box2Rotated(effectArea, effect.Rotation, effectOrigin); worldHandle.DrawTextureRect(effectSprite, rotatedBox, ToColor(effect.Color)); } }
protected override void Draw(DrawingHandleBase handle) { if (Modes == 0) { return; } var screenHandle = (DrawingHandleScreen)handle; if ((Modes & PathfindingDebugMode.Route) != 0) { DrawAStarRoutes(screenHandle); DrawJpsRoutes(screenHandle); } if ((Modes & PathfindingDebugMode.Nodes) != 0) { DrawAStarNodes(screenHandle); DrawJpsNodes(screenHandle); } if ((Modes & PathfindingDebugMode.Graph) != 0) { DrawGraph(screenHandle); } }
protected override void Draw(DrawingHandleBase handle, OverlaySpace currentSpace) { if (_parallaxTexture == null) { return; } handle.UseShader(_shader); var screenHandle = (DrawingHandleScreen)handle; var(sizeX, sizeY) = _parallaxTexture.Size; var(posX, posY) = _eyeManager.ScreenToMap(Vector2.Zero).Position; var(ox, oy) = (Vector2i) new Vector2(-posX / Slowness, posY / Slowness); ox = MathHelper.Mod(ox, sizeX); oy = MathHelper.Mod(oy, sizeY); var(screenSizeX, screenSizeY) = _displayManager.ScreenSize; for (var x = -sizeX; x < screenSizeX; x += sizeX) { for (var y = -sizeY; y < screenSizeY; y += sizeY) { screenHandle.DrawTexture(_parallaxTexture, new Vector2(ox + x, oy + y)); } } }
protected override void Draw(DrawingHandleBase handle) { var map = _owner.eyeManager.CurrentMap; var worldHandle = (DrawingHandleWorld)handle; ShaderInstance currentShader = null; foreach (var effect in _owner._Effects) { if (_mapManager.GetGrid(effect.Coordinates.GridID).ParentMapId != map) { continue; } var newShader = effect.Shaded ? null : _unshadedShader; if (newShader != currentShader) { worldHandle.UseShader(newShader); currentShader = newShader; } worldHandle.SetTransform( effect.Coordinates.ToWorld(_mapManager).Position, new Angle(-effect.Rotation), effect.Size); var effectSprite = effect.EffectSprite; worldHandle.DrawTexture(effectSprite, -((Vector2)effectSprite.Size / EyeManager.PIXELSPERMETER) / 2, ToColor(effect.Color)); } }
protected override void Draw(DrawingHandleBase handle, OverlaySpace overlay) { var drawHandle = (DrawingHandleWorld)handle; var mapId = _eyeManager.CurrentMap; var eye = _eyeManager.CurrentEye; var worldBounds = Box2.CenteredAround(eye.Position.Position, _clyde.ScreenSize / (float)EyeManager.PixelsPerMeter * eye.Zoom); foreach (var mapGrid in _mapManager.FindGridsIntersecting(mapId, worldBounds)) { if (!_gasTileOverlaySystem.HasData(mapGrid.Index)) { continue; } var gridBounds = new Box2(mapGrid.WorldToLocal(worldBounds.BottomLeft), mapGrid.WorldToLocal(worldBounds.TopRight)); foreach (var tile in mapGrid.GetTilesIntersecting(gridBounds)) { foreach (var(texture, color) in _gasTileOverlaySystem.GetOverlays(mapGrid.Index, tile.GridIndices)) { drawHandle.DrawTexture(texture, mapGrid.LocalToWorld(new Vector2(tile.X, tile.Y)), color); } } } }
protected override void Draw(DrawingHandleBase handle) { var worldHandle = (DrawingHandleWorld)handle; var viewport = _eyeManager.GetWorldViewport(); worldHandle.DrawRect(viewport, Color.White); }
protected override void Draw(DrawingHandleBase handle, OverlaySpace currentSpace) { handle.UseShader(_shader); var worldHandle = (DrawingHandleWorld)handle; var viewport = _eyeManager.GetWorldViewport(); worldHandle.DrawRect(viewport, Color.White); }
protected override void Draw(DrawingHandleBase handle, OverlaySpace currentSpace) { switch (currentSpace) { case OverlaySpace.ScreenSpace: DrawScreen((DrawingHandleScreen)handle); break; } }
protected override void Draw(DrawingHandleBase handle, OverlaySpace currentSpace) { foreach (var ray in _owner.raysWithLifeTime) { handle.DrawLine( ray.RayOrigin, ray.RayHit, ray.DidActuallyHit ? Color.Yellow : Color.Magenta); } }
protected override void Draw(DrawingHandleBase handle, OverlaySpace currentSpace) { if (!CritOverlay.LocalPlayerHasState(_playerManager, false, true)) { return; } handle.UseShader(_shader); var worldHandle = (DrawingHandleWorld)handle; var viewport = _eyeManager.GetWorldViewport(); worldHandle.DrawRect(viewport, Color.White); }
protected override void Draw(DrawingHandleBase handle) { var screenHandle = (DrawingHandleScreen)handle; var mousePos = IoCManager.Resolve <IInputManager>().MouseScreenPosition; if (_system.UseOrAttackIsDown && _system._timeHeld > AttackTimeThreshold) { var tex = ResC.GetTexture($"/Textures/Objects/Tools/toolbox_r.png"); screenHandle.DrawTextureRect(tex, UIBox2.FromDimensions(mousePos, tex.Size * 2)); } }
protected override void Draw(DrawingHandleBase handle) { var percentComplete = (float)((_gameTiming.CurTime.TotalMilliseconds - _startTime) / lastsFor); Shader?.SetParameter("percentComplete", percentComplete); var screenSpaceHandle = handle as DrawingHandleScreen; var screenSize = UIBox2.FromDimensions((0, 0), _displayManager.ScreenSize); if (_screenshotTexture != null) { screenSpaceHandle?.DrawTextureRect(_screenshotTexture, screenSize); } }
protected override void Draw(DrawingHandleBase handle) { var elapsedTime = (_timer.CurTime - StartTime).TotalSeconds; if (elapsedTime > Duration) { return; } var screenHandle = (DrawingHandleScreen)handle; screenHandle.DrawRect( new UIBox2(0.0f, 0.0f, _displayManager.ScreenSize.X, _displayManager.ScreenSize.Y), Color.White.WithAlpha(GetAlpha(elapsedTime / Duration)) ); }
protected override void Draw(DrawingHandleBase handle, OverlaySpace currentSpace) { var percentComplete = (float)((_gameTiming.CurTime.TotalSeconds - _startTime) / _lastsFor); if (percentComplete >= 1.0f) { return; } handle.UseShader(_shader); _shader?.SetParameter("percentComplete", percentComplete); var screenSpaceHandle = handle as DrawingHandleScreen; var screenSize = UIBox2.FromDimensions((0, 0), _displayManager.ScreenSize); if (_screenshotTexture != null) { screenSpaceHandle?.DrawTextureRect(_screenshotTexture, screenSize); } }
protected override void Draw(DrawingHandleBase handle, OverlaySpace currentSpace) { handle.UseShader(_shader); var worldHandle = (DrawingHandleWorld)handle; var viewport = _eyeManager.GetWorldViewport(); foreach (var boundingBox in _componentManager.EntityQuery <IPhysicsComponent>(true)) { // all entities have a TransformComponent var transform = ((IComponent)boundingBox).Owner.Transform; // if not on the same map, continue if (transform.MapID != _eyeManager.CurrentMap || !transform.IsMapTransform) { continue; } // This entity isn't lerping, no need to draw debug info for it if (transform.LerpDestination == null) { continue; } var aabb = ((IPhysBody)boundingBox).AABB; // if not on screen, or too small, continue if (!aabb.Translated(transform.WorldPosition).Intersects(viewport) || aabb.IsEmpty()) { continue; } var timing = IoCManager.Resolve <IGameTiming>(); timing.InSimulation = true; var boxOffset = transform.LerpDestination.Value - transform.LocalPosition; var boxPosWorld = transform.WorldPosition + boxOffset; timing.InSimulation = false; worldHandle.DrawLine(transform.WorldPosition, boxPosWorld, Color.Yellow); worldHandle.DrawRect(aabb.Translated(boxPosWorld), Color.Yellow.WithAlpha(0.5f), false); } }
protected override void Draw(DrawingHandleBase handle) { if (_parallaxTexture == null) { return; } var screenHandle = (DrawingHandleScreen)handle; var(sizeX, sizeY) = _parallaxTexture.Size; var(posX, posY) = _eyeManager.ScreenToWorld(Vector2.Zero).ToWorld(_mapManager).Position; var(ox, oy) = (Vector2i) new Vector2(-posX / Slowness, posY / Slowness); ox = MathHelper.Mod(ox, sizeX); oy = MathHelper.Mod(oy, sizeY); screenHandle.DrawTexture(_parallaxTexture, new Vector2(ox, oy)); screenHandle.DrawTexture(_parallaxTexture, new Vector2(ox - sizeX, oy)); screenHandle.DrawTexture(_parallaxTexture, new Vector2(ox, oy - sizeY)); screenHandle.DrawTexture(_parallaxTexture, new Vector2(ox - sizeX, oy - sizeY)); }
protected override void Draw(DrawingHandleBase handle, OverlaySpace currentSpace) { SingularityQuery(); foreach (SingularityShaderInstance instance in _singularities.Values) { var tempCoords = _eyeManager.WorldToScreen(instance.CurrentMapCoords); tempCoords.Y = _displayManager.ScreenSize.Y - tempCoords.Y; _shader?.SetParameter("positionInput", tempCoords); if (ScreenTexture != null) { _shader?.SetParameter("SCREEN_TEXTURE", ScreenTexture); } _shader?.SetParameter("intensity", LevelToIntensity(instance.Level)); _shader?.SetParameter("falloff", LevelToFalloff(instance.Level)); handle.UseShader(_shader); var worldHandle = (DrawingHandleWorld)handle; var viewport = _eyeManager.GetWorldViewport(); worldHandle.DrawRect(viewport, Color.White); } }
protected override void Draw(DrawingHandleBase handle, OverlaySpace currentSpace) { if (Modes == 0) { return; } handle.UseShader(_shader); var screenHandle = (DrawingHandleScreen)handle; var viewport = _eyeManager.GetWorldViewport(); if ((Modes & PathfindingDebugMode.Route) != 0) { DrawAStarRoutes(screenHandle, viewport); DrawJpsRoutes(screenHandle, viewport); } if ((Modes & PathfindingDebugMode.Nodes) != 0) { DrawAStarNodes(screenHandle, viewport); DrawJpsNodes(screenHandle, viewport); } if ((Modes & PathfindingDebugMode.Graph) != 0) { DrawGraph(screenHandle, viewport); } if ((Modes & PathfindingDebugMode.CachedRegions) != 0) { DrawCachedRegions(screenHandle, viewport); } if ((Modes & PathfindingDebugMode.Regions) != 0) { DrawRegions(screenHandle, viewport); } }
protected override void Draw(DrawingHandleBase handle, OverlaySpace overlay) { var drawHandle = (DrawingHandleWorld)handle; var mapId = _eyeManager.CurrentMap; var eye = _eyeManager.CurrentEye; var worldBounds = Box2.CenteredAround(eye.Position.Position, _clyde.ScreenSize / (float)EyeManager.PixelsPerMeter * eye.Zoom); // IF YOU ARE ABOUT TO INTRODUCE CHUNKING OR SOME OTHER OPTIMIZATION INTO THIS CODE: // -- THINK! -- // 1. "Is this going to make a critical atmos debugging tool harder to debug itself?" // 2. "Is this going to do anything that could cause the atmos debugging tool to use resources, server-side or client-side, when nobody's using it?" // 3. "Is this going to make it harder for atmos programmers to add data that may not be chunk-friendly into the atmos debugger?" // Nanotrasen needs YOU! to avoid premature optimization in critical debugging tools - 20kdc foreach (var mapGrid in _mapManager.FindGridsIntersecting(mapId, worldBounds)) { if (!_atmosDebugOverlaySystem.HasData(mapGrid.Index)) { continue; } var gridBounds = new Box2(mapGrid.WorldToLocal(worldBounds.BottomLeft), mapGrid.WorldToLocal(worldBounds.TopRight)); for (var pass = 0; pass < 3; pass++) { foreach (var tile in mapGrid.GetTilesIntersecting(gridBounds)) { var dataMaybeNull = _atmosDebugOverlaySystem.GetData(mapGrid.Index, tile.GridIndices); if (dataMaybeNull != null) { var data = (SharedAtmosDebugOverlaySystem.AtmosDebugOverlayData)dataMaybeNull !; if (pass == 0) { float total = 0; foreach (float f in data.Moles) { total += f; } var interp = total / (Atmospherics.MolesCellStandard * 2); var res = Color.InterpolateBetween(Color.Red, Color.Green, interp).WithAlpha(0.75f); drawHandle.DrawRect(Box2.FromDimensions(mapGrid.LocalToWorld(new Vector2(tile.X, tile.Y)), new Vector2(1, 1)), res); } else if (pass == 1) { if (data.PressureDirection != AtmosDirection.Invalid) { var atmosAngle = data.PressureDirection.ToAngle(); var atmosAngleOfs = atmosAngle.ToVec() * 0.4f; var tileCentre = new Vector2(tile.X + 0.5f, tile.Y + 0.5f); var basisA = mapGrid.LocalToWorld(tileCentre); var basisB = mapGrid.LocalToWorld(tileCentre + atmosAngleOfs); drawHandle.DrawLine(basisA, basisB, Color.Blue); } } else if (pass == 2) { if (data.InExcitedGroup) { var tilePos = new Vector2(tile.X, tile.Y); var basisA = mapGrid.LocalToWorld(tilePos); var basisB = mapGrid.LocalToWorld(tilePos + new Vector2(1.0f, 1.0f)); var basisC = mapGrid.LocalToWorld(tilePos + new Vector2(0.0f, 1.0f)); var basisD = mapGrid.LocalToWorld(tilePos + new Vector2(1.0f, 0.0f)); drawHandle.DrawLine(basisA, basisB, Color.Cyan); drawHandle.DrawLine(basisC, basisD, Color.Cyan); } } } } } } }
protected override void Draw(DrawingHandleBase handle, OverlaySpace overlay) { var drawHandle = (DrawingHandleWorld)handle; var mapId = _eyeManager.CurrentMap; var eye = _eyeManager.CurrentEye; var worldBounds = Box2.CenteredAround(eye.Position.Position, _clyde.ScreenSize / (float)EyeManager.PixelsPerMeter * eye.Zoom); // IF YOU ARE ABOUT TO INTRODUCE CHUNKING OR SOME OTHER OPTIMIZATION INTO THIS CODE: // -- THINK! -- // 1. "Is this going to make a critical atmos debugging tool harder to debug itself?" // 2. "Is this going to do anything that could cause the atmos debugging tool to use resources, server-side or client-side, when nobody's using it?" // 3. "Is this going to make it harder for atmos programmers to add data that may not be chunk-friendly into the atmos debugger?" // Nanotrasen needs YOU! to avoid premature optimization in critical debugging tools - 20kdc foreach (var mapGrid in _mapManager.FindGridsIntersecting(mapId, worldBounds)) { if (!_atmosDebugOverlaySystem.HasData(mapGrid.Index)) { continue; } var gridBounds = new Box2(mapGrid.WorldToLocal(worldBounds.BottomLeft), mapGrid.WorldToLocal(worldBounds.TopRight)); for (var pass = 0; pass < 2; pass++) { foreach (var tile in mapGrid.GetTilesIntersecting(gridBounds)) { var dataMaybeNull = _atmosDebugOverlaySystem.GetData(mapGrid.Index, tile.GridIndices); if (dataMaybeNull != null) { var data = (SharedAtmosDebugOverlaySystem.AtmosDebugOverlayData)dataMaybeNull !; if (pass == 0) { // -- Mole Count -- float total = 0; switch (_atmosDebugOverlaySystem.CfgMode) { case AtmosDebugOverlayMode.TotalMoles: foreach (float f in data.Moles) { total += f; } break; case AtmosDebugOverlayMode.GasMoles: total = data.Moles[_atmosDebugOverlaySystem.CfgSpecificGas]; break; case AtmosDebugOverlayMode.Temperature: total = data.Temperature; break; } var interp = ((total - _atmosDebugOverlaySystem.CfgBase) / _atmosDebugOverlaySystem.CfgScale); Color res; if (_atmosDebugOverlaySystem.CfgCBM) { // Greyscale interpolation res = Color.InterpolateBetween(Color.Black, Color.White, interp); } else { // Red-Green-Blue interpolation if (interp < 0.5f) { res = Color.InterpolateBetween(Color.Red, Color.Green, interp * 2); } else { res = Color.InterpolateBetween(Color.Green, Color.Blue, (interp - 0.5f) * 2); } } res = res.WithAlpha(0.75f); drawHandle.DrawRect(Box2.FromDimensions(mapGrid.LocalToWorld(new Vector2(tile.X, tile.Y)), new Vector2(1, 1)), res); } else if (pass == 1) { // -- Blocked Directions -- void CheckAndShowBlockDir(AtmosDirection dir) { if (data.BlockDirection.HasFlag(dir)) { // Account for South being 0. var atmosAngle = dir.ToAngle() - Angle.FromDegrees(90); var atmosAngleOfs = atmosAngle.ToVec() * 0.45f; var atmosAngleOfsR90 = new Vector2(atmosAngleOfs.Y, -atmosAngleOfs.X); var tileCentre = new Vector2(tile.X + 0.5f, tile.Y + 0.5f); var basisA = mapGrid.LocalToWorld(tileCentre + atmosAngleOfs - atmosAngleOfsR90); var basisB = mapGrid.LocalToWorld(tileCentre + atmosAngleOfs + atmosAngleOfsR90); drawHandle.DrawLine(basisA, basisB, Color.Azure); } } CheckAndShowBlockDir(AtmosDirection.North); CheckAndShowBlockDir(AtmosDirection.South); CheckAndShowBlockDir(AtmosDirection.East); CheckAndShowBlockDir(AtmosDirection.West); // -- Pressure Direction -- if (data.PressureDirection != AtmosDirection.Invalid) { // Account for South being 0. var atmosAngle = data.PressureDirection.ToAngle() - Angle.FromDegrees(90); var atmosAngleOfs = atmosAngle.ToVec() * 0.4f; var tileCentre = new Vector2(tile.X + 0.5f, tile.Y + 0.5f); var basisA = mapGrid.LocalToWorld(tileCentre); var basisB = mapGrid.LocalToWorld(tileCentre + atmosAngleOfs); drawHandle.DrawLine(basisA, basisB, Color.Blue); } // -- Excited Groups -- if (data.InExcitedGroup) { var tilePos = new Vector2(tile.X, tile.Y); var basisA = mapGrid.LocalToWorld(tilePos); var basisB = mapGrid.LocalToWorld(tilePos + new Vector2(1.0f, 1.0f)); var basisC = mapGrid.LocalToWorld(tilePos + new Vector2(0.0f, 1.0f)); var basisD = mapGrid.LocalToWorld(tilePos + new Vector2(1.0f, 0.0f)); drawHandle.DrawLine(basisA, basisB, Color.Cyan); drawHandle.DrawLine(basisC, basisD, Color.Cyan); } } } } } } }
protected abstract void Draw(DrawingHandleBase handle);
/// <summary> /// Draws this overlay to the current space. /// </summary> /// <param name="handle">Current drawing handle that the overlay should be drawing with. Do not hold a reference to this in the overlay.</param> /// <param name="currentSpace">Current space that is being drawn. This function is called for every space that was set up in initialization.</param> protected abstract void Draw(DrawingHandleBase handle, OverlaySpace currentSpace);
protected override void Draw(DrawingHandleBase handle, OverlaySpace currentSpace) { _manager.Render((DrawingHandleWorld)handle); }
protected override void Draw(DrawingHandleBase handle) { _manager.Render((DrawingHandleWorld)handle); }