/*
 =======================================================================================================================
    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 );
}
Ejemplo n.º 2
0
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();
}
Ejemplo n.º 3
0
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 );
		}
	}
}