net.gtaun.wl.race.dialog.TrackCheckpointEditDialog.java Source code

Java tutorial

Introduction

Here is the source code for net.gtaun.wl.race.dialog.TrackCheckpointEditDialog.java

Source

/**
 * WL Race Plugin
 * Copyright (C) 2013 MK124
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package net.gtaun.wl.race.dialog;

import java.util.NoSuchElementException;
import java.util.Scanner;

import net.gtaun.shoebill.common.dialog.AbstractDialog;
import net.gtaun.shoebill.common.dialog.ListDialogItemRadio;
import net.gtaun.shoebill.constant.RaceCheckpointType;
import net.gtaun.shoebill.data.Color;
import net.gtaun.shoebill.data.Radius;
import net.gtaun.shoebill.object.Player;
import net.gtaun.util.event.EventManager;
import net.gtaun.wl.common.dialog.WlInputDialog;
import net.gtaun.wl.common.dialog.WlListDialog;
import net.gtaun.wl.lang.LocalizedStringSet.PlayerStringSet;
import net.gtaun.wl.race.impl.RaceServiceImpl;
import net.gtaun.wl.race.track.Track;
import net.gtaun.wl.race.track.TrackCheckpoint;

import org.apache.commons.lang3.StringUtils;

public class TrackCheckpointEditDialog {
    public static WlListDialog create(Player player, EventManager eventManager, AbstractDialog parent,
            RaceServiceImpl service, TrackCheckpoint checkpoint, boolean isCreateNew) {
        PlayerStringSet stringSet = service.getLocalizedStringSet().getStringSet(player);
        Track track = checkpoint.getTrack();

        if (track.getCheckpoints().contains(checkpoint) == false)
            player.setLocation(checkpoint.getLocation());

        return WlListDialog.create(player, eventManager).parentDialog(parent)
                .caption(() -> stringSet.format("Dialog.TrackCheckpointEditDialog.Caption", track.getName(),
                        checkpoint.getNumber()))

                .item(() -> stringSet.get("Common.OK"), () -> isCreateNew,
                        (i) -> i.getCurrentDialog().showParentDialog())

                .item(() -> stringSet.get("Dialog.TrackCheckpointEditDialog.Teleport"), () -> {
                    if (player.getLocation().equals(checkpoint.getLocation()))
                        return false;
                    return track.getCheckpoints().contains(checkpoint);
                }, (i) -> {
                    player.setLocation(checkpoint.getLocation());
                    i.getCurrentDialog().show();
                })

                .item(() -> {
                    Radius loc = checkpoint.getLocation();
                    String item = stringSet.format("Dialog.TrackCheckpointEditDialog.Position", loc.getX(),
                            loc.getY(), loc.getZ(), loc.getInteriorId());
                    return item;
                }, (i) -> {
                    Radius oldLoc = checkpoint.getLocation();
                    String caption = stringSet.get("Dialog.TrackCheckpointEditPositionDialog.Caption");
                    String message = stringSet.format("Dialog.TrackCheckpointEditPositionDialog.Text",
                            oldLoc.getX(), oldLoc.getY(), oldLoc.getZ(), oldLoc.getInteriorId());

                    WlInputDialog.create(player, eventManager).parentDialog(i.getCurrentDialog()).caption(caption)
                            .message(message).onClickOk((d, text) -> {
                                player.playSound(1083);

                                try (Scanner scanner = new Scanner(text)) {
                                    Radius loc = new Radius(scanner.nextFloat(), scanner.nextFloat(),
                                            scanner.nextFloat(), scanner.nextInt(), oldLoc.getWorldId(),
                                            oldLoc.getRadius());
                                    checkpoint.setLocation(loc);
                                    d.showParentDialog();
                                } catch (NoSuchElementException e) {
                                    ((WlInputDialog) d).setAppendMessage(stringSet.get(
                                            "Dialog.TrackCheckpointEditPositionDialog.IllegalFormatAppendMessage"));
                                    i.getCurrentDialog().show();
                                }
                            }).build().show();
                })

                .item(ListDialogItemRadio.create()
                        .selectedIndex(() -> checkpoint.getType() == RaceCheckpointType.NORMAL ? 0 : 1)
                        .itemText(() -> stringSet.get("Dialog.TrackCheckpointEditDialog.Type"))
                        .item(stringSet.get("Track.Checkpoint.Type.Normal"), Color.RED,
                                (i) -> checkpoint.setType(RaceCheckpointType.NORMAL))
                        .item(stringSet.get("Track.Checkpoint.Type.Air"), Color.BLUE,
                                (i) -> checkpoint.setType(RaceCheckpointType.AIR))
                        .onSelect((i) -> i.getCurrentDialog().show()).build())

                .item(() -> stringSet.format("Dialog.TrackCheckpointEditDialog.Size", checkpoint.getSize()),
                        (i) -> {
                            String caption = stringSet.get("Dialog.TrackCheckpointEditSizeDialog.Caption");
                            String message = stringSet.format("Dialog.TrackCheckpointEditSizeDialog.Text",
                                    checkpoint.getSize());

                            WlInputDialog.create(player, eventManager).parentDialog(i.getCurrentDialog())
                                    .caption(caption).message(message).onClickOk((d, text) -> {
                                        player.playSound(1083);

                                        try (Scanner scanner = new Scanner(text)) {
                                            checkpoint.setSize(scanner.nextFloat());
                                            d.showParentDialog();
                                        } catch (NoSuchElementException e) {
                                            ((WlInputDialog) d).setAppendMessage(stringSet.get(
                                                    "Dialog.TrackCheckpointEditSizeDialog.IllegalFormatAppendMessage"));
                                            i.getCurrentDialog().show();
                                        }
                                    }).build().show();
                        })

                .item(() -> {
                    String code = checkpoint.getScript();
                    int lines = StringUtils.countMatches(code, "\n");
                    return stringSet.format("Dialog.TrackCheckpointEditDialog.Script", lines, code.length());
                }, (i) -> {
                    String title = stringSet.format("Dialog.TrackCheckpointEditDialog.CheckpointFormat",
                            checkpoint.getNumber() + 1);
                    String code = checkpoint.getScript();
                    new CodeEditorDialog(player, eventManager, i.getCurrentDialog(), service, title, code,
                            (newCode) -> {
                                checkpoint.setScript(newCode);
                                i.getCurrentDialog().showParentDialog();
                            }).show();
                })

                .item(() -> stringSet.get("Dialog.TrackCheckpointEditDialog.UpdatePosition"), () -> {
                    if (player.getLocation().equals(checkpoint.getLocation()))
                        return false;
                    return track.getCheckpoints().contains(checkpoint);
                }, (i) -> {
                    checkpoint.setLocation(player.getLocation());
                    player.sendMessage(Color.LIGHTBLUE,
                            stringSet.get("Dialog.TrackCheckpointEditDialog.UpdatePositionMessage"));
                    i.getCurrentDialog().show();
                })

                .item(() -> stringSet.get("Dialog.TrackCheckpointEditDialog.Delete"),
                        () -> track.getCheckpoints().contains(checkpoint), (i) -> {
                            track.removeChechpoint(checkpoint);
                        })

                .onClickOk((d, i) -> player.playSound(1083)).build();
    }
}