All Data Structures Files Functions Variables Enumerations Enumerator Properties Defines
/Projects/Cogito/src/Objects/GraphSlide.m
Go to the documentation of this file.
00001 //
00002 //  GraphSlide.m
00003 //  Author: Thomas Taylor
00004 //
00005 //  A type of slide which displays a graph(!)
00006 //
00007 //  07/03/2012: Created class
00008 //
00009 
00010 #import "GraphSlide.h"
00011 
00012 @interface GraphSlide()
00013 
00014 -(void)initBars;
00015 -(void)updateEpisodeTimeGraph;
00016 -(void)updateActionsGraph;
00017 -(void)updateAgentsSavedGraph;
00018 
00019 @end
00020 
00021 @implementation GraphSlide
00022 
00023 @synthesize type;
00024 
00025 #pragma mark -
00026 #pragma mark Memory Allocation
00027 
00031 -(void)dealloc
00032 {
00033     [super dealloc];
00034 }
00035 
00036 #pragma mark -
00037 #pragma mark Initialisation
00038 
00043 -(id)initWithImage:(NSString*)_imageName type:(GraphType)_type
00044 {    
00045     self = [super initWithImage:_imageName];
00046     
00047     if (self != nil) 
00048     {
00049         type = _type;
00050         [self initBars];
00051     }
00052     return self;
00053 }
00054 
00055 #pragma mark -
00056 
00060 -(void)initBars
00061 {
00062     NSString* barImage = @"GraphBar.png";
00063     
00064     // colours
00065     ccColor3B beforeColour = ccc3(120, 171, 211);
00066     ccColor3B afterColour = ccc3(91, 131, 163);
00067     
00068     float yPos = 44.6;
00069     float startScale = 0.02;
00070     
00071     // reinforcement
00072     
00073     reinforcementBefore = [CCSprite spriteWithFile:barImage];
00074     reinforcementAfter = [CCSprite spriteWithFile:barImage];
00075     
00076     reinforcementBefore.position = ccp(87, yPos);
00077     reinforcementAfter.position = ccp(94, yPos);
00078 
00079     [reinforcementBefore setAnchorPoint:ccp(0.5, 0)];
00080     [reinforcementAfter setAnchorPoint:ccp(0.5, 0)];
00081     
00082     [reinforcementBefore setColor:(type != kGraphAgentsSaved) ? beforeColour : afterColour];
00083     [reinforcementAfter setColor:afterColour];
00084 
00085     reinforcementBefore.scaleY = startScale;
00086     reinforcementAfter.scaleY = startScale;
00087     
00088     [background addChild:reinforcementBefore];
00089     [background addChild:reinforcementAfter];
00090         
00091     // decision tree
00092     
00093     decisionTreeBefore = [CCSprite spriteWithFile:barImage];
00094     decisionTreeAfter = [CCSprite spriteWithFile:barImage];
00095     
00096     decisionTreeBefore.position = ccp(157, yPos);
00097     decisionTreeAfter.position = ccp(164, yPos);
00098     
00099     [decisionTreeBefore setAnchorPoint:ccp(0.5, 0)];
00100     [decisionTreeAfter setAnchorPoint:ccp(0.5, 0)];
00101     
00102     [decisionTreeBefore setColor:(type != kGraphAgentsSaved) ? beforeColour : afterColour];
00103     [decisionTreeAfter setColor:afterColour];
00104     
00105     decisionTreeBefore.scaleY = startScale;
00106     decisionTreeAfter.scaleY = startScale;
00107     
00108     [background addChild:decisionTreeBefore];
00109     [background addChild:decisionTreeAfter];
00110     
00111     // shortest route
00112     
00113     shortestRouteBefore = [CCSprite spriteWithFile:barImage];
00114     shortestRouteAfter = [CCSprite spriteWithFile:barImage];
00115     
00116     shortestRouteBefore.position = ccp(227, yPos);
00117     shortestRouteAfter.position = ccp(234.9, yPos);
00118     
00119     [shortestRouteBefore setAnchorPoint:ccp(0.5, 0)];
00120     [shortestRouteAfter setAnchorPoint:ccp(0.5, 0)];
00121     
00122     [shortestRouteBefore setColor:(type != kGraphAgentsSaved) ? beforeColour : afterColour];
00123     [shortestRouteAfter setColor:afterColour];
00124     
00125     shortestRouteBefore.scaleY = startScale;
00126     shortestRouteAfter.scaleY = startScale;
00127     
00128     [background addChild:shortestRouteBefore];
00129     [background addChild:shortestRouteAfter];
00130     
00131     // none
00132     
00133     noneBefore = [CCSprite spriteWithFile:barImage];
00134     noneAfter = [CCSprite spriteWithFile:barImage];
00135     
00136     noneBefore.position = ccp(293, yPos);
00137     noneAfter.position = ccp(300.8, yPos);
00138     
00139     [noneBefore setAnchorPoint:ccp(0.5, 0)];
00140     [noneAfter setAnchorPoint:ccp(0.5, 0)];
00141     
00142     [noneBefore setColor:(type != kGraphAgentsSaved) ? beforeColour : afterColour];
00143     [noneAfter setColor:afterColour];
00144     
00145     noneBefore.scaleY = startScale;
00146     noneAfter.scaleY = startScale;
00147     
00148     [background addChild:noneBefore];
00149     [background addChild:noneAfter];
00150 }
00151 
00155 -(void)update
00156 {    
00157     switch(type) 
00158     {
00159         case kGraphEpisodeTime:
00160             [self updateEpisodeTimeGraph];
00161             break;
00162         
00163         case kGraphActions:
00164             [self updateActionsGraph];
00165             break;
00166         
00167         case kGraphAgentsSaved:
00168             [self updateAgentsSavedGraph];
00169             break;
00170             
00171         default:
00172             break;
00173     }
00174 }
00175 
00179 -(void)updateEpisodeTimeGraph
00180 {    
00181     DataManager* dm = [DataManager sharedDataManager];
00182     float maxTime = 60.0f;
00183     
00184     // reinforcment
00185         
00186     reinforcementBefore.scaleY = (float)[dm averageEpisodeTimeLearning:kLearningReinforcement]/(float)maxTime;
00187     reinforcementAfter.scaleY = (float)[dm averageEpisodeTimeNonLearning:kLearningReinforcement]/(float)maxTime;
00188     
00189     // decision tree
00190     
00191     decisionTreeBefore.scaleY = (float)[dm averageEpisodeTimeLearning:kLearningTree]/maxTime;
00192     decisionTreeAfter.scaleY = (float)[dm averageEpisodeTimeNonLearning:kLearningTree]/maxTime;
00193     
00194     // shortest route
00195     
00196     shortestRouteBefore.scaleY = (float)[dm averageEpisodeTimeLearning:kLearningShortestRoute]/maxTime;
00197     shortestRouteAfter.scaleY = (float)[dm averageEpisodeTimeNonLearning:kLearningShortestRoute]/maxTime;
00198     
00199     // none
00200     
00201     noneBefore.scaleY = (float)[dm averageEpisodeTimeLearning:kLearningNone]/maxTime;
00202     noneAfter.scaleY = (float)[dm averageEpisodeTimeNonLearning:kLearningNone]/maxTime;
00203 }
00204 
00208 -(void)updateActionsGraph
00209 {    
00210     DataManager* dm = [DataManager sharedDataManager];
00211     float maxActions = 5.0f;
00212     
00213     // reinforcment
00214     
00215     reinforcementBefore.scaleY = (float)[dm averageActionsLearning:kLearningReinforcement]/maxActions;
00216     reinforcementAfter.scaleY = (float)[dm averageActionsNonLearning:kLearningReinforcement]/maxActions;
00217     
00218     // decision tree
00219     
00220     decisionTreeBefore.scaleY = (float)[dm averageActionsLearning:kLearningTree]/maxActions;
00221     decisionTreeAfter.scaleY = (float)[dm averageActionsNonLearning:kLearningTree]/maxActions;
00222     
00223     // shortest route
00224     
00225     shortestRouteBefore.scaleY = (float)[dm averageActionsLearning:kLearningShortestRoute]/maxActions;
00226     shortestRouteAfter.scaleY = (float)[dm averageActionsNonLearning:kLearningShortestRoute]/maxActions;
00227     
00228     // none
00229     
00230     noneBefore.scaleY = (float)[dm averageActionsLearning:kLearningNone]/maxActions;
00231     noneAfter.scaleY = (float)[dm averageActionsNonLearning:kLearningNone]/maxActions;
00232 }
00233 
00238 -(void)updateAgentsSavedGraph
00239 {    
00240     DataManager* dm = [DataManager sharedDataManager];
00241 
00242     reinforcementAfter.scaleY = [dm averageAgentsSaved:kLearningReinforcement];
00243     reinforcementAfter.position = ccp(reinforcementAfter.position.x-3, reinforcementAfter.position.y);
00244     reinforcementBefore.scaleY = 0;
00245     
00246     decisionTreeAfter.scaleY = [dm averageAgentsSaved:kLearningTree];
00247     decisionTreeAfter.position = ccp(decisionTreeAfter.position.x-3, decisionTreeAfter.position.y);
00248     decisionTreeBefore.scaleY = 0;
00249     
00250     shortestRouteAfter.scaleY = [dm averageAgentsSaved:kLearningShortestRoute];
00251     shortestRouteAfter.position = ccp(shortestRouteAfter.position.x-4, shortestRouteAfter.position.y);
00252     shortestRouteBefore.scaleY = 0;
00253     
00254     noneAfter.scaleY = [dm averageAgentsSaved:kLearningNone];
00255     noneAfter.position = ccp(noneAfter.position.x-4, noneAfter.position.y);
00256     noneBefore.scaleY = 0;
00257 }
00258 
00259 
00260 @end