示例#1
0
    void HandleDoorTile(Tile tile)
    {
        sim.AddEvent(PlayerEvent.Info("Found a door"));
        var prompt = string.Format("Leave the room or look again?");

        sim.AddEvent(PlayerEvent.PromptChoice(prompt,
                                              Choice.SwipeLeft("leave", "Leave"),
                                              Choice.SwipeRight("stay", "Stay")));
    }
示例#2
0
    public void StartBattle(Mob mob)
    {
        sim.currentMob            = mob;
        sim.player.lastBattleMove = null;
        sim.player.initiative     = 0f;
        mob.initiative            = 0f;

        sim.AddEvent(PlayerEvent.Info("! [" + mob.name + "]"));
        Continue();
    }
示例#3
0
    void HandleInteractibleTile(Tile tile)
    {
        sim.AddEvent(PlayerEvent.Info("Found interactible"));
        var interactible = InteractibleStore.Find(tile.contentId);
        var prompt       = string.Format("You see {0}", interactible.name);

        sim.AddEvent(PlayerEvent.PromptChoice(prompt,
                                              Choice.SwipeLeft("investigate", "Investigate"),
                                              Choice.SwipeRight("ignore", "Ignore")));
        sim.discoveredObjects.Add(interactible.id);
    }
示例#4
0
    public void GainExperience()
    {
        var experienceProcessor = new ExperienceProcessor(sim.player, currentMob);
        var amount  = experienceProcessor.ExperienceGain();
        var ev      = PlayerEvent.Info(string.Format("+{0} experience", amount));
        var trigger = new Trigger(Trigger.Type.PlayerStatChange);

        //trigger.data[Trigger.statKey] = Stat.xp;
        trigger.data[Trigger.statChangeAmountKey] = amount;
        ev.Triggers.Add(trigger);

        sim.AddEvent(ev);
    }
示例#5
0
    public void Gold()
    {
        // Gold
        if (tpd.RollPercent(currentMob.goldChance))
        {
            var goldGenerator = new GoldGenerator(sim.player, currentMob);
            var amount        = goldGenerator.Mob();
            var ev            = PlayerEvent.Info(string.Format("{0} gold", amount));
            var trigger       = new Trigger(Trigger.Type.PlayerResourceChange);
            trigger.data[Trigger.resourceKey]       = Constants.goldAttr;
            trigger.data[Trigger.resourceAmountKey] = amount;

            ev.Triggers.Add(trigger);
            sim.AddEvent(ev);
        }
    }
示例#6
0
    public void Continue()
    {
        if (!PlayerAlive())
        {
            // hand player dead situation
        }

        if (!MobAlive())
        {
            MobDeath();
            Victory();
        }

        var    initiativeProcessor = new InitiativeProcessor(sim.player, currentMob);
        string nextMove            = initiativeProcessor.NextMove();

        if (nextMove == InitiativeProcessor.playerIdent)
        {
            var playerCombatProcessor = new PlayerCombatProcessor(sim);
            playerCombatProcessor.TakeAction();
        }
        else
        {
            var mobCombatProcessor = new MobCombatProcessor(sim);
            mobCombatProcessor.TakeAction();
        }

        if (iterationCount >= iterationLimit)
        {
            sim.AddEvent(PlayerEvent.Info("[DEV] Iteration limit reached! Something went wrong."));
        }

        if (sim.requiresInput)
        {
            return;
        }
        else
        {
            Debug.Log("Iterating battle processor continue");
            ++iterationCount;
            Continue();
        }
    }
示例#7
0
 public void TakeTurn()
 {
     sim.AddEvent(PlayerEvent.Info("enemy turn..."));
     sim.EndGameTurn();
 }
示例#8
0
 void TargetDoor()
 {
     sim.AddEvent(PlayerEvent.Info("Nothing intersting... heading for door"));
 }
示例#9
0
 public void MobDeath()
 {
     sim.AddEvent(PlayerEvent.Info(currentMob.name + " dies!"));
 }