private void OnTileChanged(TileChangedEvent ev) { // Only if a atmos-holding tile has been added or removed. // Also, these calls are surprisingly slow. // TODO: Make tiledefmanager cache the IsSpace property, and turn this lookup-through-two-interfaces into // TODO: a simple array lookup, as tile IDs are likely contiguous, and there's at most 2^16 possibilities anyway. if (!((ev.OldTile.IsSpace(_tileDefinitionManager) && !ev.NewTile.IsSpace(_tileDefinitionManager)) || (!ev.OldTile.IsSpace(_tileDefinitionManager) && ev.NewTile.IsSpace(_tileDefinitionManager)))) { return; } var uid = _mapManager.GetGridEuid(ev.NewTile.GridIndex); if (!TryComp <PhysicsComponent>(uid, out var physics)) { return; } // We can't actually count how many tiles there are efficiently, so instead estimate with the mass. if (physics.Mass / ShuttleSystem.TileMassMultiplier >= 7.0f && !HasComp <IAtmosphereComponent>(uid)) { AddComp <GridAtmosphereComponent>(uid); Logger.InfoS("atmos", $"Giving grid {uid} GridAtmosphereComponent."); } // It's not super important to remove it should the grid become too small again. // If explosions ever gain the ability to outright shatter grids, do rethink this. }
private void OnTileChanged(TileChangedEvent args) { if (args.OldTile.IsEmpty) { return; // Nothing is anchored here anyways. } if (args.NewTile.Tile.IsEmpty) { return; // Anything that was here will be unanchored anyways. } UpdateTile(MapManager.GetGrid(args.NewTile.GridUid), args.NewTile.GridIndices); }
private void OnTileChanged(TileChangedEvent ev) { // When a tile changes, we want to update it only if it's gone from // space -> not space or vice versa. So if the old tile is the // same as the new tile in terms of space-ness, ignore the change if (ev.NewTile.IsSpace(_tileDefinitionManager) == ev.OldTile.IsSpace(_tileDefinitionManager)) { return; } InvalidateTile(ev.NewTile.GridUid, ev.NewTile.GridIndices); }
bool ProcessEvent(bool withSound = true) { GameEvent evt = engine.getQueuedEvent(); if (evt == null) { return(false); } if (evt is TileChangedEvent) { TileChangedEvent sEvt = (TileChangedEvent)evt; tiles [sEvt.x, sEvt.y].SetTexture(tileTextures [sEvt.currentPiece.GetHashCode()]); hasPlaced [sEvt.x, sEvt.y] = true; if (withSound) { int randomNumber = Random.Range(0, playSounds.Length); AudioClip clip = playSounds [randomNumber]; Debug.Log(randomNumber.ToString() + ", " + clip.ToString()); playSound(clip); } autoSave(); Counter.UpdateValue(engine.getPieceCount(), engine.getRemainingArrowCount()); } if (evt is CurrentTileChangedEvent) { CurrentTileChangedEvent sEvt = (CurrentTileChangedEvent)evt; GameObject.Find("TileCurrent").GetComponent <Tile> ().SetTexture(tileTextures [sEvt.newCurrentTile.GetHashCode()]); } if (evt is StoredTileChangedEvent) { StoredTileChangedEvent sEvt = (StoredTileChangedEvent)evt; GameObject.Find("TileStored").GetComponent <Tile> ().SetTexture(tileTextures [sEvt.newStoredTile.GetHashCode()]); AudioClip clip = swapSound; playSound(clip); } if (evt is GameWonEvent) { Debug.Log("WINNER"); Celebration.globalWin(); Stats.addWin(generatorId); WinLoss.ShowWin(); } if (evt is GameLostEvent) { Debug.Log("Loser"); WinLoss.ShowLoss(); } return(true); }
remove => RemoveHandler(TileChangedEvent, value);
add => AddHandler(TileChangedEvent, value);
private void OnTileChanged(TileChangedEvent ev) { InvalidateTile(ev.NewTile.GridUid, ev.NewTile.GridIndices); }