Line data Source code
1 0 : /* 2 : 3 : OOPlasmaBurstEntity.m 4 : 5 : 6 : Oolite 7 : Copyright (C) 2004-2013 Giles C Williams and contributors 8 : 9 : This program is free software; you can redistribute it and/or 10 : modify it under the terms of the GNU General Public License 11 : as published by the Free Software Foundation; either version 2 12 : of the License, or (at your option) any later version. 13 : 14 : This program is distributed in the hope that it will be useful, 15 : but WITHOUT ANY WARRANTY; without even the implied warranty of 16 : MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 17 : GNU General Public License for more details. 18 : 19 : You should have received a copy of the GNU General Public License 20 : along with this program; if not, write to the Free Software 21 : Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 22 : MA 02110-1301, USA. 23 : 24 : */ 25 : 26 : #import "OOPlasmaBurstEntity.h" 27 : #import "Universe.h" 28 : 29 : 30 0 : #define kPlasmaBurstInitialSize 64.0f 31 0 : #define kPlasmaBurstGrowthRate 64.0f 32 0 : #define kPlasmaBurstDuration 2.0f 33 : 34 : 35 : @implementation OOPlasmaBurstEntity 36 : 37 : - (id) initWithPosition:(HPVector)inPosition 38 : { 39 : if ((self = [super initWithDiameter:kPlasmaBurstInitialSize])) 40 : { 41 : [self setPosition:inPosition]; 42 : [self setCollisionRadius:2.0]; 43 : 44 : [self setColor:[OOColor redColor]]; 45 : } 46 : 47 : return self; 48 : } 49 : 50 : 51 0 : - (void) update:(double)delta_t 52 : { 53 : [super update:delta_t]; 54 : 55 : OOTimeDelta lifeTime = [self timeElapsedSinceSpawn]; 56 : float attenuation = OOClamp_0_1_f(1.0f - lifeTime / kPlasmaBurstDuration); 57 : 58 : _diameter = kPlasmaBurstInitialSize + lifeTime * kPlasmaBurstGrowthRate; 59 : 60 : _colorComponents[3] = attenuation; 61 : 62 : if (lifeTime > kPlasmaBurstDuration) [UNIVERSE removeEntity:self]; 63 : } 64 : 65 : @end