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;
 }
Ejemplo n.º 3
0
 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);
         }
     }
 }
Ejemplo n.º 4
0
    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);
        }
    }
Ejemplo n.º 5
0
 public bool eventHappened(GameRuleEvent gre)
 {
     if (condition.eventHappened(gre, source)) {
         cancelAction();
         return true;
     }
     return false;
 }