void CommandCopyPasteHeightmap::UpdateLandscapeTilemap(DAVA::Image *image) { Texture* texture = Texture::CreateFromData(image->GetPixelFormat(), image->GetData(), image->GetWidth(), image->GetHeight(), false); texture->relativePathname = tilemapSavedPathname; texture->GenerateMipmaps(); texture->SetWrapMode(Texture::WRAP_REPEAT, Texture::WRAP_REPEAT); LandscapeEditorBase* editor = GetActiveEditor(); if (editor) { editor->UpdateLandscapeTilemap(texture); } else { SceneEditorScreenMain *screen = dynamic_cast<SceneEditorScreenMain *>(UIScreenManager::Instance()->GetScreen()); EditorScene* scene = screen->FindCurrentBody()->bodyControl->GetScene(); Landscape* landscape = scene->GetLandscape(scene); landscape->SetTexture(Landscape::TEXTURE_TILE_MASK, texture); landscape->UpdateFullTiledTexture(); ImageLoader::Save(image, tilemapSavedPathname); } SafeRelease(texture); }
void LandscapeEditorHeightmap::UpdateCopypasteTool(float32 timeElapsed) { if( (Vector2(-1.0f, -1.0f) != copyFromCenter) && (Vector2(-1.0f, -1.0f) != copyToCenter)) { if(currentTool->copyTilemask) { if(tilemaskImage && toolImageTile) { tilemaskWasChanged = true; float32 multiplier = (float32)tilemaskImage->GetWidth() / (float32)(landscapeSize); int32 scaleSize = toolImageTile->GetWidth(); Vector2 posTo = landscapePoint * multiplier - Vector2((float32)scaleSize, (float32)scaleSize)/2.f; Vector2 deltaPos = landscapePoint - copyToCenter; Vector2 posFrom = (copyFromCenter + deltaPos) * multiplier - Vector2((float32)scaleSize, (float32)scaleSize)/2.f; EditorHeightmap::DrawCopypasteRGBA(tilemaskImage, tilemaskImage, toolImageTile, posFrom, posTo, scaleSize, scaleSize); Texture *tex = tilemaskTexture; if(tex) { tex->TexImage(0, tilemaskImage->GetWidth(), tilemaskImage->GetHeight(), tilemaskImage->GetData(), 0); //TODO: is code useful? tex->GenerateMipmaps(); tex->SetWrapMode(Texture::WRAP_REPEAT, Texture::WRAP_REPEAT); //ENDOFTODO workingLandscape->UpdateFullTiledTexture(); } } } if(currentTool->copyHeightmap) { int32 scaleSize = toolImage->GetWidth(); Vector2 posTo = landscapePoint - Vector2((float32)scaleSize, (float32)scaleSize)/2.f; Vector2 deltaPos = landscapePoint - copyToCenter; Vector2 posFrom = copyFromCenter + deltaPos - Vector2((float32)scaleSize, (float32)scaleSize)/2.f; float32 koef = (currentTool->averageStrength * timeElapsed) * 2.0f; EditorHeightmap *heightmap = dynamic_cast<EditorHeightmap *>(landscapesController->GetCurrentHeightmap()); DVASSERT(heightmap); heightmap->DrawCopypasteRGBA(toolImage, posFrom, posTo, scaleSize, scaleSize, koef); UpdateHeightmap(Rect(posTo.x, posTo.y, (float32)scaleSize, (float32)scaleSize)); } } }