fix compilation on linux
	* packer: pack actual loaded bsp instead of one, found in vfs

Radiant:

binds...
	* Q - toggle QE/Scale tools (MouseDragOrScale command)
	* new MouseRotateOrScale command
	* shift + m3: set custom transform/pivot origin in pivoted mode
		switch manipulator mode = disable
		is snapped to (if SnapToGrid is on):
			grid
			selection bbox edges
			selection bbox origin

misc...
	* Scale tool: now scales bbox by gridsize increment
	* m1 selector fix: shift/ctrl + m1 drag, release shift/ctrl, release m1 = replace brush selection
	* m1 selector fix: do not select when dragged off pivot in pivoted mode
	* don't restore cursor pos after quit mlook (do center)
	* toggle and paint selectors do select matching stuff (depth threshold ~= 0.1 u)
This commit is contained in:
Garux 2017-08-02 09:04:48 +03:00
parent fa294e4215
commit 0d5ebb17b2
12 changed files with 406 additions and 116 deletions

View File

@ -124,6 +124,7 @@ virtual void rotateSelected( const Quaternion& rotation ) = 0;
virtual void scaleSelected( const Vector3& scaling ) = 0;
virtual void pivotChanged() const = 0;
virtual void setCustomPivotOrigin( Vector3& point ) const = 0;
};
#include "modulesystem.h"

View File

