| 151 | } |
| 152 | |
| 153 | void Island::setupGeometry() |
| 154 | { |
| 155 | CI_ASSERT( mOuterVerts.size() == 6 && mInnerVerts.size() == 5 ); |
| 156 | |
| 157 | // create the body of the island |
| 158 | { |
| 159 | Path2d path; |
| 160 | path.moveTo( mOuterVerts[0] ); |
| 161 | for( int i = 1; i < mOuterVerts.size(); ++i ) |
| 162 | path.lineTo( mOuterVerts[i] ); |
| 163 | |
| 164 | mBatchBody = gl::Batch::create( Triangulator( path ).calcMesh(), gl::getStockShader( gl::ShaderDef().color() ) ); |
| 165 | } |
| 166 | |
| 167 | mBumpers.clear(); |
| 168 | |
| 169 | const float padding = 4; |
| 170 | const float crookedPaddingPercent = 0.036f; |
| 171 | |
| 172 | // left base |
| 173 | { |
| 174 | Path2d bumper; |
| 175 | bumper.moveTo( mOuterVerts[0] ); |
| 176 | bumper.lineTo( mOuterVerts[1].x, mOuterVerts[1].y + padding ); |
| 177 | bumper.lineTo( mInnerVerts[1].x, mInnerVerts[1].y + padding ); |
| 178 | bumper.lineTo( mInnerVerts[0] ); |
| 179 | bumper.close(); |
| 180 | |
| 181 | addBumper( bumper ); |
| 182 | } |
| 183 | |
| 184 | // left top |
| 185 | { |
| 186 | vec2 offsetOuter = ( mOuterVerts[2] - mOuterVerts[1] ) * crookedPaddingPercent; |
| 187 | vec2 offsetInner = ( vec2( mOuterVerts[2].x, mInnerVerts[2].y ) - mInnerVerts[1] ) * crookedPaddingPercent; |
| 188 | |
| 189 | Path2d bumper; |
| 190 | bumper.moveTo( mOuterVerts[1] + offsetOuter ); |
| 191 | bumper.lineTo( mOuterVerts[2] ); |
| 192 | bumper.lineTo( mOuterVerts[2].x, mInnerVerts[2].y ); |
| 193 | bumper.lineTo( mInnerVerts[1] + offsetInner ); |
| 194 | bumper.close(); |
| 195 | |
| 196 | addBumper( bumper ); |
| 197 | } |
| 198 | |
| 199 | // right top |
| 200 | { |
| 201 | vec2 offsetOuter = ( mOuterVerts[3] - mOuterVerts[4] ) * crookedPaddingPercent; |
| 202 | vec2 offsetInner = ( vec2( mOuterVerts[3].x, mInnerVerts[2].y ) - mInnerVerts[3] ) * crookedPaddingPercent; |
| 203 | |
| 204 | Path2d bumper; |
| 205 | bumper.moveTo( mOuterVerts[3] ); |
| 206 | bumper.lineTo( mOuterVerts[4] + offsetOuter ); |
| 207 | bumper.lineTo( mInnerVerts[3] + offsetInner ); |
| 208 | bumper.lineTo( mOuterVerts[3].x, mInnerVerts[2].y ); |
| 209 | bumper.close(); |
| 210 | |