public void Examine(FormattedMessage message, bool inDetailsRange) { if (!inDetailsRange) { return; } var gam = EntitySystem.Get <AtmosphereSystem>().GetGridAtmosphere(Owner.Transform.GridID); var tile = gam?.GetTile(Owner.Transform.GridPosition).Air; if (tile == null) { return; } message.AddText($"Pressure: {tile.Pressure}\n"); message.AddText($"Temperature: {tile.Temperature}\n"); for (int i = 0; i < Atmospherics.TotalNumberOfGases; i++) { var gas = Atmospherics.GetGas(i); if (tile.Gases[i] <= Atmospherics.GasMinMoles) { continue; } message.AddText(gas.Name); message.AddText($"\n Moles: {tile.Gases[i]}\n"); } }
public override void Initialize() { base.Initialize(); SubscribeNetworkEvent <GasOverlayMessage>(HandleGasOverlayMessage); _mapManager.OnGridRemoved += OnGridRemoved; for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++) { var overlay = Atmospherics.GetOverlay(i); switch (overlay) { case SpriteSpecifier.Rsi animated: var rsi = _resourceCache.GetResource <RSIResource>(animated.RsiPath).RSI; var stateId = animated.RsiState; if (!rsi.TryGetState(stateId, out var state)) { continue; } _frames[i] = state.GetFrames(RSI.State.Direction.South); _frameDelays[i] = state.GetDelays(); _frameCounter[i] = 0; break; case SpriteSpecifier.Texture texture: _frames[i] = new[] { texture.Frame0() }; _frameDelays[i] = Array.Empty <float>(); break; case null: _frames[i] = Array.Empty <Texture>(); _frameDelays[i] = Array.Empty <float>(); break; } } var fire = _resourceCache.GetResource <RSIResource>(FireRsiPath).RSI; for (var i = 0; i < FireStates; i++) { if (!fire.TryGetState((i + 1).ToString(), out var state)) { throw new ArgumentOutOfRangeException($"Fire RSI doesn't have state \"{i}\"!"); } _fireFrames[i] = state.GetFrames(RSI.State.Direction.South); _fireFrameDelays[i] = state.GetDelays(); _fireFrameCounter[i] = 0; } var overlayManager = IoCManager.Resolve <IOverlayManager>(); if (!overlayManager.HasOverlay(nameof(GasTileOverlay))) { overlayManager.AddOverlay(new GasTileOverlay()); } }
private void Revalidate() { var mapMan = IoCManager.Resolve <IMapManager>(); var entityMan = IoCManager.Resolve <IEntityManager>(); var list = new List <GasData>(); foreach (var(gridId, indices) in _invalid) { if (!mapMan.GridExists(gridId)) { _invalid.Remove(gridId); return; } var grid = entityMan.GetEntity(mapMan.GetGrid(gridId).GridEntityId); if (!grid.TryGetComponent(out GridAtmosphereComponent gam)) { continue; } foreach (var index in indices) { var tile = gam.GetTile(index); if (tile?.Air == null) { continue; } list.Clear(); for (var i = 0; i < Atmospherics.TotalNumberOfGases; i++) { var gas = Atmospherics.GetGas(i); var overlay = gas.GasOverlay; if (overlay == null) { continue; } var moles = tile.Air.Gases[i]; if (moles == 0f || moles < gas.GasMolesVisible) { continue; } list.Add(new GasData(i, MathF.Max(MathF.Min(1, moles / gas.GasMolesVisibleMax), 0f))); } if (list.Count == 0) { continue; } SetTileOverlay(gridId, index, list.ToArray(), tile.Hotspot.State, tile.Hotspot.Temperature); } indices.Clear(); } }
public void OnEnable() { Atmospherics a = target as Atmospherics; if (!a) { return; } string path = AssetDatabase.GetAssetPath(a.lookupTexture); if (path == "") { changed = true; } }
private bool TryRefreshTile(GridAtmosphereComponent gam, GasOverlayData oldTile, MapIndices indices, out GasOverlayData overlayData) { var tile = gam.GetTile(indices); if (tile == null) { overlayData = default; return(false); } var tileData = new List <GasData>(); for (byte i = 0; i < Atmospherics.TotalNumberOfGases; i++) { var gas = Atmospherics.GetGas(i); var overlay = Atmospherics.GetOverlay(i); if (overlay == null || tile?.Air == null) { continue; } var moles = tile.Air.Gases[i]; if (moles < gas.GasMolesVisible) { continue; } var data = new GasData(i, (byte)(MathHelper.Clamp01(moles / gas.GasMolesVisibleMax) * 255)); tileData.Add(data); } overlayData = new GasOverlayData(tile !.Hotspot.State, tile.Hotspot.Temperature, tileData.Count == 0 ? null : tileData.ToArray()); if (overlayData.Equals(oldTile)) { return(false); } return(true); }
private void UpdateUserInterface() { string?error = null; // Check if the player is still holding the gas analyzer => if not, don't update foreach (var session in _userInterface.SubscribedSessions) { if (session.AttachedEntity == null) { return; } if (!session.AttachedEntity.TryGetComponent(out IHandsComponent handsComponent)) { return; } var activeHandEntity = handsComponent?.GetActiveHand?.Owner; if (activeHandEntity == null || !activeHandEntity.TryGetComponent(out GasAnalyzerComponent gasAnalyzer)) { return; } } var pos = Owner.Transform.GridPosition; if (!_checkPlayer && _position.HasValue) { // Check if position is out of range => don't update if (!_position.Value.InRange(_mapManager, pos, SharedInteractionSystem.InteractionRange)) { return; } pos = _position.Value; } var gam = EntitySystem.Get <AtmosphereSystem>().GetGridAtmosphere(pos.GridID); var tile = gam?.GetTile(pos).Air; if (tile == null) { error = "No Atmosphere!"; _userInterface.SetState( new GasAnalyzerBoundUserInterfaceState( 0, 0, null, error)); return; } var gases = new List <GasEntry>(); for (int i = 0; i < Atmospherics.TotalNumberOfGases; i++) { var gas = Atmospherics.GetGas(i); if (tile.Gases[i] <= Atmospherics.GasMinMoles) { continue; } gases.Add(new GasEntry(gas.Name, tile.Gases[i], gas.Color)); } _userInterface.SetState( new GasAnalyzerBoundUserInterfaceState( tile.Pressure, tile.Temperature, gases.ToArray(), error)); }