Project

General

Profile

« Previous | Next » 

Revision 1ef59b1d

Added by Leszek Koltunski about 2 years ago

Bandaged 3x3: correct a bug in TwistyBandagedAbstract

View differences:

src/main/java/org/distorted/objectlib/objects/TwistyBandagedAbstract.java
98 98

  
99 99
///////////////////////////////////////////////////////////////////////////////////////////////////
100 100

  
101
  private int getType(float[] position)
101
  private int getType(float[] pos)
102 102
    {
103
    switch(position.length)
103
    switch(pos.length)
104 104
      {
105 105
      case  3: return CUBIT_111;
106 106
      case  6: return CUBIT_211;
107
      case  9: boolean x1 = (position[0]==position[3] && position[0]==position[6]);
108
               boolean y1 = (position[1]==position[4] && position[1]==position[7]);
109
               boolean z1 = (position[2]==position[5] && position[2]==position[8]);
107
      case  9: boolean x1 = (pos[0]==pos[3] && pos[0]==pos[6]);
108
               boolean y1 = (pos[1]==pos[4] && pos[1]==pos[7]);
109
               boolean z1 = (pos[2]==pos[5] && pos[2]==pos[8]);
110 110
               return ( (x1&&y1) || (x1&&z1) || (y1&&z1) ) ? CUBIT_311 : CUBIT_OTH;
111
      case 12: boolean x2 = (position[0]==position[3] && position[0]==position[6] && position[0]==position[ 9]);
112
               boolean y2 = (position[1]==position[4] && position[1]==position[7] && position[1]==position[10]);
113
               boolean z2 = (position[2]==position[5] && position[2]==position[8] && position[2]==position[11]);
114
               return ( x2 || y2 || z2 ) ? CUBIT_221 : CUBIT_OTH;
115
      case 24: float x3 = position[0];
116
               float y3 = position[1];
117
               float z3 = position[2];
111
      case 12: float x = (pos[0]+pos[3]+pos[6]+pos[ 9])/4;
112
               float y = (pos[1]+pos[4]+pos[7]+pos[10])/4;
113
               float z = (pos[2]+pos[5]+pos[8]+pos[11])/4;
114
               float d1 = (pos[0]-x)*(pos[0]-x) + (pos[ 1]-y)*(pos[ 1]-y) + (pos[ 2]-z)*(pos[ 2]-z);
115
               float d2 = (pos[3]-x)*(pos[3]-x) + (pos[ 4]-y)*(pos[ 4]-y) + (pos[ 5]-z)*(pos[ 5]-z);
116
               float d3 = (pos[6]-x)*(pos[6]-x) + (pos[ 7]-y)*(pos[ 7]-y) + (pos[ 8]-z)*(pos[ 8]-z);
117
               float d4 = (pos[9]-x)*(pos[9]-x) + (pos[10]-y)*(pos[10]-y) + (pos[11]-z)*(pos[11]-z);
118
               return ( d1==0.5f && d2==0.5f && d3==0.5f && d4==0.5f ) ? CUBIT_221 : CUBIT_OTH;
119
      case 24: float x3 = pos[0];
120
               float y3 = pos[1];
121
               float z3 = pos[2];
118 122
               float x4=-10,y4=-10,z4=-10;
119 123
               int i;
120 124

  
121 125
               for(i=0; i<8; i++)
122 126
                 {
123
                 if( position[3*i]!=x3 && position[3*i+1]!=y3 && position[3*i+2]!=z3 )
127
                 if( pos[3*i]!=x3 && pos[3*i+1]!=y3 && pos[3*i+2]!=z3 )
124 128
                   {
125
                   x4 = position[3*i  ];
126
                   y4 = position[3*i+1];
127
                   z4 = position[3*i+2];
129
                   x4 = pos[3*i  ];
130
                   y4 = pos[3*i+1];
131
                   z4 = pos[3*i+2];
128 132
                   break;
129 133
                   }
130 134
                 }
......
138 142
                 {
139 143
                 for(i=0; i<8; i++)
140 144
                   {
141
                   if( (position[3*i  ]!=x3 && position[3*i  ]!=x4) ||
142
                       (position[3*i+1]!=y3 && position[3*i+1]!=y4) ||
143
                       (position[3*i+2]!=z3 && position[3*i+2]!=z4)  ) return CUBIT_OTH;
145
                   if( (pos[3*i  ]!=x3 && pos[3*i  ]!=x4) ||
146
                       (pos[3*i+1]!=y3 && pos[3*i+1]!=y4) ||
147
                       (pos[3*i+2]!=z3 && pos[3*i+2]!=z4)  ) return CUBIT_OTH;
144 148
                   }
145 149

  
146 150
                 return CUBIT_222;

Also available in: Unified diff