void CustomColorsSystem::UpdateBrushTool(float32 timeElapsed) { Sprite* colorSprite = drawSystem->GetCustomColorsProxy()->GetSprite(); RenderManager::Instance()->SetRenderTarget(colorSprite); RenderManager::Instance()->SetColor(drawColor); Vector2 spriteSize = Vector2(cursorSize, cursorSize); Vector2 spritePos = cursorPosition - spriteSize / 2.f; Sprite::DrawState drawState; drawState.SetScaleSize(spriteSize.x / Core::GetVirtualToPhysicalFactor(), spriteSize.y / Core::GetVirtualToPhysicalFactor(), toolImageSprite->GetWidth(), toolImageSprite->GetHeight()); drawState.SetPosition(spritePos / Core::GetVirtualToPhysicalFactor()); toolImageSprite->Draw(&drawState); RenderManager::Instance()->RestoreRenderTarget(); RenderManager::Instance()->SetColor(Color::White); drawSystem->GetLandscapeProxy()->SetCustomColorsTexture(colorSprite->GetTexture()); Rect updatedRect; updatedRect.SetCenter(spritePos); updatedRect.SetSize(spriteSize); AddRectToAccumulator(updatedRect); }
bool CustomColorsSystem::LoadTexture( const DAVA::FilePath &filePath, bool createUndo /* = true */ ) { if(filePath.IsEmpty()) return false; Vector<Image*> images; ImageSystem::Instance()->Load(filePath, images); if(images.empty()) return false; Image* image = images.front(); if(image) { Texture* texture = Texture::CreateFromData(image->GetPixelFormat(), image->GetData(), image->GetWidth(), image->GetHeight(), false); Sprite* sprite = Sprite::CreateFromTexture(texture, 0, 0, texture->GetWidth(), texture->GetHeight()); if (createUndo) { StoreOriginalState(); } RenderManager::Instance()->SetRenderTarget(drawSystem->GetCustomColorsProxy()->GetSprite()); Sprite::DrawState drawState; sprite->Draw(&drawState); RenderManager::Instance()->RestoreRenderTarget(); AddRectToAccumulator(Rect(Vector2(0.f, 0.f), Vector2(texture->GetWidth(), texture->GetHeight()))); SafeRelease(sprite); SafeRelease(texture); for_each(images.begin(), images.end(), SafeRelease<Image>); if (createUndo) { ((SceneEditor2*)GetScene())->BeginBatch("Load custom colors texture"); StoreSaveFileName(filePath); CreateUndoPoint(); ((SceneEditor2*)GetScene())->EndBatch(); } } return true; }
void HeightmapEditorSystem::UpdateBrushTool(float32 timeElapsed) { if (!toolImage) { DAVA::Logger::Error("Tool image is empty!"); return; } EditorHeightmap* editorHeightmap = drawSystem->GetHeightmapProxy(); int32 scaleSize = toolImage->GetWidth(); Vector2 pos = cursorPosition - Vector2((float32)scaleSize, (float32)scaleSize) / 2.0f; { switch (activeDrawingType) { case HEIGHTMAP_DRAW_RELATIVE: { float32 koef = (strength * timeElapsed); if(inverseDrawingEnabled) { koef = -koef; } if (IsKeyModificatorPressed(DVKEY_ALT)) { koef = -koef; } editorHeightmap->DrawRelativeRGBA(toolImage, (int32)pos.x, (int32)pos.y, scaleSize, scaleSize, koef); break; } case HEIGHTMAP_DRAW_AVERAGE: { float32 koef = (averageStrength * timeElapsed) * 2.0f; editorHeightmap->DrawAverageRGBA(toolImage, (int32)pos.x, (int32)pos.y, scaleSize, scaleSize, koef); break; } case HEIGHTMAP_DRAW_ABSOLUTE: case HEIGHTMAP_DRAW_ABSOLUTE_DROPPER: { float32 maxHeight = drawSystem->GetLandscapeMaxHeight(); float32 height = curHeight / maxHeight * Heightmap::MAX_VALUE; float32 koef = (averageStrength * timeElapsed) * 2.0f; editorHeightmap->DrawAbsoluteRGBA(toolImage, (int32)pos.x, (int32)pos.y, scaleSize, scaleSize, koef, height); break; } case HEIGHTMAP_DROPPER: { float32 curHeight = drawSystem->GetHeightAtPoint(cursorPosition); SceneSignals::Instance()->EmitDropperHeightChanged(dynamic_cast<SceneEditor2*>(GetScene()), curHeight); return; } case HEIGHTMAP_COPY_PASTE: { if (copyPasteFrom == Vector2(-1.f, -1.f) || copyPasteTo == Vector2(-1.f, -1.f)) { return; } Vector2 posTo = pos; Vector2 deltaPos = cursorPosition - copyPasteTo; Vector2 posFrom = copyPasteFrom + deltaPos - Vector2((float32)scaleSize, (float32)scaleSize)/2.f; float32 koef = (averageStrength * timeElapsed) * 2.0f; editorHeightmap->DrawCopypasteRGBA(toolImage, posFrom, posTo, scaleSize, scaleSize, koef); break; } default: DAVA::Logger::Error("Invalid drawing type!"); return; } Rect rect(pos.x, pos.y, (float32)scaleSize, (float32)scaleSize); drawSystem->GetHeightmapProxy()->UpdateRect(rect); AddRectToAccumulator(heightmapUpdatedRect, rect); } }