Пример #1
0
    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);
        }
Пример #4
0
    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);
    }
Пример #5
0
 remove => RemoveHandler(TileChangedEvent, value);
Пример #6
0
 add => AddHandler(TileChangedEvent, value);
 private void OnTileChanged(TileChangedEvent ev)
 {
     InvalidateTile(ev.NewTile.GridUid, ev.NewTile.GridIndices);
 }