public void ScriptCompletion(IDoomEvent doomEvent, string scriptName) { AnimationScriptEvent ase = (AnimationScriptEvent) doomEvent; if (ase.ScriptName == scriptName) { if (_actionInformation.ActionType == ActionType.Attack) GameState.ActiveUnit.SetActioned(); if (_actionInformation.ActionType == ActionType.Move) GameState.ActiveUnit.SetMoved(); if (_actionInformation.ActionType == ActionType.Wait) { GameState.ActiveUnit.EndTurn(); GameState.ActiveUnit = GameState.GetNextActiveUnit(); NextState = GameState.ActiveUnit == null ? new StateTransition(() => new FreeCamera(GameState, null)) : new StateTransition(() => new ActionSelection(GameState, GameState.ActiveUnit)); } else if(!GameState.ActiveUnit.CanAction() && !GameState.ActiveUnit.CanMove() && !GameState.IsAIControlled(GameState.ActiveUnit)) { NextState = new StateTransition(() => new SelectWaitDirection(GameState)); } else { NextState = new StateTransition(() => new ActionSelection(GameState, GameState.ActiveUnit)); } } }
public void DispatchEvent(IDoomEvent evt, string senderName) { var interestedListeners = (from l in callbacks where l.type == evt.EventType && (l.SenderName == null || l.SenderName == senderName) && (evt.ListenerNames == null || evt.ListenerNames.Length == 0 || evt.ListenerNames.Contains(l.ListenerName)) select l).ToList(); foreach (var intListener in interestedListeners) { //_log.Debug("Found interested listener " + intListener.ListenerName + " for event " + evt); intListener.callback(evt); } }
public void MoveCamera(IDoomEvent evt) { var cameraEvent = (CameraEvent)evt; Vector3 sideVector = Vector3.Cross(Up, Direction); sideVector.Normalize(); if (cameraEvent.CameraMovementMode == CameraMovementMode.Pan) { Position += sideVector * PanModifier * cameraEvent.MouseDelta.X; Position += Up * PanModifier * cameraEvent.MouseDelta.Y; } else { if (cameraEvent.ForwardPressed) Position += FreelookSpeed * Direction; else if (cameraEvent.BackwardPressed) Position -= FreelookSpeed * Direction; if (cameraEvent.StrafeLeftPressed) Position += FreelookSpeed * sideVector; else if (cameraEvent.StrafeRightPressed) Position -= FreelookSpeed * sideVector; if (cameraEvent.MouseDelta.X != 0) { Direction = Vector3.Transform(Direction, Matrix.CreateFromAxisAngle(Up, -MathHelper.PiOver4/360* cameraEvent.MouseDelta.X)); } if (cameraEvent.MouseDelta.Y != 0) { Direction = Vector3.Transform(Direction, Matrix.CreateFromAxisAngle(sideVector, MathHelper.PiOver4/360* cameraEvent.MouseDelta.Y)); } } UpdateView(); }
public void OnRemoveActorFromTile(IDoomEvent evt) { var actorEvent = (ActorEvent) evt; var tile = Level.GetTileOfActor(actorEvent.Actor); if (tile != null) { tile.SetActor(null); } }
public void OnDisplayDamage(IDoomEvent displayDamageEvent) { var evt = (DamageEvent) displayDamageEvent; float yOffset = evt.DamagedActor.Height + DamageFont.MeasureString(evt.Damage.ToString()).Y; var floatingText = new TimedText(evt.Damage.ToString(), evt.DamagedActor.Position + new Vector3(0, yOffset, 0), DamageFont, 1500, 1, Color.Red, Color.Black); FloatingTexts.Add(floatingText); Log.Debug("Actor " + evt.DamagedActor.ActorId + " took " + evt.Damage + " damage."); }
public void OnDespawnText(IDoomEvent despawnTextEvent) { var evt = (TextEvent) despawnTextEvent; FloatingTexts.Remove(evt.Text); }
public void OnChargeTimeReached(IDoomEvent doomEvent) { if (ActiveUnit == null) { var turnEvent = (TurnEvent)doomEvent; ActiveUnit = turnEvent.Actor; _stateMachine.SetState(new ActionSelection(this, ActiveUnit)); } }
public void OnActorSpawn(IDoomEvent evt) { var actorEvent = (ActorEvent)evt; Level.Actors.Add(actorEvent.Actor); }
public void OnActorDespawn(IDoomEvent evt) { var actorEvent = (DespawnActorEvent) evt; Level.Actors.Remove(actorEvent.DespawnTarget); }
public void OnActorDeath(IDoomEvent evt) { if (!Level.Actors.Any(x => x.Team == 1 && !x.IsDead())) { _stateMachine.SetState(new EndGameState(this, false)); } else if (!Level.Actors.Any(x => x.Team == 2 && !x.IsDead())) { _stateMachine.SetState(new EndGameState(this, true)); } }
public static void OnPlaySound(IDoomEvent soundEvent) { var evt = (SoundEvent) soundEvent; PlaySound(evt.SoundName); }
public static void DispatchEvent(IDoomEvent evt, string senderName) { _queue.Enqueue(new EventWithSender(evt, senderName)); }
public EventWithSender(IDoomEvent evt, string senderName) { DoomEvent = evt; SenderName = senderName; }