private void _updateTileMapOnUpdate(object sender, TileChangedEventArgs args)
        {
            var grid  = _mapManager.GetGrid(args.NewTile.GridIndex);
            var chunk = grid.GridTileToChunkIndices(new MapIndices(args.NewTile.X, args.NewTile.Y));

            _setChunkDirty(grid, chunk);
        }
Exemple #2
0
 private void MapManagerOnTileChanged(object?sender, TileChangedEventArgs e)
 {
     if (e.OldTile.IsEmpty)
     {
         return; // Nothing is anchored here anyways.
     }
     if (e.NewTile.Tile.IsEmpty)
     {
         return; // Anything that was here will be unanchored anyways.
     }
     UpdateTile(MapManager.GetGrid(e.NewTile.GridIndex), e.NewTile.GridIndices);
 }
Exemple #3
0
 public void OnPointerDown(PointerEventData data)
 {
     SetPlayState(!_playState);
     if (OnTileChanged != null)
     {
         TileChangedEventArgs args = new TileChangedEventArgs();
         args.channel = channel;
         args.slot    = slot;
         args.state   = _playState;
         OnTileChanged(this, args);
     }
 }
        private void OnTileChanged(object?sender, TileChangedEventArgs eventArgs)
        {
            // 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 (eventArgs.NewTile.IsSpace() == eventArgs.OldTile.IsSpace())
            {
                return;
            }

            GetGridAtmosphere(eventArgs.NewTile.GridIndex)?.Invalidate(eventArgs.NewTile.GridIndices);
        }
 private void HandleTileChanged(object sender, TileChangedEventArgs eventArgs)
 {
     // If this gets hammered you could probably queue up all the tile changes every tick but I doubt that would ever happen.
     foreach (var(puddle, snapGrid) in ComponentManager.EntityQuery <PuddleComponent, SnapGridComponent>(true))
     {
         // If the tile becomes space then delete it (potentially change by design)
         if (eventArgs.NewTile.GridIndex == puddle.Owner.Transform.GridID &&
             snapGrid.Position == eventArgs.NewTile.GridIndices &&
             eventArgs.NewTile.Tile.IsEmpty)
         {
             puddle.Owner.Delete();
             break; // Currently it's one puddle per tile, if that changes remove this
         }
     }
 }
Exemple #6
0
 private void FieldOnTileChanged(object sender, TileChangedEventArgs e)
 {
     if (e.IsMove() || e.IsAdd())
     {
         _tileDrawer.DrawTile(e.NewTile);
     }
     else if (e.IsDelete())
     {
         _tileDrawer.RemoveTile(e.OldTile.Tile);
     }
     else
     {
         _tileDrawer.RemoveTile(e.OldTile.Tile);
         _tileDrawer.DrawTile(e.NewTile);
     }
 }
Exemple #7
0
        private void HandleTileChanged(object sender, TileChangedEventArgs eventArgs)
        {
            // If this gets hammered you could probably queue up all the tile changes every tick but I doubt that would ever happen.
            var entities = EntityManager.GetEntities(EntityQuery);

            foreach (var entity in entities)
            {
                // If the tile becomes space then delete it (potentially change by design)
                if (eventArgs.NewTile.GridIndex == entity.Transform.GridID &&
                    entity.TryGetComponent(out SnapGridComponent snapGridComponent) &&
                    snapGridComponent.Position == eventArgs.NewTile.GridIndices &&
                    eventArgs.NewTile.Tile.IsEmpty)
                {
                    entity.Delete();
                    break; // Currently it's one puddle per tile, if that changes remove this
                }
            }
        }
Exemple #8
0
        /// <summary>
        /// Handles tile changes. Sets their new colors.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Model_TileChanged(object sender, TileChangedEventArgs e)
        {
            switch (e.Type)
            {
            case TileType.Empty:
                Fields[e.X * model.MapSize + e.Y].Color = Color.FromRgb(0, 0, 0);
                break;

            case TileType.Snake:
                Fields[e.X * model.MapSize + e.Y].Color = Color.FromRgb(255, 0, 0);
                break;

            case TileType.Food:
                Fields[e.X * model.MapSize + e.Y].Color = Color.FromRgb(0, 255, 0);
                break;

            case TileType.Wall:
                Fields[e.X * model.MapSize + e.Y].Color = Color.FromRgb(0, 0, 255);
                break;
            }
        }
