Project

General

Profile

« Previous | Next » 

Revision 3788d0cd

Added by Leszek Koltunski about 1 year ago

Speedups for setupPosition(). Now the 587 moves of the Burr Cube is getting done visibly faster.

View differences:

src/main/java/org/distorted/objectlib/main/TwistyObject.java
158 158
  private int mNumAxis;
159 159
  private int mPointNum;
160 160
  private int mRotationState;
161
  private boolean mThereAreDeciders;
161 162

  
162 163
///////////////////////////////////////////////////////////////////////////////////////////////////
163 164

  
......
473 474
      {
474 475
      mCubits[i] = new TwistyObjectCubit(this,mOrigPos[i],mNumAxis,mMaxNumLayers,i);
475 476
      setCubitQuat(i,mCubits[i].computeAssociation(),0);
477

  
478
      if( !mThereAreDeciders && mCubits[i].getType()==TwistyObjectCubit.TYPE_DECIDER )
479
        {
480
        mThereAreDeciders = true;
481
        }
476 482
      }
477 483
    }
478 484

  
......
932 938
          mBelongs[i] = belongsToRotation(i,axisIndex,banBitmap);
933 939
          if( mBelongs[i] )
934 940
            {
935
            boolean result = mCubits[i].rotateCubit(quat);
941
            boolean result = mCubits[i].rotateCubit(quat,false);
936 942
            if( !result ) debugQuat(quat,i,axisX,axisY,axisZ,angle,1);
937 943
            }
938 944
          }
......
953 959
            }
954 960
          }
955 961
        }
962

  
963
      for(int i=0; i<mNumCubits; i++)
964
        {
965
        float[] pos = mCubits[i].getCurrentPos();
966
        int len = pos.length/3;
967
        for(int j=0; j<len; j++) clampPos(pos,3*j);
968
        }
956 969
      }
957 970
    }
958 971

  
......
1097 1110
      mBelongs[i] = belongsToRotation(i, mCurrentRotAxis,mRotRowBitmap);
1098 1111
      if( mBelongs[i] )
1099 1112
        {
1100
        boolean result = mCubits[i].rotateCubit(quat);
1113
        boolean result = mCubits[i].rotateCubit(quat,true);
1101 1114
        if( !result ) debugQuat(quat,i,axisX,axisY,axisZ,angle,2);
1102 1115
        }
1103 1116
      }
......
1125 1138

  
1126 1139
  private void recomputeFaceOffsets()
1127 1140
    {
1128
    for(int i=0; i<mNumPuzzleFaces; i++)
1141
    if( mThereAreDeciders )
1129 1142
      {
1130
      mRowOffsets[i][0] =0;
1131
      mRowOffsets[i][1] =0;
1132
      mRowOffsets[i][2] =0;
1133
      }
1134

  
1135
    for(int i=0; i<mNumCubits; i++)
1136
      if( mCubits[i].getType()==TwistyObjectCubit.TYPE_DECIDER )
1143
      for(int i=0; i<mNumPuzzleFaces; i++)
1137 1144
        {
1138
        float[] offset = mCubits[i].getOffset();
1139
        int face = mCubits[i].getPuzzleFace();
1140
        mRowOffsets[face][0] = offset[0];
1141
        mRowOffsets[face][1] = offset[1];
1142
        mRowOffsets[face][2] = offset[2];
1145
        mRowOffsets[i][0] =0;
1146
        mRowOffsets[i][1] =0;
1147
        mRowOffsets[i][2] =0;
1143 1148
        }
1149

  
1150
      for(int i=0; i<mNumCubits; i++)
1151
        if( mCubits[i].getType()==TwistyObjectCubit.TYPE_DECIDER )
1152
          {
1153
          float[] offset = mCubits[i].getOffset();
1154
          int face = mCubits[i].getPuzzleFace();
1155
          mRowOffsets[face][0] = offset[0];
1156
          mRowOffsets[face][1] = offset[1];
1157
          mRowOffsets[face][2] = offset[2];
1158
          }
1159
      }
1144 1160
    }
1145 1161

  
1146 1162
///////////////////////////////////////////////////////////////////////////////////////////////////
......
1380 1396

  
1381 1397
      if( mQuatDebug[i]>=0 && mQuatDebug[i]<mNumQuats )
1382 1398
        {
1383
        boolean result = mCubits[i].rotateCubit(mObjectQuats[mQuatDebug[i]]);
1399
        boolean result = mCubits[i].rotateCubit(mObjectQuats[mQuatDebug[i]],true);
1384 1400
        if( !result ) debugQuat(mObjectQuats[mQuatDebug[i]],i,0,0,0,mQuatDebug[i],3);
1385 1401
        }
1386 1402
      else { error = true; break; }

Also available in: Unified diff