Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 659 lines (523 sloc) 14.73 kb
0afa952c » ricardoquesada
2010-05-17 Using MIT license
1 /*
2 * cocos2d for iPhone: http://www.cocos2d-iphone.org
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
3 *
0afa952c » ricardoquesada
2010-05-17 Using MIT license
4 * Copyright (c) 2009 On-Core
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
5 *
0afa952c » ricardoquesada
2010-05-17 Using MIT license
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
23 *
24 */
25
0afa952c » ricardoquesada
2010-05-17 Using MIT license
26
19868312 » ricardoquesada
2010-08-20 Actions: files renamed CCXXXXAction.[hm] -> CCActionXXXX.[hm]
27 #import "CCActionGrid3D.h"
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
28 #import "ccMacros.h"
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
29 #import "Support/CGPointExtension.h"
30
31 #pragma mark -
32 #pragma mark Waves3D
33
34 @implementation CCWaves3D
35
36 @synthesize amplitude;
37 @synthesize amplitudeRate;
38
39 +(id)actionWithWaves:(int)wav amplitude:(float)amp grid:(ccGridSize)gridSize duration:(ccTime)d
40 {
41 return [[[self alloc] initWithWaves:wav amplitude:amp grid:gridSize duration:d] autorelease];
42 }
43
44 -(id)initWithWaves:(int)wav amplitude:(float)amp grid:(ccGridSize)gSize duration:(ccTime)d
45 {
46 if ( (self = [super initWithSize:gSize duration:d]) )
47 {
48 waves = wav;
49 amplitude = amp;
50 amplitudeRate = 1.0f;
51 }
52
53 return self;
54 }
55
56 -(id) copyWithZone: (NSZone*) zone
57 {
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
58 CCGridAction *copy = [[[self class] allocWithZone:zone] initWithWaves:waves amplitude:amplitude grid:gridSize_ duration:duration_];
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
59 return copy;
60 }
61
62
63 -(void)update:(ccTime)time
64 {
65 int i, j;
66
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
67 for( i = 0; i < (gridSize_.x+1); i++ )
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
68 {
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
69 for( j = 0; j < (gridSize_.y+1); j++ )
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
70 {
71 ccVertex3F v = [self originalVertex:ccg(i,j)];
72 v.z += (sinf((CGFloat)M_PI*time*waves*2 + (v.y+v.x) * .01f) * amplitude * amplitudeRate);
73 [self setVertex:ccg(i,j) vertex:v];
74 }
75 }
76 }
77 @end
78
79 ////////////////////////////////////////////////////////////
80
81 #pragma mark -
82 #pragma mark FlipX3D
83
84 @implementation CCFlipX3D
85
86 +(id) actionWithDuration:(ccTime)d
87 {
88 return [[[self alloc] initWithSize:ccg(1,1) duration:d] autorelease];
89 }
90
91 -(id) initWithDuration:(ccTime)d
92 {
93 return [super initWithSize:ccg(1,1) duration:d];
94 }
95
96 -(id)initWithSize:(ccGridSize)gSize duration:(ccTime)d
97 {
98 if ( gSize.x != 1 || gSize.y != 1 )
99 {
100 [NSException raise:@"FlipX3D" format:@"Grid size must be (1,1)"];
101 }
102
103 return [super initWithSize:gSize duration:d];
104 }
105
106 -(id) copyWithZone: (NSZone*) zone
107 {
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
108 CCGridAction *copy = [[[self class] allocWithZone:zone] initWithSize:gridSize_ duration:duration_];
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
109 return copy;
110 }
111
112
113 -(void)update:(ccTime)time
114 {
115 CGFloat angle = (CGFloat)M_PI * time; // 180 degrees
116 CGFloat mz = sinf( angle );
117 angle = angle / 2.0f; // x calculates degrees from 0 to 90
118 CGFloat mx = cosf( angle );
119
120 ccVertex3F v0, v1, v, diff;
121
122 v0 = [self originalVertex:ccg(1,1)];
123 v1 = [self originalVertex:ccg(0,0)];
124
125 CGFloat x0 = v0.x;
126 CGFloat x1 = v1.x;
127 CGFloat x;
128 ccGridSize a, b, c, d;
129
130 if ( x0 > x1 )
131 {
132 // Normal Grid
133 a = ccg(0,0);
134 b = ccg(0,1);
135 c = ccg(1,0);
136 d = ccg(1,1);
137 x = x0;
138 }
139 else
140 {
141 // Reversed Grid
142 c = ccg(0,0);
143 d = ccg(0,1);
144 a = ccg(1,0);
145 b = ccg(1,1);
146 x = x1;
147 }
148
149 diff.x = ( x - x * mx );
150 diff.z = fabsf( floorf( (x * mz) / 4.0f ) );
151
152 // bottom-left
153 v = [self originalVertex:a];
154 v.x = diff.x;
155 v.z += diff.z;
156 [self setVertex:a vertex:v];
157
158 // upper-left
159 v = [self originalVertex:b];
160 v.x = diff.x;
161 v.z += diff.z;
162 [self setVertex:b vertex:v];
163
164 // bottom-right
165 v = [self originalVertex:c];
166 v.x -= diff.x;
167 v.z -= diff.z;
168 [self setVertex:c vertex:v];
169
170 // upper-right
171 v = [self originalVertex:d];
172 v.x -= diff.x;
173 v.z -= diff.z;
174 [self setVertex:d vertex:v];
175 }
176
177 @end
178
179 ////////////////////////////////////////////////////////////
180
181 #pragma mark -
182 #pragma mark FlipY3D
183
184 @implementation CCFlipY3D
185
186 -(void)update:(ccTime)time
187 {
188 CGFloat angle = (CGFloat)M_PI * time; // 180 degrees
189 CGFloat mz = sinf( angle );
190 angle = angle / 2.0f; // x calculates degrees from 0 to 90
191 CGFloat my = cosf( angle );
192
193 ccVertex3F v0, v1, v, diff;
194
195 v0 = [self originalVertex:ccg(1,1)];
196 v1 = [self originalVertex:ccg(0,0)];
197
198 CGFloat y0 = v0.y;
199 CGFloat y1 = v1.y;
200 CGFloat y;
201 ccGridSize a, b, c, d;
202
203 if ( y0 > y1 )
204 {
205 // Normal Grid
206 a = ccg(0,0);
207 b = ccg(0,1);
208 c = ccg(1,0);
209 d = ccg(1,1);
210 y = y0;
211 }
212 else
213 {
214 // Reversed Grid
215 b = ccg(0,0);
216 a = ccg(0,1);
217 d = ccg(1,0);
218 c = ccg(1,1);
219 y = y1;
220 }
221
222 diff.y = y - y * my;
223 diff.z = fabsf( floorf( (y * mz) / 4.0f ) );
224
225 // bottom-left
226 v = [self originalVertex:a];
227 v.y = diff.y;
228 v.z += diff.z;
229 [self setVertex:a vertex:v];
230
231 // upper-left
232 v = [self originalVertex:b];
233 v.y -= diff.y;
234 v.z -= diff.z;
235 [self setVertex:b vertex:v];
236
237 // bottom-right
238 v = [self originalVertex:c];
239 v.y = diff.y;
240 v.z += diff.z;
241 [self setVertex:c vertex:v];
242
243 // upper-right
244 v = [self originalVertex:d];
245 v.y -= diff.y;
246 v.z -= diff.z;
247 [self setVertex:d vertex:v];
248 }
249
250 @end
251
252 ////////////////////////////////////////////////////////////
253
254 #pragma mark -
255 #pragma mark Lens3D
256
257 @implementation CCLens3D
258
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
259 @synthesize lensEffect=lensEffect_;
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
260
261 +(id)actionWithPosition:(CGPoint)pos radius:(float)r grid:(ccGridSize)gridSize duration:(ccTime)d
262 {
263 return [[[self alloc] initWithPosition:pos radius:r grid:gridSize duration:d] autorelease];
264 }
265
266 -(id)initWithPosition:(CGPoint)pos radius:(float)r grid:(ccGridSize)gSize duration:(ccTime)d
267 {
268 if ( (self = [super initWithSize:gSize duration:d]) )
269 {
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
270 position_ = ccp(-1,-1);
271 self.position = pos;
272 radius_ = r;
273 lensEffect_ = 0.7f;
274 dirty_ = YES;
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
275 }
276
277 return self;
278 }
279
280 -(id) copyWithZone: (NSZone*) zone
281 {
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
282 CCGridAction *copy = [[[self class] allocWithZone:zone] initWithPosition:position_ radius:radius_ grid:gridSize_ duration:duration_];
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
283 return copy;
284 }
285
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
286 -(void) setPosition:(CGPoint)pos
287 {
288 if( ! CGPointEqualToPoint(pos, position_) ) {
289 position_ = pos;
290 positionInPixels_.x = pos.x * CC_CONTENT_SCALE_FACTOR();
291 positionInPixels_.y = pos.y * CC_CONTENT_SCALE_FACTOR();
292
293 dirty_ = YES;
294 }
295 }
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
296
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
297 -(CGPoint) position
298 {
299 return position_;
300 }
301
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
302 -(void)update:(ccTime)time
303 {
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
304 if ( dirty_ )
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
305 {
306 int i, j;
307
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
308 for( i = 0; i < gridSize_.x+1; i++ )
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
309 {
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
310 for( j = 0; j < gridSize_.y+1; j++ )
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
311 {
312 ccVertex3F v = [self originalVertex:ccg(i,j)];
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
313 CGPoint vect = ccpSub(positionInPixels_, ccp(v.x,v.y));
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
314 CGFloat r = ccpLength(vect);
315
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
316 if ( r < radius_ )
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
317 {
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
318 r = radius_ - r;
319 CGFloat pre_log = r / radius_;
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
320 if ( pre_log == 0 ) pre_log = 0.001f;
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
321 float l = logf(pre_log) * lensEffect_;
322 float new_r = expf( l ) * radius_;
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
323
324 if ( ccpLength(vect) > 0 )
325 {
326 vect = ccpNormalize(vect);
327 CGPoint new_vect = ccpMult(vect, new_r);
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
328 v.z += ccpLength(new_vect) * lensEffect_;
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
329 }
330 }
331
332 [self setVertex:ccg(i,j) vertex:v];
333 }
334 }
335
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
336 dirty_ = NO;
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
337 }
338 }
339
340 @end
341
342 ////////////////////////////////////////////////////////////
343
344 #pragma mark -
345 #pragma mark Ripple3D
346
347 @implementation CCRipple3D
348
f2b91b39 » manucorporat
2010-12-04 Performance and cosmetic changes
349 @synthesize amplitude = amplitude_;
350 @synthesize amplitudeRate = amplitudeRate_;
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
351
352 +(id)actionWithPosition:(CGPoint)pos radius:(float)r waves:(int)wav amplitude:(float)amp grid:(ccGridSize)gridSize duration:(ccTime)d
353 {
354 return [[[self alloc] initWithPosition:pos radius:r waves:wav amplitude:amp grid:gridSize duration:d] autorelease];
355 }
356
357 -(id)initWithPosition:(CGPoint)pos radius:(float)r waves:(int)wav amplitude:(float)amp grid:(ccGridSize)gSize duration:(ccTime)d
358 {
359 if ( (self = [super initWithSize:gSize duration:d]) )
360 {
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
361 self.position = pos;
362 radius_ = r;
363 waves_ = wav;
364 amplitude_ = amp;
365 amplitudeRate_ = 1.0f;
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
366 }
367
368 return self;
369 }
370
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
371 -(CGPoint) position
372 {
373 return position_;
374 }
375
376 -(void) setPosition:(CGPoint)pos
377 {
378 position_ = pos;
379 positionInPixels_.x = pos.x * CC_CONTENT_SCALE_FACTOR();
380 positionInPixels_.y = pos.y * CC_CONTENT_SCALE_FACTOR();
381 }
382
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
383 -(id) copyWithZone: (NSZone*) zone
384 {
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
385 CCGridAction *copy = [[[self class] allocWithZone:zone] initWithPosition:position_ radius:radius_ waves:waves_ amplitude:amplitude_ grid:gridSize_ duration:duration_];
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
386 return copy;
387 }
388
389
390 -(void)update:(ccTime)time
391 {
392 int i, j;
393
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
394 for( i = 0; i < (gridSize_.x+1); i++ )
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
395 {
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
396 for( j = 0; j < (gridSize_.y+1); j++ )
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
397 {
398 ccVertex3F v = [self originalVertex:ccg(i,j)];
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
399 CGPoint vect = ccpSub(positionInPixels_, ccp(v.x,v.y));
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
400 CGFloat r = ccpLength(vect);
401
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
402 if ( r < radius_ )
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
403 {
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
404 r = radius_ - r;
405 CGFloat rate = powf( r / radius_, 2);
406 v.z += (sinf( time*(CGFloat)M_PI*waves_*2 + r * 0.1f) * amplitude_ * amplitudeRate_ * rate );
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
407 }
408
409 [self setVertex:ccg(i,j) vertex:v];
410 }
411 }
412 }
413
414 @end
415
416 ////////////////////////////////////////////////////////////
417
418 #pragma mark -
419 #pragma mark Shaky3D
420
421 @implementation CCShaky3D
422
423 +(id)actionWithRange:(int)range shakeZ:(BOOL)sz grid:(ccGridSize)gridSize duration:(ccTime)d
424 {
425 return [[[self alloc] initWithRange:range shakeZ:sz grid:gridSize duration:d] autorelease];
426 }
427
428 -(id)initWithRange:(int)range shakeZ:(BOOL)sz grid:(ccGridSize)gSize duration:(ccTime)d
429 {
430 if ( (self = [super initWithSize:gSize duration:d]) )
431 {
432 randrange = range;
433 shakeZ = sz;
434 }
435
436 return self;
437 }
438
439 -(id) copyWithZone: (NSZone*) zone
440 {
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
441 CCGridAction *copy = [[[self class] allocWithZone:zone] initWithRange:randrange shakeZ:shakeZ grid:gridSize_ duration:duration_];
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
442 return copy;
443 }
444
445 -(void)update:(ccTime)time
446 {
447 int i, j;
448
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
449 for( i = 0; i < (gridSize_.x+1); i++ )
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
450 {
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
451 for( j = 0; j < (gridSize_.y+1); j++ )
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
452 {
453 ccVertex3F v = [self originalVertex:ccg(i,j)];
454 v.x += ( rand() % (randrange*2) ) - randrange;
455 v.y += ( rand() % (randrange*2) ) - randrange;
456 if( shakeZ )
457 v.z += ( rand() % (randrange*2) ) - randrange;
458
459 [self setVertex:ccg(i,j) vertex:v];
460 }
461 }
462 }
463
464 @end
465
466 ////////////////////////////////////////////////////////////
467
468 #pragma mark -
469 #pragma mark Liquid
470
471 @implementation CCLiquid
472
473 @synthesize amplitude;
474 @synthesize amplitudeRate;
475
476 +(id)actionWithWaves:(int)wav amplitude:(float)amp grid:(ccGridSize)gridSize duration:(ccTime)d
477 {
478 return [[[self alloc] initWithWaves:wav amplitude:amp grid:gridSize duration:d] autorelease];
479 }
480
481 -(id)initWithWaves:(int)wav amplitude:(float)amp grid:(ccGridSize)gSize duration:(ccTime)d
482 {
483 if ( (self = [super initWithSize:gSize duration:d]) )
484 {
485 waves = wav;
486 amplitude = amp;
487 amplitudeRate = 1.0f;
488 }
489
490 return self;
491 }
492
493 -(void)update:(ccTime)time
494 {
495 int i, j;
496
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
497 for( i = 1; i < gridSize_.x; i++ )
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
498 {
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
499 for( j = 1; j < gridSize_.y; j++ )
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
500 {
501 ccVertex3F v = [self originalVertex:ccg(i,j)];
502 v.x = (v.x + (sinf(time*(CGFloat)M_PI*waves*2 + v.x * .01f) * amplitude * amplitudeRate));
503 v.y = (v.y + (sinf(time*(CGFloat)M_PI*waves*2 + v.y * .01f) * amplitude * amplitudeRate));
504 [self setVertex:ccg(i,j) vertex:v];
505 }
506 }
507 }
508
509 -(id) copyWithZone: (NSZone*) zone
510 {
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
511 CCGridAction *copy = [[[self class] allocWithZone:zone] initWithWaves:waves amplitude:amplitude grid:gridSize_ duration:duration_];
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
512 return copy;
513 }
514
515 @end
516
517 ////////////////////////////////////////////////////////////
518
519 #pragma mark -
520 #pragma mark Waves
521
522 @implementation CCWaves
523
524 @synthesize amplitude;
525 @synthesize amplitudeRate;
526
527 +(id)actionWithWaves:(int)wav amplitude:(float)amp horizontal:(BOOL)h vertical:(BOOL)v grid:(ccGridSize)gridSize duration:(ccTime)d
528 {
529 return [[[self alloc] initWithWaves:wav amplitude:amp horizontal:h vertical:v grid:gridSize duration:d] autorelease];
530 }
531
532 -(id)initWithWaves:(int)wav amplitude:(float)amp horizontal:(BOOL)h vertical:(BOOL)v grid:(ccGridSize)gSize duration:(ccTime)d
533 {
534 if ( (self = [super initWithSize:gSize duration:d]) )
535 {
536 waves = wav;
537 amplitude = amp;
538 amplitudeRate = 1.0f;
539 horizontal = h;
540 vertical = v;
541 }
542
543 return self;
544 }
545
546 -(void)update:(ccTime)time
547 {
548 int i, j;
549
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
550 for( i = 0; i < (gridSize_.x+1); i++ )
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
551 {
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
552 for( j = 0; j < (gridSize_.y+1); j++ )
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
553 {
554 ccVertex3F v = [self originalVertex:ccg(i,j)];
555
556 if ( vertical )
557 v.x = (v.x + (sinf(time*(CGFloat)M_PI*waves*2 + v.y * .01f) * amplitude * amplitudeRate));
558
559 if ( horizontal )
560 v.y = (v.y + (sinf(time*(CGFloat)M_PI*waves*2 + v.x * .01f) * amplitude * amplitudeRate));
561
562 [self setVertex:ccg(i,j) vertex:v];
563 }
564 }
565 }
566
567 -(id) copyWithZone: (NSZone*) zone
568 {
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
569 CCGridAction *copy = [[[self class] allocWithZone:zone] initWithWaves:waves amplitude:amplitude horizontal:horizontal vertical:vertical grid:gridSize_ duration:duration_];
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
570 return copy;
571 }
572
573 @end
574
575 ////////////////////////////////////////////////////////////
576
577 #pragma mark -
578 #pragma mark Twirl
579
580 @implementation CCTwirl
581
f2b91b39 » manucorporat
2010-12-04 Performance and cosmetic changes
582 @synthesize amplitude = amplitude_;
583 @synthesize amplitudeRate = amplitudeRate_;
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
584
585 +(id)actionWithPosition:(CGPoint)pos twirls:(int)t amplitude:(float)amp grid:(ccGridSize)gridSize duration:(ccTime)d
586 {
587 return [[[self alloc] initWithPosition:pos twirls:t amplitude:amp grid:gridSize duration:d] autorelease];
588 }
589
590 -(id)initWithPosition:(CGPoint)pos twirls:(int)t amplitude:(float)amp grid:(ccGridSize)gSize duration:(ccTime)d
591 {
592 if ( (self = [super initWithSize:gSize duration:d]) )
593 {
594 self.position = pos;
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
595 twirls_ = t;
596 amplitude_ = amp;
597 amplitudeRate_ = 1.0f;
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
598 }
599
600 return self;
601 }
602
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
603 -(void) setPosition:(CGPoint)pos
604 {
605 position_ = pos;
606 positionInPixels_.x = pos.x * CC_CONTENT_SCALE_FACTOR();
607 positionInPixels_.y = pos.y * CC_CONTENT_SCALE_FACTOR();
608 }
609
610 -(CGPoint) position
611 {
612 return position_;
613 }
614
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
615 -(void)update:(ccTime)time
616 {
617 int i, j;
f2b91b39 » manucorporat
2010-12-04 Performance and cosmetic changes
618 CGPoint c = positionInPixels_;
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
619
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
620 for( i = 0; i < (gridSize_.x+1); i++ )
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
621 {
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
622 for( j = 0; j < (gridSize_.y+1); j++ )
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
623 {
f2b91b39 » manucorporat
2010-12-04 Performance and cosmetic changes
624 ccVertex3F v = [self originalVertex:ccg(i,j)];
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
625
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
626 CGPoint avg = ccp(i-(gridSize_.x/2.0f), j-(gridSize_.y/2.0f));
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
627 CGFloat r = ccpLength( avg );
628
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
629 CGFloat amp = 0.1f * amplitude_ * amplitudeRate_;
630 CGFloat a = r * cosf( (CGFloat)M_PI/2.0f + time * (CGFloat)M_PI * twirls_ * 2 ) * amp;
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
631
f2b91b39 » manucorporat
2010-12-04 Performance and cosmetic changes
632 float cosA = cosf(a);
633 float sinA = sinf(a);
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
634
f2b91b39 » manucorporat
2010-12-04 Performance and cosmetic changes
635 CGPoint d = {
636 sinA * (v.y-c.y) + cosA * (v.x-c.x),
637 cosA * (v.y-c.y) - sinA * (v.x-c.x)
638 };
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
639
640 v.x = c.x + d.x;
641 v.y = c.y + d.y;
642
643 [self setVertex:ccg(i,j) vertex:v];
644 }
645 }
646 }
647
648 -(id) copyWithZone: (NSZone*) zone
649 {
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
650 CCGridAction *copy = [[[self class] allocWithZone:zone] initWithPosition:position_
651 twirls:twirls_
652 amplitude:amplitude_
df09830d » ricardoquesada
2010-09-08 Effect: split row and cols work as expected in retina display
653 grid:gridSize_
2da51dfc » ricardoquesada
2010-09-08 Effects works OK with retina display
654 duration:duration_];
943dd78d » ricardoquesada
2009-10-30 welcome cocos2d CC namespace
655 return copy;
656 }
657
658
659 @end
Something went wrong with that request. Please try again.