/* * Copyright (c) 2017 * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. */ package jsettlers.main.android.gameplay.ui.fragments.menus.selection.features; import jsettlers.common.buildings.IBuilding; import jsettlers.common.images.ImageLink; import jsettlers.common.material.EPriority; import jsettlers.common.menu.action.EActionType; import jsettlers.common.menu.action.IAction; import jsettlers.graphics.action.SetBuildingPriorityAction; import jsettlers.graphics.map.controls.original.panel.selection.BuildingState; import jsettlers.main.android.R; import jsettlers.main.android.core.controls.ActionControls; import jsettlers.main.android.core.controls.ActionListener; import jsettlers.main.android.core.controls.DrawControls; import jsettlers.main.android.core.controls.DrawListener; import jsettlers.main.android.gameplay.navigation.MenuNavigator; import jsettlers.main.android.gameplay.ui.customviews.InGameButton; import jsettlers.main.android.utils.OriginalImageProvider; import android.view.View; /** * Created by tompr on 10/01/2017. */ public class PriorityFeature extends SelectionFeature implements ActionListener, DrawListener { private static final String stoppedImage = "original_3_GUI_192"; private static final String lowImage = "original_3_GUI_195"; private static final String highImage = "original_3_GUI_378"; private final ActionControls actionControls; private final DrawControls drawControls; private InGameButton priorityButton; public PriorityFeature(View view, IBuilding building, MenuNavigator menuNavigator, ActionControls actionControls, DrawControls drawControls) { super(view, building, menuNavigator); this.actionControls = actionControls; this.drawControls = drawControls; } @Override public void initialize(BuildingState buildingState) { super.initialize(buildingState); EPriority[] supportedPriorities = getBuildingState().getSupportedPriorities(); if (supportedPriorities.length > 1) { priorityButton = (InGameButton) getView().findViewById(R.id.image_view_priority); priorityButton.setVisibility(View.VISIBLE); setImageForPriority(getBuilding().getPriority()); priorityButton.setOnClickListener(view -> actionControls.fireAction(new SetBuildingPriorityAction(getNextPriority()))); } actionControls.addActionListener(this); drawControls.addDrawListener(this); } @Override public void finish() { super.finish(); actionControls.removeActionListener(this); drawControls.removeDrawListener(this); } @Override public void actionFired(IAction action) { if (action.getActionType() == EActionType.SET_BUILDING_PRIORITY) { SetBuildingPriorityAction priorityAction = (SetBuildingPriorityAction) action; setImageForPriority(priorityAction.getNewPriority()); } } @Override public void draw() { if (hasNewState()) { if (getBuildingState().getSupportedPriorities().length <= 1) { getView().post(() -> priorityButton.setVisibility(View.INVISIBLE)); } } } private EPriority getNextPriority() { EPriority[] supported = getBuildingState().getSupportedPriorities(); EPriority current = getBuilding().getPriority(); EPriority next = supported[0]; for (int i = 0; i < supported.length; i++) { if (supported[i] == current) { next = supported[(i + 1) % supported.length]; } } return next; } private void setImageForPriority(EPriority priority) { ImageLink imageLink = getImageLink(priority); getView().post(() -> OriginalImageProvider.get(imageLink).setAsImage(priorityButton.getImageView())); } private ImageLink getImageLink(EPriority priority) { switch (priority) { case STOPPED: return ImageLink.fromName(stoppedImage, 0); case LOW: return ImageLink.fromName(lowImage, 0); case HIGH: return ImageLink.fromName(highImage, 0); default: throw new RuntimeException("Image not found for priority " + priority.name()); } } }