Bot

Ziel

Ziel des Beispielbots ist es, zum Kunden zu laufen und eine Bestellung aufzunehmen.
Also als erstes müssen wir zu einem customer ActionPoint laufen.
Danach müssen wir diesen ActionPoint nutzen bis wir eine Bestellung aufgenommen haben.


import com.apogames.kitchenchef.ai.Cooking;
import com.apogames.kitchenchef.ai.KitchenInformation;
import com.apogames.kitchenchef.ai.KitchenPlayerAI;
import com.apogames.kitchenchef.ai.Student;
import com.apogames.kitchenchef.ai.action.Action;
import com.apogames.kitchenchef.ai.actionPoints.ActionPoint;
import com.apogames.kitchenchef.ai.player.Player;
import com.apogames.kitchenchef.game.enums.KitchenActionPointEnum;
import com.apogames.kitchenchef.game.pathfinding.PathResult;

import java.util.List;

@Student(author = "Dirk Aporius", matrikelnummer = 815)
public class GoToCustomer extends KitchenPlayerAI {

    private KitchenInformation information;

    @Override
    public String getName() {
        return "GoToCustomer";
    }

    @Override
    public void update(KitchenInformation information, List<Player> players) {
        this.information = information;

        // betrachte nur den ersten Spieler
        Player player = players.get(0);

        Cooking cooking = player.getCooking();
        if (cooking == null) {
            this.go(player, KitchenActionPointEnum.CUSTOMER);
        } else {
            if (cooking.getStatus() == CookingStatus.NEEDED_DISH) {
                this.go(player, KitchenActionPointEnum.DISH_TAKING);
            } else {
                // mache gar nichts und stehe nur rum, hier könnte dann unterschieden werden, welchen status das Cooking hat etc
                player.setAction(Action.idle());
            }
        }
    }

    // Hilfsmethode, um einen bestimmten ActionPoint zu finden
    private void go(Player player, KitchenActionPointEnum actionPointEnum) {
        for (ActionPoint point : information.getActionPoints()) {
            if (point.getContent() == actionPointEnum) {
                // wenn der Spieler auf dem ActionPoint steht, dann benutze ihn einfach
                if (point.isPlayerIn(player)) {
                    player.setAction(Action.use());
                } else {
                    // hole den kürztesten Weg zwischen dem player und dem ActionPoint
                    PathResult wayFromTo = information.getWays().findWayFromTo(information, player, point.getPosition());
                    // setzte als Action -> bewege dich mit dem Vektor aus der Wegfindung
                    player.setAction(Action.move(wayFromTo.getMovement()));
                }
                return;
            }
        }
    }
}