Exemple #9
0
        //TODO: Replace all this with an Unanchored event that deletes the puddle
        private void HandleTileChanged(object?sender, TileChangedEventArgs eventArgs)
        {
            // If this gets hammered you could probably queue up all the tile changes every tick but I doubt that would ever happen.
            foreach (var puddle in ComponentManager.EntityQuery <PuddleComponent>(true))
            {
                // If the tile becomes space then delete it (potentially change by design)
                var puddleTransform = puddle.Owner.Transform;
                if (!puddleTransform.Anchored)
                {
                    continue;
                }

                var grid = _mapManager.GetGrid(puddleTransform.GridID);
                if (eventArgs.NewTile.GridIndex == puddle.Owner.Transform.GridID &&
                    grid.TileIndicesFor(puddleTransform.Coordinates) == eventArgs.NewTile.GridIndices &&
                    eventArgs.NewTile.Tile.IsEmpty)
                {
                    puddle.Owner.QueueDelete();
                    break; // Currently it's one puddle per tile, if that changes remove this
                }
            }
        }
 private void QueueTileChange(object sender, TileChangedEventArgs eventArgs)
 {
     _tileUpdateQueue.Enqueue(eventArgs.NewTile);
 }
 private void MapManagerOnTileChanged(object sender, TileChangedEventArgs e)
 {
     UpdateTile(_mapManager.GetGrid(e.NewTile.GridIndex), e.NewTile.GridIndices);
 }
 private void HandleTileChanged(object?sender, TileChangedEventArgs eventArgs)
 {
     GetOrCreateNode(eventArgs.NewTile.GridIndex, eventArgs.NewTile.GridIndices);
 }
Exemple #13
0
        private static bool OnTileChange(dynamic inst, int start, int length)
        {
            byte player = (byte)(int)inst.whoAmI;
            int index = start + 1;
            byte action = inst.readBuffer[index];
            index++;
            int x = BitConverter.ToInt32(inst.readBuffer, index);
            index += 4;
            int y = BitConverter.ToInt32(inst.readBuffer, index);
            index += 4;
            byte type = inst.readBuffer[index];

            bool retval;
            if (Session.Sessions[player].IsCheckingBlock)
            {
                Session.Sessions[player].IsCheckingBlock = false;
                Database.Check(x, y, Session.Sessions[player]);
                retval = false;
            }
            else
            {
                retval = CanPerformAction(player, x, y, action, action == 1 || action == 3 ? type : (action == 2 ? MainMod.Tile[x, y].wall : MainMod.Tile[x, y].type));
            }

            if (!retval)
            {
                NetMessageMod.SendTileSquare(player, x, y, 3);
                return false;
            }

            if (TileChanged != null)
            {
                TileChangedEventArgs e = new TileChangedEventArgs(player, action, x, y, type);
                TileChanged.Invoke(null, e);
                if (e.Canceled)
                {
                    return false;
                }
            }

            Session.Sessions[player].MakeEdit(new Edit
            {
                X = x,
                Y = y,
                Type = action == 1 || action == 3 ? type : (MainMod.Tile[x, y] == null ? 0 : (action == 2 ? MainMod.Tile[x, y].wall : MainMod.Tile[x, y].type)),
                Action = action,
            });
            return true;
        }
Exemple #14
0
        private void ChangeTile(Object sender, TileChangedEventArgs args)
        {
            TileFactory tf = TileFactory.Instance;

            this.Image = tf.getBitmapImproved(args.Tile);
        }
        private void HandleTileChanged(object sender, TileChangedEventArgs args)
        {
            var coords = args.NewTile.LocalPos;

            _pendingTileChanges.RemoveAll(c => c.Item1 == coords);
        }
        private void UpdateTileMapOnUpdate(object sender, TileChangedEventArgs args)
        {
            var tilemap = RenderTileMaps[args.NewTile.GridIndex];

            tilemap.SetCell(args.NewTile.X, args.NewTile.Y, args.NewTile.Tile.TileId);
        }
Exemple #17
0
 private void QueueTileChange(object sender, TileChangedEventArgs eventArgs)
 {
     _queuedGraphUpdates.Enqueue(new TileUpdate(eventArgs.NewTile));
 }
Exemple #18
0
 /// <summary>
 /// Event handler for tile changes.
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void Model_TileChanged(object sender, TileChangedEventArgs e)
 {
     SetColor(e.X, e.Y, e.Type);
 }