//inherit old events then send out new ones for
        //the cat and any other objects assigned to the event.
		protected override void HandleStructureEvent(object sender, StructureARPluginEventArgs structureArgs)
        {
			base.HandleStructureEvent(sender, structureArgs);

            if(HoverCatGameEvent == null)
            {
                return;
            }

            switch(structureArgs.eventType)
            {
                case StructureARPluginEvent.TrackingLost:
					if(this.trackingIsGood != isCatTracking)
                    {
                        if(this.gameState == SensorState.Playing)
                        {
                            HoverCatEventArgs catArgs = new HoverCatEventArgs(
                                this.gameState, this.trackingIsGood, HoverCatEvent.StateChange);
                            catArgs.catEvent = HoverCatEvent.Hide;
                            HoverCatGameEvent(this, catArgs);
                        }
                        isCatTracking = trackingIsGood;
                    }
                    break;
                
                case StructureARPluginEvent.TrackingFound:
					if(this.trackingIsGood != isCatTracking)
                    {
                        if(this.gameState == SensorState.Playing)
                        {
                            HoverCatEventArgs catArgs = new HoverCatEventArgs(
								this.gameState, this.trackingIsGood,  HoverCatEvent.StateChange);
                            catArgs.catEvent = HoverCatEvent.Show;
                            HoverCatGameEvent(this, catArgs);
                        }
						isCatTracking = trackingIsGood;
                    }
                    break;

                case StructureARPluginEvent.ScannedMeshReady:
					if(this.gameState == SensorState.Playing)
                    {
                        HoverCatEventArgs catArgs = new HoverCatEventArgs(
							this.gameState, this.trackingIsGood, HoverCatEvent.StateChange);
                        catArgs.catEvent = HoverCatEvent.Reset;
                        HoverCatGameEvent(this, catArgs);
                    }
                    break;

				case StructureARPluginEvent.CameraAccessRequired:
                case StructureARPluginEvent.SensorDisconnected:
				case StructureARPluginEvent.SensorNeedsCharging:
					if(this.gameState == SensorState.Playing)
                    {
                        HoverCatEventArgs catArgs = new HoverCatEventArgs(
							this.gameState, this.trackingIsGood, HoverCatEvent.StateChange);
                        catArgs.catEvent = HoverCatEvent.Hide;
                        HoverCatGameEvent(this, catArgs);
                    }
                    break;

                case StructureARPluginEvent.SensorConnected:
					if(this.gameState == SensorState.Playing)
                    {
                        HoverCatEventArgs catArgs = new HoverCatEventArgs(
							this.gameState, this.trackingIsGood, HoverCatEvent.StateChange);
                        catArgs.catEvent = HoverCatEvent.Show;
                        HoverCatGameEvent(this, catArgs);
                    }
                    break;

                case StructureARPluginEvent.UpdateProjectionMatrix:
                default:
                    break;
            }
        }
 /// <summary>
 /// handles events coming in from the game manager
 /// </summary>
 protected virtual void HandleHoverCatGameEvent(object sender, HoverCatEventArgs args)
 {
     GameLog.Log(sender, this.ToString() + ":" + args.catEvent);
     switch (args.catEvent)
     {
         case HoverCatEvent.Show:
             this.Show();
             break;
             
         case HoverCatEvent.Hide:
             this.Freeze();
             this.Hide();
             break;
             
         case HoverCatEvent.Reset:
             this.Freeze();
             this.Home();
             this.Show();
             break;
             
         default:
             break;
     }
 }