private void SetupTileRendering(TileRenderingData data, Tile tile) { var renderer = data.SpriteRenderer; var blendLayers = this.GetBlendLayers(tile); if (blendLayers.TileBlendSides == None) { // tile rendering not required if (renderer != null) { renderer.IsEnabled = false; } return; } if (renderer == null) { renderer = Api.Client.Rendering.CreateSpriteRenderer( Api.Client.Scene.CreateSceneObject( this.sceneObjectsName, position: tile.Position.ToVector2D()), this.protoFarmPlot.Texture, drawOrder: DrawOrder.GroundBlend + 3); renderer.SortByWorldPosition = false; renderer.Size = ScriptingConstants.TileSizeRenderingVirtualSize; data.SpriteRenderer = renderer; } renderer.IsEnabled = true; renderer.RenderingMaterial = this.GetBlendMaterial(blendLayers); }
private void RefreshRendering(Tile tile, uint frameNumber) { if (!this.tileDictionary.TryGetValue(tile.Position, out var data)) { // try register tile data = new TileRenderingData(frameNumber); this.SetupTileRendering(data, tile); if (data.SpriteRenderer != null && data.SpriteRenderer.IsEnabled) { this.tileDictionary[tile.Position] = data; } return; } // COMMENTED OUT - because we cannot use this optimization yet // there are multiple objects could be added or deleted at single frame. //if (data.LastUpdateFrameNumber == frameNumber) //{ // // no need to refresh // return; //} data.LastUpdateFrameNumber = frameNumber; this.SetupTileRendering(data, tile); if (data.SpriteRenderer == null || !data.SpriteRenderer.IsEnabled) { this.tileDictionary.Remove(tile.Position); } }