/* ======================================================================================================================= AddProp ======================================================================================================================= */ void CEntityDlg::AddProp() { if( editEntity == NULL ) { return; } CString Key, Value; editKey.GetWindowText( Key ); editVal.GetWindowText( Value ); bool isName = ( stricmp( Key, "name" ) == 0 ); bool isModel = static_cast<bool>( ( stricmp( Key, "model" ) == 0 && Value.GetLength() > 0 ) ); bool isOrigin = ( idStr::Icmp( Key, "origin" ) == 0 ); if( multipleEntities ) { brush_t *b; for( b = selected_brushes.next; b != &selected_brushes; b = b->next ) { if( isName ) { Entity_SetName( b->owner, Value ); } else { if( !( ( isModel || isOrigin ) && ( b->owner->eclass->nShowFlags & ECLASS_WORLDSPAWN ) ) ) { SetKeyValue( b->owner, Key, Value ); } } } } else { if( isName ) { Entity_SetName( editEntity, Value ); } else { if( !( ( isModel || isOrigin ) && ( editEntity->eclass->nShowFlags & ECLASS_WORLDSPAWN ) ) ) { SetKeyValue( editEntity, Key, Value ); } } if( isModel && !( editEntity->eclass->nShowFlags & ECLASS_WORLDSPAWN ) ) { idBounds bo; idVec3 mins, maxs; selected_brushes.next->modelHandle = renderModelManager->FindModel( Value ); if( dynamic_cast<idRenderModelPrt *>( selected_brushes.next->modelHandle ) || dynamic_cast<idRenderModelLiquid *>( selected_brushes.next->modelHandle ) ) { bo.Zero(); bo.ExpandSelf( 12.0f ); } else { bo = selected_brushes.next->modelHandle->Bounds( NULL ); } VectorCopy( bo[0], mins ); VectorCopy( bo[1], maxs ); VectorAdd( mins, editEntity->origin, mins ); VectorAdd( maxs, editEntity->origin, maxs ); Brush_RebuildBrush( selected_brushes.next, mins, maxs, false ); Brush_Build( selected_brushes.next , false, false , false, true ); } } // refresh the prop listbox SetKeyValPairs(); Sys_UpdateWindows( W_ALL ); }
void Terrain_Scale( terrainMesh_t *p, const vec3_t vOrigin, const vec3_t vAmt, bool bRebuild ) { int w; int h; vec3_t pos; terrainVert_t *vert; vec3_t vMin; vec3_t vMax; vert = p->heightmap; for( h = 0; h < p->height; h++ ) { pos[ 1 ] = p->origin[ 1 ] + h * p->scale_y; for( w = 0; w < p->width; w++, vert++ ) { pos[ 0 ] = p->origin[ 0 ] + w * p->scale_x; pos[ 2 ] = vert->height; if ( ( g_qeglobals.d_select_mode == sel_terrainpoint ) && ( Terrain_PointInMoveList( vert ) == -1 ) ) { continue; } vert->height -= vOrigin[ 2 ] - p->origin[ 2 ]; vert->height *= vAmt[ 2 ]; vert->height += vOrigin[ 2 ] - p->origin[ 2 ]; } } if ( g_qeglobals.d_select_mode != sel_terrainpoint ) { p->scale_x *= vAmt[ 0 ]; p->scale_y *= vAmt[ 1 ]; p->origin[ 0 ] -= vOrigin[ 0 ]; p->origin[ 0 ] *= vAmt[ 0 ]; p->origin[ 0 ] += vOrigin[ 0 ]; p->origin[ 1 ] -= vOrigin[ 1 ]; p->origin[ 1 ] *= vAmt[ 1 ]; p->origin[ 1 ] += vOrigin[ 1 ]; } if ( bRebuild ) { Terrain_CalcBounds( p, vMin, vMax ); Terrain_CalcNormals( p ); Brush_RebuildBrush( p->pSymbiot, vMin, vMax ); } UpdateTerrainInspector(); }
void Terrain_UpdateSelected( vec3_t vMove ) { int i; brush_t *pb; terrainMesh_t *p; vec3_t vMin; vec3_t vMax; if ( g_qeglobals.d_select_mode == sel_terrainpoint ) { for( i = 0; i < g_qeglobals.d_numterrapoints; i++ ) { g_qeglobals.d_terrapoints[ i ]->height += vMove[ 2 ] * g_qeglobals.d_terrapoints[ i ]->scale; } } for( pb = active_brushes .next; pb != &active_brushes; pb = pb->next ) { // for( pb = selected_brushes.next; pb != &selected_brushes; pb = pb->next ) { if ( pb->terrainBrush ) { p = pb->pTerrain; Terrain_CalcBounds( p, vMin, vMax ); Terrain_CalcNormals( p ); Brush_RebuildBrush( p->pSymbiot, vMin, vMax ); } } }