From c32f65467835978ce6547e7430dd39214e199c4f Mon Sep 17 00:00:00 2001 From: Samo Pajk Date: Sat, 22 Jun 2013 11:41:56 +0200 Subject: [PATCH] Fixed bug where Event would crash if delegate was removed during event raise. Added Contains method to GameComponentCollection. Added Support for drawing triangle fans. Added gitignore. --- Classes/.DS_Store | Bin 6148 -> 0 bytes .../Xni/Framework/GameComponentCollection.h | 1 + .../Xni/Framework/GameComponentCollection.m | 7 +++++++ .../Xni/Framework/GamerServices/Guide.m | 2 +- .../Xni/Framework/Graphics/GraphicsDevice.m | 3 +++ Classes/System/Event.m | 12 +++++++++++- gitignore | 1 + 7 files changed, 24 insertions(+), 2 deletions(-) delete mode 100644 Classes/.DS_Store create mode 100644 gitignore diff --git a/Classes/.DS_Store b/Classes/.DS_Store deleted file mode 100644 index 2674645b481d3fa907dd53902858fd128b81e18b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHKJ5Iwu5PeG`6cGuzLX>*}3T|LUrlr6K0F*>D7^9FBbiNAQf|e34M9G^EK^CS2 zAv7cHy#36~j-TY+9RO*zSsViefC-ymlFoq0^x)Et8;^-eW3;%zCDv%M8VK|krzH11 zoMFkVSIm2x|8;v+&)eo!lP(_izq4!Fs#9Kf5t!>S9LYxNBQ0Q<@4mO&1@HJB4XD`hr)jE5x{|* gBZssk7=D;+ySi6ZmrPK<|u5)vvH_yq>u0csB|egFUf diff --git a/Classes/Retronator/Xni/Framework/GameComponentCollection.h b/Classes/Retronator/Xni/Framework/GameComponentCollection.h index ebb2c57..f62c421 100644 --- a/Classes/Retronator/Xni/Framework/GameComponentCollection.h +++ b/Classes/Retronator/Xni/Framework/GameComponentCollection.h @@ -25,5 +25,6 @@ - (void) addComponent:(id)component; - (void) removeComponent:(id)component; +- (BOOL) contains:(id)component; @end diff --git a/Classes/Retronator/Xni/Framework/GameComponentCollection.m b/Classes/Retronator/Xni/Framework/GameComponentCollection.m index 67294de..d179b2c 100644 --- a/Classes/Retronator/Xni/Framework/GameComponentCollection.m +++ b/Classes/Retronator/Xni/Framework/GameComponentCollection.m @@ -33,6 +33,9 @@ } - (void) addComponent:(id)component { + if ([components containsObject:component]) { + NSLog(@"WARNING: Game component added twice:%@", component); + } [components addObject:component]; [componentAdded raiseWithSender:self eventArgs:[GameComponentCollectionEventArgs @@ -46,6 +49,10 @@ eventArgsWithGameComponent:component]]; } +- (BOOL) contains:(id)component{ + return [components containsObject:component]; +} + - (NSUInteger) countByEnumeratingWithState:(NSFastEnumerationState *)state objects:(id *)stackbuf count:(NSUInteger)len { diff --git a/Classes/Retronator/Xni/Framework/GamerServices/Guide.m b/Classes/Retronator/Xni/Framework/GamerServices/Guide.m index 8a2a3d1..f12c375 100644 --- a/Classes/Retronator/Xni/Framework/GamerServices/Guide.m +++ b/Classes/Retronator/Xni/Framework/GamerServices/Guide.m @@ -58,7 +58,7 @@ static Guide *instance = nil; return [instance beginShowMessageBoxWithTitle:title text:text buttons:buttons focusButton:focusButton icon:icon callback:callback state:state]; } -+ (NSNumber *) endShowMessageBox:(id )result { ++ (NSNumber*) endShowMessageBox:(id )result { return [instance endShowMessageBox:result]; } diff --git a/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m index 776ee4a..b8dd213 100644 --- a/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m +++ b/Classes/Retronator/Xni/Framework/Graphics/GraphicsDevice.m @@ -193,6 +193,8 @@ + (int) getNumberOfVerticesForPrimitiveType:(PrimitiveType)primitiveType primitiveCount:(int)primitiveCount { switch (primitiveType) { + case GL_TRIANGLE_FAN: + return primitiveCount; case PrimitiveTypeLineStrip: return primitiveCount + 1; case PrimitiveTypeLineList: @@ -586,6 +588,7 @@ // CHECK FRAME BUFFER STATUS HERE GLenum status = glCheckFramebufferStatusOES(GL_FRAMEBUFFER); + if(status != GL_FRAMEBUFFER_COMPLETE){ NSLog(@"Error binding renderTarget"); } diff --git a/Classes/System/Event.m b/Classes/System/Event.m index 959c3b3..d5d521a 100644 --- a/Classes/System/Event.m +++ b/Classes/System/Event.m @@ -10,11 +10,18 @@ #import "System.h" +@interface Event (){ + NSMutableArray *tempEvents; +} + +@end + @implementation Event - (id) init { if (self = [super init]) { delegates = [[NSMutableArray alloc] init]; + tempEvents = [[NSMutableArray alloc] init]; } return self; } @@ -33,13 +40,16 @@ } - (void) raiseWithSender:(id)sender eventArgs:(EventArgs*)e { - for (Delegate *delegate in delegates) { + [tempEvents addObjectsFromArray:delegates]; + for (Delegate *delegate in tempEvents) { [delegate invokeWithArgument:sender argument:e]; } + [tempEvents removeAllObjects]; } - (void) dealloc { [delegates release]; + [tempEvents release]; [super dealloc]; } diff --git a/gitignore b/gitignore new file mode 100644 index 0000000..496ee2c --- /dev/null +++ b/gitignore @@ -0,0 +1 @@ +.DS_Store \ No newline at end of file