public override bool eventHappened(GameRuleEvent gre) { //make sure that we have the right event if (gre.eventType != eventType) return false; //make sure the types match up System.Type eventTargetType = gre.target.GetType(); if (gre.source.GetType() != sourceType || eventTargetType != targetType) return false; //field objects have a few more things we need to check if (targetType == typeof(FieldObject)) { //make sure it's the right field object if (param != gre.target.sportName) return false; //collisions don't happen between players/balls and field objects on the players' teams if (gre.source is TeamPlayer && gre.source.team == gre.target.team) return false; else if (gre.source is Ball) { TeamPlayer ballPlayer = ((Ball)(gre.source)).currentPlayer; if (ballPlayer != null && ballPlayer.team == gre.target.team) return false; } } //all types match up and there are no other disqualifications, the condition happened return true; }
public virtual bool eventHappened(GameRuleEvent gre) { return false; }
public void sendEvent(GameRuleEvent gre) { if (condition.eventHappened(gre)) { if (action is GameRuleEffectAction) { GameRuleEffectAction effectAction = (GameRuleEffectAction)action; SportsObject target = effectAction.takeAction(gre.source); if (target != null) startFlash(target); } } }
public void SendEvent(GameRuleEvent gre) { if (gameOver) return; //add to stats if (gre.eventType == GameRuleEventType.Kick) gameStatKicks[((TeamPlayer)gre.source).team] += 1; else if (gre.eventType == GameRuleEventType.Grab) gameStatGrabs[((TeamPlayer)gre.source).team] += 1; else if (gre.eventType == GameRuleEventType.Smack) gameStatSmacks[((TeamPlayer)gre.source).team] += 1; else if (gre.eventType == GameRuleEventType.Bump) { if (gre.source is TeamPlayer) gameStatBumps[((TeamPlayer)gre.source).team] += 1; if (gre.target is TeamPlayer) gameStatBumps[((TeamPlayer)gre.target).team] += 1; } foreach (GameRule rule in effectRulesList) { rule.sendEvent(gre); } //if any of the metarules intercepted, give them a flash foreach (GameRule rule in metaRulesList) { GameRuleMetaRule metaRule = ((GameRuleMetaRuleAction)(rule.action)).innerMetaRule; if (metaRule.lastInterceptionSource != null) { rule.startFlash(metaRule.lastInterceptionSource); metaRule.lastInterceptionSource = null; } } //check wait timers and remove any if they happen //also if both players are frozen, unfreeze players on the team that was frozen longer int frozenTeam = 0; for (int i = waitTimers.Count - 1; i >= 0; i--) { GameRuleActionWaitTimer waitTimer = waitTimers[i]; if (waitTimer.effect is GameRuleFreezeEffect) { //this is the most recent team frozen, it will stay frozen if (frozenTeam == 0) frozenTeam = waitTimer.target.team; //unfreeze all players from the other team(s) else if (frozenTeam != waitTimer.target.team) { waitTimer.cancelAction(); waitTimers.RemoveAt(i); continue; } } if (waitTimer.eventHappened(gre)) waitTimers.RemoveAt(i); } }
public bool eventHappened(GameRuleEvent gre) { if (condition.eventHappened(gre, source)) { cancelAction(); return true; } return false; }