//---------------------------------------------------------------------------- void EditMap::CreateTerrain (std::string name, int terrainSize, int pageSize, float gridSpacing) { TerrainActor *actor = new0 TerrainActor(); actor->SetName(name); RawTerrain *rawTerrain = new0 RawTerrain(); rawTerrain->SetName(name); rawTerrain->SetSize(pageSize); int quantity = terrainSize/(pageSize-1); rawTerrain->SetRowQuantity(quantity); rawTerrain->SetColQuantity(quantity); rawTerrain->SetSpacing(gridSpacing); rawTerrain->AllocateRawTerrainPages(); actor->SetTerrain(rawTerrain); actor->ComeInToEventWorld(); Event *event = EditorEventSpace::CreateEventX( EditorEventSpace::CreateTerrain); event->SetData<TerrainActor*>(actor); EventWorld::GetSingleton().BroadcastingLocalEvent(event); mScene->AddActor(actor); }
//---------------------------------------------------------------------------- void EditMap::CreateTerrain (std::string name, int terrainSize, int pageSize, float gridSpacing) { TerrainActor *actor = new0 TerrainActor(); actor->SetName(name); RawTerrain *rawTerrain = new0 RawTerrain(); rawTerrain->SetName(name); rawTerrain->SetSize(pageSize); int quantity = terrainSize/(pageSize-1); rawTerrain->SetRowQuantity(quantity); rawTerrain->SetColQuantity(quantity); rawTerrain->SetSpacing(gridSpacing); rawTerrain->AllocateRawTerrainPages(); actor->SetRawTerrain(rawTerrain); actor->ComeInToEventWorld(); AddActor(actor); }
//---------------------------------------------------------------------------- void EditRenderView_Scene::_UpdateBrushPos(const APoint &pos) { Project *proj = Project::GetSingletonPtr(); if (!proj) return; Scene *scene = proj->GetScene(); if (!scene) return; TerrainActor *terrainActor = scene->GetTerrainActor(); if (!terrainActor) return; RawTerrain *terrain = terrainActor->GetRawTerrain(); APoint origin; AVector dir; mRenderStep->GetPickRay(pos.X(), pos.Z(), origin, dir); Movable *pickObject = terrain; #ifdef _DEBUG pickObject = PX2_GR.GetXYPlane(); pickObject->WorldTransform.SetTranslate(APoint::ORIGIN); #endif if (pickObject) { PX2::Picker picker; picker.Execute(pickObject, origin, dir, 0.0f, Mathf::MAX_REAL); if ((int)picker.Records.size() > 0) { PX2::PickRecord pickRecord = picker.GetClosestToZero(); PX2::APoint dest = origin + dir*pickRecord.T; PX2_EDIT.GetTerrainEdit()->GetBrush()->SetPos(dest); } } }