/// <summary> /// Kümmert sich um die Bewegung der GameItem /// </summary> /// <param name="game">Referenz des Games aus dem XNA Framework.</param> /// <param name="gameTime">Bietet die aktuelle Spielzeit an.</param> protected override void Movement(Game game, GameTime gameTime) { //Umrechnung von V/s in V/frame VelocityIncreasePerFrame = (this.VelocityIncrease * (float)game.TargetElapsedTime.TotalSeconds); //Ausführung des Runter Kommandos aus vorigem Frame. if (moveDown) { //Navigiert alle GameItem nach unten. foreach (IGameItem item in Controllees) { // Geschwindigkeitserhöhung item.Velocity += VelocityIncreasePerFrame; //Befehl an GameItem item.Move(CoordinateConstants.Down, gameTime); } //MoveDown ausgeführt ! moveDown = false; } else //Bewegung in Richtung aktuelle Richtung. { foreach (IGameItem item in Controllees) { // Geschwindigkeitserhöhung item.Velocity += VelocityIncreasePerFrame; if (!(item.Move(currentDirection, gameTime))) { moveDown = true; } } } /* * Ändert die aktuelle Richtung sofern ein GameItem am Rand ist, * damit nachdem runtergerückt wurde in die andere Richtung sich bewegt wird. */ if (moveDown) { currentDirection = BlockWaveAI.changeDirection(currentDirection); //Alle mann zurück! foreach (IGameItem item in Controllees) { item.Move(currentDirection, gameTime); } } }
/// <summary> /// Generiert einen Controller für eine KI Steuerung. /// </summary> /// <remarks> /// Diese Methode ist bei dem EventHandler der WaveGenerator Klasse zu registrieren. /// Die ControllerEventArgs enthalten die relevanten Daten zur Controller Generierung. /// Das BehaviourEnum beschreibt das vom Model gewünschte Verhalten. /// <see cref="ModelSection.BehaviourEnum"/> /// </remarks> /// <param name="sender">Absender des Events.</param> /// <param name="desiredController">Gibt an welchen Controllers man generiert haben möchte.</param> public void CreateController(object sender, ControllerEventArgs desiredController) { //Für Extraktion der Werte des desired Controller ICollection <IGameItem> controllees; float shootingFrequency; Vector2 velocityIncrease; //Zwischenspeicher für den generierten Controller ICommander temp; //Aus dem Event extrahierte Werte und Überprüfung von desired Controller auf Korrektheit if ((desiredController.Controllees is ICollection <IGameItem>) || desiredController.Controllees.Count >= 1) { controllees = desiredController.Controllees; } else { throw new ArgumentException("is no Collection of GameItem or Collection is Empty", "Controllees"); } shootingFrequency = desiredController.DifficultyLevel.ShootingFrequency; if (desiredController.DifficultyLevel.VelocityIncrease != null) { velocityIncrease = desiredController.DifficultyLevel.VelocityIncrease; } else { throw new ArgumentNullException("VelocityIncreaseMultiplier"); } //Start der Controllererzeugung switch (desiredController.Behaviour) { case BehaviourEnum.BlockMovement: temp = new BlockWaveAI(this, shootingFrequency, controllees, velocityIncrease); //TODO Löschen nach Testphase by CK //TODO Enable für Test folgender Bugs: 12, //temp = new MoveDownTestAI(this, shootingFrequency, controllees, velocityIncrease); //Ende Controllers.Add(temp); break; case BehaviourEnum.MothershipMovement: temp = new MothershipAI(this, shootingFrequency, controllees.First(), velocityIncrease); Controllers.Add(temp); break; } }