@ -118,7 +118,7 @@ class FreezePointer
{
unsigned int handle_motion;
int recorded_x, recorded_y, last_x, last_y, center_x, center_y;
GtkWidget* weedjet;
GtkWidget* m_weedjet;
typedef void ( *MotionDeltaFunction )( int x, int y, unsigned int state, void* data );
MotionDeltaFunction m_function;
void* m_data;
@ -168,7 +168,7 @@ void freeze_pointer( GtkWindow* window, GtkWidget* widget, MotionDeltaFunction f
//gdk_window_set_cursor ( GTK_WIDGET( window )->window, cursor );
/* is needed to fix activating neighbour widgets, that happens, if using upper one */
gtk_grab_add( widget );
weedjet = widget;
m_weedjet = widget;
gdk_cursor_unref( cursor );
@ -190,17 +190,22 @@ void freeze_pointer( GtkWindow* window, GtkWidget* widget, MotionDeltaFunction f
handle_motion = g_signal_connect( G_OBJECT( window ), "motion_notify_event", G_CALLBACK( motion_delta ), this );
}
void unfreeze_pointer( GtkWindow* window ){
void unfreeze_pointer( GtkWindow* window, bool centerize ){
g_signal_handler_disconnect( G_OBJECT( window ), handle_motion );
m_function = 0;
m_data = 0;
Sys_SetCursorPos( window, recorded_x, recorded_y );
if( centerize ){
Sys_SetCursorPos( window, center_x, center_y );
}
else{
Sys_SetCursorPos( window, recorded_x, recorded_y );
}
// gdk_window_set_cursor( GTK_WIDGET( window )->window, 0 );
gdk_pointer_ungrab( GDK_CURRENT_TIME );
gtk_grab_remove( weedjet );
if( m_weedjet )
gtk_grab_remove( m_weedjet );
}
};

View File

@ -234,7 +234,7 @@ inline bool Tokeniser_getFloat( Tokeniser& tokeniser, float& f ){
//fallback for 1.#IND 1.#INF 1.#QNAN cases, happening sometimes after rotating & often scaling with tex lock in BP mode
else if ( token != 0 && strstr( token, ".#" ) ) {
globalErrorStream() << "Warning: " << Unsigned( tokeniser.getLine() ) << ":" << Unsigned( tokeniser.getColumn() ) << ": expected parse problem at '" << token << "': wanted '#number'\nProcessing anyway\n";
*strstr( token, ".#" ) = '\0';
// *strstr( token, ".#" ) = '\0';
return true;
}
Tokeniser_unexpectedError( tokeniser, token, "#number" );

View File

@ -1343,7 +1343,7 @@ void CamWnd::DisableFreeMove(){
CamWnd_Remove_Handlers_FreeMove( *this );
CamWnd_Add_Handlers_Move( *this );
m_freezePointer.unfreeze_pointer( m_parent );
m_freezePointer.unfreeze_pointer( m_parent, true );
g_signal_handler_disconnect( G_OBJECT( m_gl_widget ), m_freemove_handle_focusout );
CamWnd_Update( *this );

View File

@ -1469,6 +1469,27 @@ void ClipperMode(){
}
void ToggleRotateScaleModes(){
if ( g_currentToolMode == RotateMode ) {
ScaleMode();
}
else
{
RotateMode();
}
}
void ToggleDragScaleModes(){
if ( g_currentToolMode == DragMode ) {
ScaleMode();
}
else
{
DragMode();
}
}
void Texdef_Rotate( float angle ){
StringOutputStream command;
command << "brushRotateTexture -angle " << angle;
@ -2280,14 +2301,19 @@ void SurfaceInspector_registerShortcuts(){
command_connect_accelerator( "FitTexture" );
}
void TexBro_registerShortcuts(){
command_connect_accelerator( "FindReplaceTextures" );
command_connect_accelerator( "RefreshShaders" );
}
void Misc_registerShortcuts(){
//refresh models
command_connect_accelerator( "RefreshReferences" );
command_connect_accelerator( "MouseRotateOrScale" );
command_connect_accelerator( "MouseDragOrScale" );
}
void register_shortcuts(){
// PatchInspector_registerShortcuts();
//Patch_registerShortcuts();
@ -2301,6 +2327,7 @@ void register_shortcuts(){
// SnapToGrid_registerShortcuts();
// SelectByType_registerShortcuts();
TexBro_registerShortcuts();
Misc_registerShortcuts();
}
void File_constructToolbar( GtkToolbar* toolbar ){
@ -2352,7 +2379,7 @@ void XYWnd_constructToolbar( GtkToolbar* toolbar ){
void Manipulators_constructToolbar( GtkToolbar* toolbar ){
toolbar_append_toggle_button( toolbar, "Translate (W)", "select_mousetranslate.png", "MouseTranslate" );
toolbar_append_toggle_button( toolbar, "Rotate (R)", "select_mouserotate.png", "MouseRotate" );
toolbar_append_toggle_button( toolbar, "Scale", "select_mousescale.png", "MouseScale" );
toolbar_append_toggle_button( toolbar, "Scale (Q)", "select_mousescale.png", "MouseScale" );
toolbar_append_toggle_button( toolbar, "Resize (Q)", "select_mouseresize.png", "MouseDrag" );
Clipper_constructToolbar( toolbar );
@ -3318,7 +3345,9 @@ void MainFrame_Construct(){
GlobalToggles_insert( "MouseTranslate", FreeCaller<TranslateMode>(), ToggleItem::AddCallbackCaller( g_translatemode_button ), Accelerator( 'W' ) );
GlobalToggles_insert( "MouseRotate", FreeCaller<RotateMode>(), ToggleItem::AddCallbackCaller( g_rotatemode_button ), Accelerator( 'R' ) );
GlobalToggles_insert( "MouseScale", FreeCaller<ScaleMode>(), ToggleItem::AddCallbackCaller( g_scalemode_button ) );
GlobalToggles_insert( "MouseDrag", FreeCaller<DragMode>(), ToggleItem::AddCallbackCaller( g_dragmode_button ), Accelerator( 'Q' ) );
GlobalToggles_insert( "MouseDrag", FreeCaller<DragMode>(), ToggleItem::AddCallbackCaller( g_dragmode_button ) );
GlobalCommands_insert( "MouseRotateOrScale", FreeCaller<ToggleRotateScaleModes>() );
GlobalCommands_insert( "MouseDragOrScale", FreeCaller<ToggleDragScaleModes>(), Accelerator( 'Q' ) );
GlobalCommands_insert( "gtkThemeDlg", FreeCaller<gtkThemeDlg>() );
GlobalCommands_insert( "ColorSchemeOriginal", FreeCaller<ColorScheme_Original>() );

View File

@ -325,6 +325,8 @@ void Transform( const Matrix4& manip2object, const Matrix4& device2manip, const
}
};
void GetSelectionAABB( AABB& bounds );
const Matrix4& ssGetPivot2World();
class Scalable
{
@ -339,14 +341,28 @@ private:
Vector3 m_start;
Vector3 m_axis;
Scalable& m_scalable;
AABB m_aabb;
Vector3 m_transform_origin;
Vector3 m_choosen_extent;
public:
ScaleAxis( Scalable& scalable )
: m_scalable( scalable ){
}
void Construct( const Matrix4& device2manip, const float x, const float y ){
point_on_axis( m_start, m_axis, device2manip, x, y );
GetSelectionAABB( m_aabb );
m_transform_origin = vector4_to_vector3( ssGetPivot2World().t() );
m_choosen_extent = Vector3( std::max( m_aabb.origin[0] + m_aabb.extents[0] - m_transform_origin[0], - m_aabb.origin[0] + m_aabb.extents[0] + m_transform_origin[0] ),
std::max( m_aabb.origin[1] + m_aabb.extents[1] - m_transform_origin[1], - m_aabb.origin[1] + m_aabb.extents[1] + m_transform_origin[1] ),
std::max( m_aabb.origin[2] + m_aabb.extents[2] - m_transform_origin[2], - m_aabb.origin[2] + m_aabb.extents[2] + m_transform_origin[2] )
);
}
void Transform( const Matrix4& manip2object, const Matrix4& device2manip, const float x, const float y ){
//globalOutputStream() << "manip2object: " << manip2object << " device2manip: " << device2manip << " x: " << x << " y:" << y <<"\n";
Vector3 current;
point_on_axis( current, m_axis, device2manip, x, y );
Vector3 delta = vector3_subtracted( current, m_start );
@ -355,11 +371,19 @@ void Transform( const Matrix4& manip2object, const Matrix4& device2manip, const
vector3_snap( delta, GetSnapGridSize() );
Vector3 start( vector3_snapped( m_start, GetSnapGridSize() ) );
//globalOutputStream() << "start: " << start << " delta: " << delta <<"\n";
Vector3 scale(
start[0] == 0 ? 1 : 1 + delta[0] / start[0],
start[1] == 0 ? 1 : 1 + delta[1] / start[1],
start[2] == 0 ? 1 : 1 + delta[2] / start[2]
);
for( std::size_t i = 0; i < 3; i++ ){
if( m_choosen_extent[i] > 0.0625 ){ //epsilon to prevent too high scale for set of models, having really small extent, formed by origins
scale[i] = ( m_choosen_extent[i] + delta[i] ) / m_choosen_extent[i];
}
}
m_scalable.scale( scale );
}
@ -373,12 +397,24 @@ class ScaleFree : public Manipulatable
private:
Vector3 m_start;
Scalable& m_scalable;
AABB m_aabb;
Vector3 m_transform_origin;
Vector3 m_choosen_extent;
public:
ScaleFree( Scalable& scalable )
: m_scalable( scalable ){
}
void Construct( const Matrix4& device2manip, const float x, const float y ){
point_on_plane( m_start, device2manip, x, y );
GetSelectionAABB( m_aabb );
m_transform_origin = vector4_to_vector3( ssGetPivot2World().t() );
m_choosen_extent = Vector3( std::max( m_aabb.origin[0] + m_aabb.extents[0] - m_transform_origin[0], - m_aabb.origin[0] + m_aabb.extents[0] + m_transform_origin[0] ),
std::max( m_aabb.origin[1] + m_aabb.extents[1] - m_transform_origin[1], - m_aabb.origin[1] + m_aabb.extents[1] + m_transform_origin[1] ),
std::max( m_aabb.origin[2] + m_aabb.extents[2] - m_transform_origin[2], - m_aabb.origin[2] + m_aabb.extents[2] + m_transform_origin[2] )
);
}
void Transform( const Matrix4& manip2object, const Matrix4& device2manip, const float x, const float y ){
Vector3 current;
@ -394,6 +430,13 @@ void Transform( const Matrix4& manip2object, const Matrix4& device2manip, const
start[1] == 0 ? 1 : 1 + delta[1] / start[1],
start[2] == 0 ? 1 : 1 + delta[2] / start[2]
);
for( std::size_t i = 0; i < 3; i++ ){
if( m_choosen_extent[i] > 0.0625 ){
scale[i] = ( m_choosen_extent[i] + delta[i] ) / m_choosen_extent[i];
}
}
m_scalable.scale( scale );
}
};
@ -2537,9 +2580,7 @@ EManipulatorMode m_manipulator_mode;
Manipulator* m_manipulator;
// state
public:
bool m_undo_begun;
private:
EMode m_mode;
EComponentMode m_componentmode;
@ -2559,8 +2600,13 @@ selection_t m_component_selection;
Signal1<const Selectable&> m_selectionChanged_callbacks;
void ConstructPivot() const;
void setCustomPivotOrigin( Vector3& point ) const;
public:
void getSelectionAABB( AABB& bounds ) const;
private:
mutable bool m_pivotChanged;
bool m_pivot_moving;
mutable bool m_pivotIsCustom;
void Scene_TestSelect( Selector& selector, SelectionTest& test, const View& view, SelectionSystem::EMode mode, SelectionSystem::EComponentMode componentMode );
@ -2591,7 +2637,8 @@ RadiantSelectionSystem() :
m_rotate_manipulator( *this, 8, 64 ),
m_scale_manipulator( *this, 0, 64 ),
m_pivotChanged( false ),
m_pivot_moving( false ){
m_pivot_moving( false ),
m_pivotIsCustom( false ){
SetManipulatorMode( eTranslate );
pivotChanged();
addSelectionChangeCallback( PivotChangedSelectionCaller( *this ) );
@ -2623,6 +2670,7 @@ EComponentMode ComponentMode() const {
return m_componentmode;
}
void SetManipulatorMode( EManipulatorMode mode ){
m_pivotIsCustom = false;
m_manipulator_mode = mode;
switch ( m_manipulator_mode )
{
@ -2864,15 +2912,45 @@ void SelectPoint( const View& view, const float device_point[2], const float dev
break;
case RadiantSelectionSystem::eSelect:
{
if( !( *selector.begin() ).second->isSelected() ){
( *selector.begin() ).second->setSelected( true );
SelectionPool::iterator best = selector.begin();
if( !( *best ).second->isSelected() ){
( *best ).second->setSelected( true );
}
SelectionPool::iterator i = best;
++i;
while ( i != selector.end() )
{
if( ( *i ).first.equalEpsilon( ( *best ).first, 0.25f, 0.000001f ) ){
if( !( *i ).second->isSelected() ){
( *i ).second->setSelected( true );
}
}
else{
break;
}
++i;
}
}
break;
case RadiantSelectionSystem::eDeselect:
{
if( ( *selector.begin() ).second->isSelected() ){
( *selector.begin() ).second->setSelected( false );
SelectionPool::iterator best = selector.begin();
if( ( *best ).second->isSelected() ){
( *best ).second->setSelected( false );
}
SelectionPool::iterator i = best;
++i;
while ( i != selector.end() )
{
if( ( *i ).first.equalEpsilon( ( *best ).first, 0.25f, 0.000001f ) ){
if( ( *i ).second->isSelected() ){
( *i ).second->setSelected( false );
}
}
else{
break;
}
++i;
}
}
break;
@ -2908,14 +2986,21 @@ bool SelectPoint_InitPaint( const View& view, const float device_point[2], const
if ( !selector.failed() ) {
SelectableSortedSet::iterator best = selector.begin();
if ( ( *best ).second->isSelected() ) {
( *best ).second->setSelected( false );
return false;
}
else{
( *best ).second->setSelected( true );
return true;
const bool wasSelected = ( *best ).second->isSelected();
( *best ).second->setSelected( !wasSelected );
SelectableSortedSet::iterator i = best;
++i;
while ( i != selector.end() )
{
if( ( *i ).first.equalEpsilon( ( *best ).first, 0.25f, 0.000001f ) ){
( *i ).second->setSelected( !wasSelected );
}
else{
break;
}
++i;
}
return !wasSelected;
}
else{
return true;
@ -3380,7 +3465,7 @@ inline void pivot_for_node( Matrix4& pivot, scene::Node& node, scene::Instance&
#endif
void RadiantSelectionSystem::ConstructPivot() const {
if ( !m_pivotChanged || m_pivot_moving ) {
if ( !m_pivotChanged || m_pivot_moving || m_pivotIsCustom ) {
return;
}
m_pivotChanged = false;
@ -3401,6 +3486,7 @@ void RadiantSelectionSystem::ConstructPivot() const {
}
//vector3_snap( m_object_pivot, GetSnapGridSize() );
//globalOutputStream() << m_object_pivot << "\n";
m_pivot2world = matrix4_translation_for_vec3( m_object_pivot );
switch ( m_manipulator_mode )
@ -3431,6 +3517,106 @@ void RadiantSelectionSystem::ConstructPivot() const {
}
}
void RadiantSelectionSystem::setCustomPivotOrigin( Vector3& point ) const {
/*if ( !m_pivotChanged || m_pivot_moving ) {
return;
}*/
//m_pivotChanged = false;
if ( !nothingSelected() && ( m_manipulator_mode == eTranslate || m_manipulator_mode == eRotate || m_manipulator_mode == eScale ) ) {
AABB bounds;
if ( Mode() == eComponent ) {
Scene_BoundsSelectedComponent( GlobalSceneGraph(), bounds );
}
else
{
Scene_BoundsSelected( GlobalSceneGraph(), bounds );
}
//globalOutputStream() << point << "\n";
const float gridsize = GetSnapGridSize();
//const float bbox_epsilon = gridsize / 4.0;
for( std::size_t i = 0; i < 3; i++ ){
if( point[i] < 900000 ){
float bestsnapDist = fabs( bounds.origin[i] - point[i] );
float bestsnapTo = bounds.origin[i];
float othersnapDist = fabs( bounds.origin[i] + bounds.extents[i] - point[i] );
if( othersnapDist < bestsnapDist ){
bestsnapDist = othersnapDist;
bestsnapTo = bounds.origin[i] + bounds.extents[i];
}
othersnapDist = fabs( bounds.origin[i] - bounds.extents[i] - point[i] );
if( othersnapDist < bestsnapDist ){
bestsnapDist = othersnapDist;
bestsnapTo = bounds.origin[i] - bounds.extents[i];
}
othersnapDist = fabs( float_snapped( point[i], gridsize ) - point[i] );
if( othersnapDist < bestsnapDist ){
bestsnapDist = othersnapDist;
bestsnapTo = float_snapped( point[i], gridsize );
}
point[i] = bestsnapTo;
/* if( float_equal_epsilon( point[i], bestsnapTo, bbox_epsilon ) ){
point[i] = bestsnapTo;
}
else{
point[i] = float_snapped( point[i], gridsize );
}
*/
m_pivot2world[i + 12] = point[i]; //m_pivot2world.tx() .ty() .tz()
}
}
switch ( m_manipulator_mode )
{
case eTranslate:
break;
case eRotate:
if ( Mode() == eComponent ) {
matrix4_assign_rotation_for_pivot( m_pivot2world, m_component_selection.back() );
}
else
{
matrix4_assign_rotation_for_pivot( m_pivot2world, m_selection.back() );
}
break;
case eScale:
if ( Mode() == eComponent ) {
matrix4_assign_rotation_for_pivot( m_pivot2world, m_component_selection.back() );
}
else
{
matrix4_assign_rotation_for_pivot( m_pivot2world, m_selection.back() );
}
break;
default:
break;
}
}
m_pivotIsCustom = true;
}
void RadiantSelectionSystem::getSelectionAABB( AABB& bounds ) const {
if ( !nothingSelected() ) {
if ( Mode() == eComponent ) {
Scene_BoundsSelectedComponent( GlobalSceneGraph(), bounds );
}
else
{
Scene_BoundsSelected( GlobalSceneGraph(), bounds );
}
}
}
void GetSelectionAABB( AABB& bounds ){
getSelectionSystem().getSelectionAABB( bounds );
}
const Matrix4& ssGetPivot2World(){
return getSelectionSystem().GetPivot2World();
}
void RadiantSelectionSystem::renderSolid( Renderer& renderer, const VolumeTest& volume ) const {
//if(view->TestPoint(m_object_pivot))
if ( !nothingSelected() ) {
@ -3773,6 +3959,7 @@ void onMouseDown( const WindowVector& position, ButtonIdentifier button, Modifie
void onMouseMotion( const WindowVector& position, ModifierFlags modifiers ){
m_selector.m_mouseMoved = true;
if ( m_mouse_down && !g_mouseMovedCallback.empty() ) {
m_selector.m_mouseMovedWhilePressed = true;
g_mouseMovedCallback.get() ( window_to_normalised_device( position, m_width, m_height ) );
}
}
@ -3783,12 +3970,14 @@ void onMouseUp( const WindowVector& position, ButtonIdentifier button, ModifierF
g_mouseUpCallback.get() ( window_to_normalised_device( position, m_width, m_height ) );
}
//L button w/o scene changed = tunnel selection
if( !getSelectionSystem().m_undo_begun && modifiers == c_modifierNone && button == c_button_select &&
if( // !getSelectionSystem().m_undo_begun &&
modifiers == c_modifierNone && button == c_button_select &&
//( !m_selector.m_mouseMoved || !m_mouse_down ) &&
( GlobalSelectionSystem().Mode() != SelectionSystem::eComponent || GlobalSelectionSystem().ManipulatorMode() != SelectionSystem::eDrag ) ){
!m_selector.m_mouseMovedWhilePressed &&
( getSelectionSystem().Mode() != SelectionSystem::eComponent || getSelectionSystem().ManipulatorMode() != SelectionSystem::eDrag ) ){
m_selector.testSelect_simpleM1( device_constrained( window_to_normalised_device( position, m_width, m_height ) ) );
}
getSelectionSystem().m_undo_begun = false;
//getSelectionSystem().m_undo_begun = false;
m_selector.m_mouseMoved = false;
m_selector.m_mouseMovedWhilePressed = false;
}

View File

@ -1020,7 +1020,7 @@ void TextureBrowser_trackingDelta( int x, int y, unsigned int state, void* data
void TextureBrowser_Tracking_MouseUp( TextureBrowser& textureBrowser ){
textureBrowser.m_move_started = false;
textureBrowser.m_freezePointer.unfreeze_pointer( textureBrowser.m_parent );
textureBrowser.m_freezePointer.unfreeze_pointer( textureBrowser.m_parent, false );
}
void TextureBrowser_Tracking_MouseDown( TextureBrowser& textureBrowser ){
@ -1400,7 +1400,8 @@ gboolean TextureBrowser_button_press( GtkWidget* widget, GdkEventButton* event,
}
else if ( event->type == GDK_2BUTTON_PRESS && event->button == 1 ) {
CopiedString texName = textureBrowser->shader;
const char* sh = texName.c_str();
//const char* sh = texName.c_str();
char* sh = const_cast<char*>( texName.c_str() );
char* dir = strrchr( sh, '/' );
if( dir != NULL ){
*(dir + 1) = '\0';

View File

@ -989,6 +989,18 @@ void XYWnd::Clipper_Crosshair_OnMouseMoved( int x, int y ){
}
}
void XYWnd::SetCustomPivotOrigin( int pointx, int pointy ){
Vector3 point;
XY_ToPoint( pointx, pointy, point );
VIEWTYPE viewtype = static_cast<VIEWTYPE>( GetViewType() );
const int nDim = ( viewtype == YZ ) ? 0 : ( ( viewtype == XZ ) ? 1 : 2 );
//vector3_snap( point, GetSnapGridSize() );
point[nDim] = 999999;
GlobalSelectionSystem().setCustomPivotOrigin( point );
SceneChangeNotify();
}
unsigned int MoveCamera_buttons(){
return RAD_CONTROL | ( g_glwindow_globals.m_nMouseType == ETwoButton ? RAD_RBUTTON : RAD_MBUTTON );
}
@ -1023,6 +1035,10 @@ void XYWnd_OrientCamera( XYWnd* xywnd, int x, int y, CamWnd& camwnd ){
}
}
unsigned int SetCustomPivotOrigin_buttons(){
return RAD_MBUTTON | RAD_SHIFT;
}
/*
==============
NewBrushDrag
@ -1224,7 +1240,7 @@ void XYWnd::Move_Begin(){
void XYWnd::Move_End(){
m_move_started = false;
g_xywnd_freezePointer.unfreeze_pointer( m_parent != 0 ? m_parent : MainFrame_getWindow() );
g_xywnd_freezePointer.unfreeze_pointer( m_parent != 0 ? m_parent : MainFrame_getWindow(), false );
g_signal_handler_disconnect( G_OBJECT( m_gl_widget ), m_move_focusOut );
}
@ -1269,7 +1285,7 @@ void XYWnd::Zoom_Begin(){
void XYWnd::Zoom_End(){
m_zoom_started = false;
g_xywnd_freezePointer.unfreeze_pointer( m_parent != 0 ? m_parent : MainFrame_getWindow() );
g_xywnd_freezePointer.unfreeze_pointer( m_parent != 0 ? m_parent : MainFrame_getWindow(), false );
g_signal_handler_disconnect( G_OBJECT( m_gl_widget ), m_zoom_focusOut );
}
@ -1330,6 +1346,9 @@ void XYWnd::XY_MouseDown( int x, int y, unsigned int buttons ){
else if ( buttons == OrientCamera_buttons() ) {
XYWnd_OrientCamera( this, x, y, *g_pParentWnd->GetCamWnd() );
}
else if ( buttons == SetCustomPivotOrigin_buttons() ) {
SetCustomPivotOrigin( x, y );
}
else
{
m_window_observer->onMouseDown( WindowVector_forInteger( x, y ), button_for_flags( buttons ), modifiers_for_flags( buttons ) );
@ -1387,6 +1406,10 @@ void XYWnd::XY_MouseMoved( int x, int y, unsigned int buttons ){
XYWnd_OrientCamera( this, x, y, *g_pParentWnd->GetCamWnd() );
}
else if ( buttons == SetCustomPivotOrigin_buttons() ) {
SetCustomPivotOrigin( x, y );
}
else
{
m_window_observer->onMouseMotion( WindowVector_forInteger( x, y ), modifiers_for_flags( buttons ) );

View File

@ -143,6 +143,8 @@ void Clipper_OnMouseMoved( int x, int y );
void Clipper_Crosshair_OnMouseMoved( int x, int y );
void DropClipPoint( int pointx, int pointy );
void SetCustomPivotOrigin( int pointx, int pointy );
void SetViewType( VIEWTYPE n );
bool m_bActive;

View File

@ -275,7 +275,7 @@ void vfsListShaderFiles( char* list, int *num ){
}
for ( k = 0; k < *num; k++ ){
if ( !stricmp( list + k*65, dirlist ) ) goto shISdouplicate;
if ( !Q_stricmp( list + k*65, dirlist ) ) goto shISdouplicate;
}
strcpy( list + (*num)*65, dirlist );
(*num)++;
@ -302,7 +302,7 @@ shISdouplicate:
ext++;
for ( k = 0; k < *num; k++ ){
if ( !stricmp( list + k*65, ext ) ) goto shISdouplicate2;
if ( !Q_stricmp( list + k*65, ext ) ) goto shISdouplicate2;
}
strcpy( list + (*num)*65, ext );
(*num)++;
@ -566,3 +566,41 @@ qboolean vfsPackFile( const char *filename, const char *packname, const int comp
return qfalse;
}
qboolean vfsPackFile_Absolute_Path( const char *filepath, const char *filename, const char *packname, const int compLevel ){
char tmp[NAME_MAX];
strcpy( tmp, filepath );
if ( access( tmp, R_OK ) == 0 ) {
if ( access( packname, R_OK ) == 0 ) {
mz_zip_archive zip;
memset( &zip, 0, sizeof(zip) );
mz_zip_reader_init_file( &zip, packname, 0 );
mz_zip_writer_init_from_reader( &zip, packname );
mz_bool success = MZ_TRUE;
success &= mz_zip_writer_add_file( &zip, filename, tmp, 0, 0, compLevel );
if ( !success || !mz_zip_writer_finalize_archive( &zip ) ){
Error( "Failed creating zip archive \"%s\"!\n", packname );
}
mz_zip_reader_end( &zip);
mz_zip_writer_end( &zip );
}
else{
mz_zip_archive zip;
memset( &zip, 0, sizeof(zip) );
if( !mz_zip_writer_init_file( &zip, packname, 0 ) ){
Error( "Failed creating zip archive \"%s\"!\n", packname );
}
mz_bool success = MZ_TRUE;
success &= mz_zip_writer_add_file( &zip, filename, tmp, 0, 0, compLevel );
if ( !success || !mz_zip_writer_finalize_archive( &zip ) ){
Error( "Failed creating zip archive \"%s\"!\n", packname );
}
mz_zip_writer_end( &zip );
}
return qtrue;
}
return qfalse;
}

View File

@ -57,6 +57,7 @@ int vfsGetFileCount( const char *filename );
int vfsLoadFile( const char *filename, void **buffer, int index );
void vfsListShaderFiles( char* list, int *num );
qboolean vfsPackFile( const char *filename, const char *packname, const int compLevel );
qboolean vfsPackFile_Absolute_Path( const char *filepath, const char *filename, const char *packname, const int compLevel );
extern char g_strForbiddenDirs[VFS_MAXDIRS][PATH_MAX + 1];
extern int g_numForbiddenDirs;

View File

@ -1660,10 +1660,10 @@ void tex2list( char* texlist, int *texnum, char* EXtex, int *EXtexnum ){
StripExtension( token );
FixDOSName( token );
for ( i = 0; i < *texnum; i++ ){
if ( !stricmp( texlist + i*65, token ) ) return;
if ( !Q_stricmp( texlist + i*65, token ) ) return;
}
for ( i = 0; i < *EXtexnum; i++ ){
if ( !stricmp( EXtex + i*65, token ) ) return;
if ( !Q_stricmp( EXtex + i*65, token ) ) return;
}
strcpy ( texlist + (*texnum)*65, token );
(*texnum)++;
@ -1677,7 +1677,7 @@ void tex2list2( char* texlist, int *texnum, char* EXtex, int *EXtexnum, char* rE
//StripExtension( token );
char* dot = strrchr( token, '.' );
if ( dot != NULL){
if ( stricmp( dot, ".tga" ) && stricmp( dot, ".jpg" ) && stricmp( dot, ".png" ) ){
if ( Q_stricmp( dot, ".tga" ) && Q_stricmp( dot, ".jpg" ) && Q_stricmp( dot, ".png" ) ){
Sys_Printf( "WARNING4: %s : weird or missing extension in shader\n", token );
}
else{
@ -1690,13 +1690,13 @@ void tex2list2( char* texlist, int *texnum, char* EXtex, int *EXtexnum, char* rE
/* exclude */
for ( i = 0; i < *texnum; i++ ){
if ( !stricmp( texlist + i*65, texlist + (*texnum)*65 ) ) return;
if ( !Q_stricmp( texlist + i*65, texlist + (*texnum)*65 ) ) return;
}
for ( i = 0; i < *EXtexnum; i++ ){
if ( !stricmp( EXtex + i*65, texlist + (*texnum)*65 ) ) return;
if ( !Q_stricmp( EXtex + i*65, texlist + (*texnum)*65 ) ) return;
}
for ( i = 0; i < *rEXtexnum; i++ ){
if ( !stricmp( rEXtex + i*65, texlist + (*texnum)*65 ) ) return;
if ( !Q_stricmp( rEXtex + i*65, texlist + (*texnum)*65 ) ) return;
}
(*texnum)++;
return;
@ -1717,7 +1717,7 @@ void res2list( char* data, int *num ){
}
if ( *( data + (*num)*65 ) == '\0') return;
for ( i = 0; i < *num; i++ ){
if ( !stricmp( data + i*65, data + (*num)*65 ) ) return;
if ( !Q_stricmp( data + i*65, data + (*num)*65 ) ) return;
}
(*num)++;
return;
@ -1825,7 +1825,7 @@ int pk3BSPMain( int argc, char **argv ){
epair_t *ep;
for ( ep = entities[0].epairs; ep != NULL; ep = ep->next )
{
if ( !strnicmp( ep->key, "vertexremapshader", 17 ) ) {
if ( !Q_strncasecmp( ep->key, "vertexremapshader", 17 ) ) {
sscanf( ep->value, "%*[^;] %*[;] %s", pk3Shaders + pk3ShadersN*65 );
res2list( pk3Shaders, &pk3ShadersN );
}
@ -1846,13 +1846,13 @@ int pk3BSPMain( int argc, char **argv ){
res2list( pk3Sounds, &pk3SoundsN );
}
if ( !stricmp( ValueForKey( &entities[i], "classname" ), "func_plat" ) ){
if ( !Q_stricmp( ValueForKey( &entities[i], "classname" ), "func_plat" ) ){
strcpy( pk3Sounds + pk3SoundsN*65, "sound/movers/plats/pt1_strt.wav");
res2list( pk3Sounds, &pk3SoundsN );
strcpy( pk3Sounds + pk3SoundsN*65, "sound/movers/plats/pt1_end.wav");
res2list( pk3Sounds, &pk3SoundsN );
}
if ( !stricmp( ValueForKey( &entities[i], "classname" ), "target_push" ) ){
if ( !Q_stricmp( ValueForKey( &entities[i], "classname" ), "target_push" ) ){
if ( !(IntForKey( &entities[i], "spawnflags") & 1) ){
strcpy( pk3Sounds + pk3SoundsN*65, "sound/misc/windfly.wav");
res2list( pk3Sounds, &pk3SoundsN );
@ -1940,19 +1940,19 @@ int pk3BSPMain( int argc, char **argv ){
}
/* blocks */
if ( !stricmp( token, "textures" ) ){
if ( !Q_stricmp( token, "textures" ) ){
parseEXblock ( ExTextures, &ExTexturesN, exName );
}
else if ( !stricmp( token, "shaders" ) ){
else if ( !Q_stricmp( token, "shaders" ) ){
parseEXblock ( ExShaders, &ExShadersN, exName );
}
else if ( !stricmp( token, "shaderfiles" ) ){
else if ( !Q_stricmp( token, "shaderfiles" ) ){
parseEXblock ( ExShaderfiles, &ExShaderfilesN, exName );
}
else if ( !stricmp( token, "sounds" ) ){
else if ( !Q_stricmp( token, "sounds" ) ){
parseEXblock ( ExSounds, &ExSoundsN, exName );
}
else if ( !stricmp( token, "videos" ) ){
else if ( !Q_stricmp( token, "videos" ) ){
parseEXblock ( ExVideos, &ExVideosN, exName );
}
else{
@ -1965,7 +1965,7 @@ int pk3BSPMain( int argc, char **argv ){
for ( i = 0; i < ExTexturesN; i++ ){
for ( j = 0; j < ExShadersN; j++ ){
if ( !stricmp( ExTextures + i*65, ExShaders + j*65 ) ){
if ( !Q_stricmp( ExTextures + i*65, ExShaders + j*65 ) ){
break;
}
}
@ -1995,7 +1995,7 @@ skipEXfile:
/* can exclude pure textures right now, shouldn't create shaders for them anyway */
for ( i = 0; i < pk3ShadersN ; i++ ){
for ( j = 0; j < ExPureTexturesN ; j++ ){
if ( !stricmp( pk3Shaders + i*65, ExPureTextures + j*65 ) ){
if ( !Q_stricmp( pk3Shaders + i*65, ExPureTextures + j*65 ) ){
*( pk3Shaders + i*65 ) = '\0';
break;
}
@ -2019,7 +2019,7 @@ skipEXfile:
/* do wanna le shader file? */
for ( j = 0; j < ExShaderfilesN; j++ ){
if ( !stricmp( ExShaderfiles + j*65, pk3Shaderfiles + i*65 ) ){
if ( !Q_stricmp( ExShaderfiles + j*65, pk3Shaderfiles + i*65 ) ){
ShaderFileExcluded = qtrue;
reasonShaderFile = ExShaderfiles + j*65;
break;
@ -2036,7 +2036,7 @@ skipEXfile:
/* does it contain restricted shaders/textures? */
for ( j = 0; j < ExShadersN; j++ ){
if ( !stricmp( ExShaders + j*65, token ) ){
if ( !Q_stricmp( ExShaders + j*65, token ) ){
ShaderFileExcluded = qtrue;
reasonShader = ExShaders + j*65;
break;
@ -2045,7 +2045,7 @@ skipEXfile:
if ( ShaderFileExcluded )
break;
for ( j = 0; j < ExPureTexturesN; j++ ){
if ( !stricmp( ExPureTextures + j*65, token ) ){
if ( !Q_stricmp( ExPureTextures + j*65, token ) ){
ShaderFileExcluded = qtrue;
reasonShader = ExPureTextures + j*65;
break;
@ -2101,7 +2101,7 @@ skipEXfile:
/* do wanna le shader? */
wantShader = qfalse;
for ( j = 0; j < pk3ShadersN; j++ ){
if ( !stricmp( pk3Shaders + j*65, token) ){
if ( !Q_stricmp( pk3Shaders + j*65, token) ){
shader = j;
wantShader = qtrue;
break;
@ -2146,15 +2146,15 @@ skipEXfile:
if ( !strcmp( token, "{" ) ) {
Sys_Printf( "WARNING9: %s : line %d : opening brace inside shader stage\n", temp, scriptline );
}
if ( !stricmp( token, "mapComp" ) || !stricmp( token, "mapNoComp" ) || !stricmp( token, "animmapcomp" ) || !stricmp( token, "animmapnocomp" ) ){
if ( !Q_stricmp( token, "mapComp" ) || !Q_stricmp( token, "mapNoComp" ) || !Q_stricmp( token, "animmapcomp" ) || !Q_stricmp( token, "animmapnocomp" ) ){
Sys_Printf( "WARNING7: %s : line %d : unsupported '%s' map directive\n", temp, scriptline, token );
}
/* skip the shader */
if ( !wantShader ) continue;
/* digest any images */
if ( !stricmp( token, "map" ) ||
!stricmp( token, "clampMap" ) ) {
if ( !Q_stricmp( token, "map" ) ||
!Q_stricmp( token, "clampMap" ) ) {
hasmap = qtrue;
/* get an image */
GetToken( qfalse );
@ -2162,8 +2162,8 @@ skipEXfile:
tex2list( pk3Textures, &pk3TexturesN, ExTextures, &ExTexturesN );
}
}
else if ( !stricmp( token, "animMap" ) ||
!stricmp( token, "clampAnimMap" ) ) {
else if ( !Q_stricmp( token, "animMap" ) ||
!Q_stricmp( token, "clampAnimMap" ) ) {
hasmap = qtrue;
GetToken( qfalse );// skip num
while ( TokenAvailable() ){
@ -2171,7 +2171,7 @@ skipEXfile:
tex2list( pk3Textures, &pk3TexturesN, ExTextures, &ExTexturesN );
}
}
else if ( !stricmp( token, "videoMap" ) ){
else if ( !Q_stricmp( token, "videoMap" ) ){
hasmap = qtrue;
GetToken( qfalse );
FixDOSName( token );
@ -2181,12 +2181,12 @@ skipEXfile:
}
FixDOSName( token );
for ( j = 0; j < pk3VideosN; j++ ){
if ( !stricmp( pk3Videos + j*65, token ) ){
if ( !Q_stricmp( pk3Videos + j*65, token ) ){
goto away;
}
}
for ( j = 0; j < ExVideosN; j++ ){
if ( !stricmp( ExVideos + j*65, token ) ){
if ( !Q_stricmp( ExVideos + j*65, token ) ){
goto away;
}
}
@ -2197,7 +2197,7 @@ skipEXfile:
}
}
}
else if ( !strnicmp( token, "implicit", 8 ) ){
else if ( !Q_strncasecmp( token, "implicit", 8 ) ){
Sys_Printf( "WARNING5: %s : line %d : unsupported %s shader\n", temp, scriptline, token );
}
/* skip the shader */
@ -2208,22 +2208,22 @@ skipEXfile:
----------------------------------------------------------------- */
/* match surfaceparm */
else if ( !stricmp( token, "surfaceparm" ) ) {
else if ( !Q_stricmp( token, "surfaceparm" ) ) {
GetToken( qfalse );
if ( !stricmp( token, "nodraw" ) ) {
if ( !Q_stricmp( token, "nodraw" ) ) {
wantShader = qfalse;
*( pk3Shaders + shader*65 ) = '\0';
}
}
/* skyparms <outer image> <cloud height> <inner image> */
else if ( !stricmp( token, "skyParms" ) ) {
else if ( !Q_stricmp( token, "skyParms" ) ) {
hasmap = qtrue;
/* get image base */
GetToken( qfalse );
/* ignore bogus paths */
if ( stricmp( token, "-" ) && stricmp( token, "full" ) ) {
if ( Q_stricmp( token, "-" ) && Q_stricmp( token, "full" ) ) {
strcpy ( temp, token );
sprintf( token, "%s_up", temp );
tex2list( pk3Textures, &pk3TexturesN, ExTextures, &ExTexturesN );
@ -2242,7 +2242,7 @@ skipEXfile:
GetToken( qfalse );
GetToken( qfalse );
}
else if ( !stricmp( token, "fogparms" ) ){
else if ( !Q_stricmp( token, "fogparms" ) ){
hasmap = qtrue;
}
}
@ -2250,7 +2250,7 @@ skipEXfile:
//exclude shader
if ( wantShader ){
for ( j = 0; j < ExShadersN; j++ ){
if ( !stricmp( ExShaders + j*65, pk3Shaders + shader*65 ) ){
if ( !Q_stricmp( ExShaders + j*65, pk3Shaders + shader*65 ) ){
wantShader = qfalse;
*( pk3Shaders + shader*65 ) = '\0';
break;
@ -2305,14 +2305,14 @@ skipEXfile:
if ( *( pk3Shaders + i*65 ) != '\0' ){
FixDOSName( pk3Shaders + i*65 );
for ( j = 0; j < pk3TexturesN; j++ ){
if ( !stricmp( pk3Shaders + i*65, pk3Textures + j*65 ) ){
if ( !Q_stricmp( pk3Shaders + i*65, pk3Textures + j*65 ) ){
*( pk3Shaders + i*65 ) = '\0';
break;
}
}
if ( *( pk3Shaders + i*65 ) == '\0' ) continue;
for ( j = 0; j < ExTexturesN; j++ ){
if ( !stricmp( pk3Shaders + i*65, ExTextures + j*65 ) ){
if ( !Q_stricmp( pk3Shaders + i*65, ExTextures + j*65 ) ){
*( pk3Shaders + i*65 ) = '\0';
break;
}
@ -2323,7 +2323,7 @@ skipEXfile:
//snds
for ( i = 0; i < pk3SoundsN; i++ ){
for ( j = 0; j < ExSoundsN; j++ ){
if ( !stricmp( pk3Sounds + i*65, ExSounds + j*65 ) ){
if ( !Q_stricmp( pk3Sounds + i*65, ExSounds + j*65 ) ){
*( pk3Sounds + i*65 ) = '\0';
break;
}
@ -2429,7 +2429,8 @@ skipEXfile:
Sys_Printf( "\n\t.bsp and stuff\n" );
sprintf( temp, "maps/%s.bsp", nameOFmap );
if ( vfsPackFile( temp, packname, 10 ) ){
//if ( vfsPackFile( temp, packname, 10 ) ){
if ( vfsPackFile_Absolute_Path( source, temp, packname, 10 ) ){
Sys_Printf( "++%s\n", temp );
}
else{
@ -2550,19 +2551,19 @@ int repackBSPMain( int argc, char **argv ){
}
/* blocks */
if ( !stricmp( token, "textures" ) ){
if ( !Q_stricmp( token, "textures" ) ){
parseEXblock ( ExTextures, &ExTexturesN, exName );
}
else if ( !stricmp( token, "shaders" ) ){
else if ( !Q_stricmp( token, "shaders" ) ){
parseEXblock ( ExShaders, &ExShadersN, exName );
}
else if ( !stricmp( token, "shaderfiles" ) ){
else if ( !Q_stricmp( token, "shaderfiles" ) ){
parseEXblock ( ExShaderfiles, &ExShaderfilesN, exName );
}
else if ( !stricmp( token, "sounds" ) ){
else if ( !Q_stricmp( token, "sounds" ) ){
parseEXblock ( ExSounds, &ExSoundsN, exName );
}
else if ( !stricmp( token, "videos" ) ){
else if ( !Q_stricmp( token, "videos" ) ){
parseEXblock ( ExVideos, &ExVideosN, exName );
}
else{
@ -2575,7 +2576,7 @@ int repackBSPMain( int argc, char **argv ){
for ( i = 0; i < ExTexturesN; i++ ){
for ( j = 0; j < ExShadersN; j++ ){
if ( !stricmp( ExTextures + i*65, ExShaders + j*65 ) ){
if ( !Q_stricmp( ExTextures + i*65, ExShaders + j*65 ) ){
break;
}
}
@ -2647,19 +2648,19 @@ skipEXfile:
}
/* blocks */
if ( !stricmp( token, "textures" ) ){
if ( !Q_stricmp( token, "textures" ) ){
parseEXblock ( rExTextures, &rExTexturesN, exName );
}
else if ( !stricmp( token, "shaders" ) ){
else if ( !Q_stricmp( token, "shaders" ) ){
parseEXblock ( rExShaders, &rExShadersN, exName );
}
else if ( !stricmp( token, "shaderfiles" ) ){
else if ( !Q_stricmp( token, "shaderfiles" ) ){
parseEXblock ( rExShaderfiles, &rExShaderfilesN, exName );
}
else if ( !stricmp( token, "sounds" ) ){
else if ( !Q_stricmp( token, "sounds" ) ){
parseEXblock ( rExSounds, &rExSoundsN, exName );
}
else if ( !stricmp( token, "videos" ) ){
else if ( !Q_stricmp( token, "videos" ) ){
parseEXblock ( rExVideos, &rExVideosN, exName );
}
else{
@ -2693,7 +2694,7 @@ skipEXrefile:
/* do some path mangling */
strcpy( source, ExpandArg( argv[ argc - 1 ] ) );
if ( !stricmp( strrchr( source, '.' ), ".bsp" ) ){
if ( !Q_stricmp( strrchr( source, '.' ), ".bsp" ) ){
strcpy( bspList, source );
bspListN++;
}
@ -2790,7 +2791,7 @@ skipEXrefile:
epair_t *ep;
for ( ep = entities[0].epairs; ep != NULL; ep = ep->next )
{
if ( !strnicmp( ep->key, "vertexremapshader", 17 ) ) {
if ( !Q_strncasecmp( ep->key, "vertexremapshader", 17 ) ) {
sscanf( ep->value, "%*[^;] %*[;] %s", pk3Shaders + pk3ShadersN*65 );
res2list( pk3Shaders, &pk3ShadersN );
}
@ -2811,13 +2812,13 @@ skipEXrefile:
res2list( pk3Sounds, &pk3SoundsN );
}
if ( !stricmp( ValueForKey( &entities[i], "classname" ), "func_plat" ) ){
if ( !Q_stricmp( ValueForKey( &entities[i], "classname" ), "func_plat" ) ){
strcpy( pk3Sounds + pk3SoundsN*65, "sound/movers/plats/pt1_strt.wav");
res2list( pk3Sounds, &pk3SoundsN );
strcpy( pk3Sounds + pk3SoundsN*65, "sound/movers/plats/pt1_end.wav");
res2list( pk3Sounds, &pk3SoundsN );
}
if ( !stricmp( ValueForKey( &entities[i], "classname" ), "target_push" ) ){
if ( !Q_stricmp( ValueForKey( &entities[i], "classname" ), "target_push" ) ){
if ( !(IntForKey( &entities[i], "spawnflags") & 1) ){
strcpy( pk3Sounds + pk3SoundsN*65, "sound/misc/windfly.wav");
res2list( pk3Sounds, &pk3SoundsN );
@ -2988,7 +2989,7 @@ skipEXrefile:
/* can exclude pure *base* textures right now, shouldn't create shaders for them anyway */
for ( i = 0; i < pk3ShadersN ; i++ ){
for ( j = 0; j < ExPureTexturesN ; j++ ){
if ( !stricmp( pk3Shaders + i*65, ExPureTextures + j*65 ) ){
if ( !Q_stricmp( pk3Shaders + i*65, ExPureTextures + j*65 ) ){
*( pk3Shaders + i*65 ) = '\0';
break;
}
@ -2997,7 +2998,7 @@ skipEXrefile:
/* can exclude repack.exclude shaders, assuming they got all their images */
for ( i = 0; i < pk3ShadersN ; i++ ){
for ( j = 0; j < rExShadersN ; j++ ){
if ( !stricmp( pk3Shaders + i*65, rExShaders + j*65 ) ){
if ( !Q_stricmp( pk3Shaders + i*65, rExShaders + j*65 ) ){
*( pk3Shaders + i*65 ) = '\0';
break;
}
@ -3040,7 +3041,7 @@ skipEXrefile:
/* do wanna le shader? */
wantShader = qfalse;
for ( j = 0; j < pk3ShadersN; j++ ){
if ( !stricmp( pk3Shaders + j*65, token) ){
if ( !Q_stricmp( pk3Shaders + j*65, token) ){
shader = j;
wantShader = qtrue;
break;
@ -3048,7 +3049,7 @@ skipEXrefile:
}
if ( wantShader ){
for ( j = 0; j < rExTexturesN ; j++ ){
if ( !stricmp( pk3Shaders + shader*65, rExTextures + j*65 ) ){
if ( !Q_stricmp( pk3Shaders + shader*65, rExTextures + j*65 ) ){
Sys_Printf( "WARNING3: %s : about to include shader for excluded texture\n", pk3Shaders + shader*65 );
break;
}
@ -3101,8 +3102,8 @@ skipEXrefile:
if ( !wantShader ) continue;
/* digest any images */
if ( !stricmp( token, "map" ) ||
!stricmp( token, "clampMap" ) ) {
if ( !Q_stricmp( token, "map" ) ||
!Q_stricmp( token, "clampMap" ) ) {
strcat( shaderText, "\n\t\t" );
strcat( shaderText, token );
hasmap = qtrue;
@ -3115,8 +3116,8 @@ skipEXrefile:
strcat( shaderText, " " );
strcat( shaderText, token );
}
else if ( !stricmp( token, "animMap" ) ||
!stricmp( token, "clampAnimMap" ) ) {
else if ( !Q_stricmp( token, "animMap" ) ||
!Q_stricmp( token, "clampAnimMap" ) ) {
strcat( shaderText, "\n\t\t" );
strcat( shaderText, token );
hasmap = qtrue;
@ -3132,7 +3133,7 @@ skipEXrefile:
}
tokenready = qtrue;
}
else if ( !stricmp( token, "videoMap" ) ){
else if ( !Q_stricmp( token, "videoMap" ) ){
strcat( shaderText, "\n\t\t" );
strcat( shaderText, token );
hasmap = qtrue;
@ -3146,17 +3147,17 @@ skipEXrefile:
}
FixDOSName( token );
for ( j = 0; j < pk3VideosN; j++ ){
if ( !stricmp( pk3Videos + j*65, token ) ){
if ( !Q_stricmp( pk3Videos + j*65, token ) ){
goto away;
}
}
for ( j = 0; j < ExVideosN; j++ ){
if ( !stricmp( ExVideos + j*65, token ) ){
if ( !Q_stricmp( ExVideos + j*65, token ) ){
goto away;
}
}
for ( j = 0; j < rExVideosN; j++ ){
if ( !stricmp( rExVideos + j*65, token ) ){
if ( !Q_stricmp( rExVideos + j*65, token ) ){
goto away;
}
}
@ -3165,7 +3166,7 @@ skipEXrefile:
away:
j = 0;
}
else if ( !stricmp( token, "mapComp" ) || !stricmp( token, "mapNoComp" ) || !stricmp( token, "animmapcomp" ) || !stricmp( token, "animmapnocomp" ) ){
else if ( !Q_stricmp( token, "mapComp" ) || !Q_stricmp( token, "mapNoComp" ) || !Q_stricmp( token, "animmapcomp" ) || !Q_stricmp( token, "animmapnocomp" ) ){
Sys_Printf( "WARNING7: %s : %s shader\n", pk3Shaders + shader*65, token );
hasmap = qtrue;
if ( line == scriptline ){
@ -3195,18 +3196,18 @@ skipEXrefile:
----------------------------------------------------------------- */
/* match surfaceparm */
else if ( !stricmp( token, "surfaceparm" ) ) {
else if ( !Q_stricmp( token, "surfaceparm" ) ) {
strcat( shaderText, "\n\tsurfaceparm " );
GetToken( qfalse );
strcat( shaderText, token );
if ( !stricmp( token, "nodraw" ) ) {
if ( !Q_stricmp( token, "nodraw" ) ) {
wantShader = qfalse;
*( pk3Shaders + shader*65 ) = '\0';
}
}
/* skyparms <outer image> <cloud height> <inner image> */
else if ( !stricmp( token, "skyParms" ) ) {
else if ( !Q_stricmp( token, "skyParms" ) ) {
strcat( shaderText, "\n\tskyParms " );
hasmap = qtrue;
/* get image base */
@ -3214,7 +3215,7 @@ skipEXrefile:
strcat( shaderText, token );
/* ignore bogus paths */
if ( stricmp( token, "-" ) && stricmp( token, "full" ) ) {
if ( Q_stricmp( token, "-" ) && Q_stricmp( token, "full" ) ) {
strcpy ( temp, token );
sprintf( token, "%s_up", temp );
tex2list2( pk3Textures, &pk3TexturesN, ExTextures, &ExTexturesN, rExTextures, &rExTexturesN );
@ -3237,7 +3238,7 @@ skipEXrefile:
strcat( shaderText, " " );
strcat( shaderText, token );
}
else if ( !strnicmp( token, "implicit", 8 ) ){
else if ( !Q_strncasecmp( token, "implicit", 8 ) ){
Sys_Printf( "WARNING5: %s : %s shader\n", pk3Shaders + shader*65, token );
hasmap = qtrue;
if ( line == scriptline ){
@ -3249,7 +3250,7 @@ skipEXrefile:
strcat( shaderText, token );
}
}
else if ( !stricmp( token, "fogparms" ) ){
else if ( !Q_stricmp( token, "fogparms" ) ){
hasmap = qtrue;
if ( line == scriptline ){
strcat( shaderText, " " );
@ -3273,7 +3274,7 @@ skipEXrefile:
//exclude shader
if ( wantShader ){
for ( j = 0; j < ExShadersN; j++ ){
if ( !stricmp( ExShaders + j*65, pk3Shaders + shader*65 ) ){
if ( !Q_stricmp( ExShaders + j*65, pk3Shaders + shader*65 ) ){
wantShader = qfalse;
*( pk3Shaders + shader*65 ) = '\0';
break;
@ -3304,7 +3305,7 @@ skipEXrefile:
FixDOSName( pk3Shaders + i*65 );
//what if theres properly slashed one in the list?
for ( j = 0; j < pk3ShadersN; j++ ){
if ( !stricmp( pk3Shaders + i*65, pk3Shaders + j*65 ) && (i != j) ){
if ( !Q_stricmp( pk3Shaders + i*65, pk3Shaders + j*65 ) && (i != j) ){
*( pk3Shaders + i*65 ) = '\0';
break;
}
@ -3312,21 +3313,21 @@ skipEXrefile:
}
if ( *( pk3Shaders + i*65 ) == '\0' ) continue;
for ( j = 0; j < pk3TexturesN; j++ ){
if ( !stricmp( pk3Shaders + i*65, pk3Textures + j*65 ) ){
if ( !Q_stricmp( pk3Shaders + i*65, pk3Textures + j*65 ) ){
*( pk3Shaders + i*65 ) = '\0';
break;
}
}
if ( *( pk3Shaders + i*65 ) == '\0' ) continue;
for ( j = 0; j < ExTexturesN; j++ ){
if ( !stricmp( pk3Shaders + i*65, ExTextures + j*65 ) ){
if ( !Q_stricmp( pk3Shaders + i*65, ExTextures + j*65 ) ){
*( pk3Shaders + i*65 ) = '\0';
break;
}
}
if ( *( pk3Shaders + i*65 ) == '\0' ) continue;
for ( j = 0; j < rExTexturesN; j++ ){
if ( !stricmp( pk3Shaders + i*65, rExTextures + j*65 ) ){
if ( !Q_stricmp( pk3Shaders + i*65, rExTextures + j*65 ) ){
*( pk3Shaders + i*65 ) = '\0';
break;
}
@ -3337,14 +3338,14 @@ skipEXrefile:
//snds
for ( i = 0; i < pk3SoundsN; i++ ){
for ( j = 0; j < ExSoundsN; j++ ){
if ( !stricmp( pk3Sounds + i*65, ExSounds + j*65 ) ){
if ( !Q_stricmp( pk3Sounds + i*65, ExSounds + j*65 ) ){
*( pk3Sounds + i*65 ) = '\0';
break;
}
}
if ( *( pk3Sounds + i*65 ) == '\0' ) continue;
for ( j = 0; j < rExSoundsN; j++ ){
if ( !stricmp( pk3Sounds + i*65, rExSounds + j*65 ) ){
if ( !Q_stricmp( pk3Sounds + i*65, rExSounds + j*65 ) ){
*( pk3Sounds + i*65 ) = '\0';
break;
}