/*
* 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 java.util.List;
import jsettlers.common.buildings.IBuilding;
import jsettlers.common.images.EImageLinkType;
import jsettlers.common.images.OriginalImageLink;
import jsettlers.common.menu.action.EActionType;
import jsettlers.common.movable.ESoldierClass;
import jsettlers.common.movable.ESoldierType;
import jsettlers.graphics.action.ActionFireable;
import jsettlers.graphics.action.SoldierAction;
import jsettlers.graphics.map.controls.original.panel.selection.BuildingState;
import jsettlers.main.android.R;
import jsettlers.main.android.core.controls.ActionClickListener;
import jsettlers.main.android.core.controls.ActionControls;
import jsettlers.main.android.core.controls.DrawControls;
import jsettlers.main.android.core.controls.DrawListener;
import jsettlers.main.android.gameplay.ImageLinkFactory;
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;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TableLayout;
/**
* Created by tompr on 12/01/2017.
*/
public class OccupiedFeature extends SelectionFeature implements DrawListener {
private static final OriginalImageLink SOILDER_MISSING = new OriginalImageLink(EImageLinkType.GUI, 3, 45, 0);
private static final OriginalImageLink SOILDER_COMING = new OriginalImageLink(EImageLinkType.GUI, 3, 48, 0);
private static final String imageMaximumSoldiers = "original_3_GUI_39";
private static final String imageAddSwordsman = "original_3_GUI_27";
private static final String imageAddBowman = "original_3_GUI_21";
private static final String imageAddPikeman = "original_3_GUI_24";
private static final String imageMinimumSoldiers = "original_3_GUI_42";
private static final String imageRemoveSwordsman = "original_3_GUI_36";
private static final String imageRemoveBowman = "original_3_GUI_30";
private static final String imageRemovePikeman = "original_3_GUI_33";
private final ActionControls actionControls;
private final DrawControls drawControls;
private TableLayout controlsLayout;
private LinearLayout infantryLayout;
private LinearLayout bowmenLayout;
private LinearLayout.LayoutParams occupiedLayoutParams;
private LinearLayout.LayoutParams waitingLayoutParams;
public OccupiedFeature(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);
InGameButton maximumSoldiersButton = (InGameButton) getView().findViewById(R.id.image_view_maximum_soldiers);
InGameButton addSwordsmanButton = (InGameButton) getView().findViewById(R.id.image_view_add_swordsman);
InGameButton addBowmanButton = (InGameButton) getView().findViewById(R.id.image_view_add_bowman);
InGameButton addPikemanButton = (InGameButton) getView().findViewById(R.id.image_view_add_pikeman);
InGameButton minimumSolidersButton = (InGameButton) getView().findViewById(R.id.image_view_minimum_soldiers);
InGameButton removeSwordsmanButton = (InGameButton) getView().findViewById(R.id.image_view_remove_swordsman);
InGameButton removeBowmanButton = (InGameButton) getView().findViewById(R.id.image_view_remove_bowman);
InGameButton removePikemanButton = (InGameButton) getView().findViewById(R.id.image_view_remove_pikeman);
controlsLayout = (TableLayout) getView().findViewById(R.id.layout_occupier_controls);
infantryLayout = (LinearLayout) getView().findViewById(R.id.layout_infantry);
bowmenLayout = (LinearLayout) getView().findViewById(R.id.layout_bowmen);
OriginalImageProvider.get(imageMaximumSoldiers).setAsImage(maximumSoldiersButton.getImageView());
OriginalImageProvider.get(imageAddSwordsman).setAsImage(addSwordsmanButton.getImageView());
OriginalImageProvider.get(imageAddBowman).setAsImage(addBowmanButton.getImageView());
OriginalImageProvider.get(imageAddPikeman).setAsImage(addPikemanButton.getImageView());
OriginalImageProvider.get(imageMinimumSoldiers).setAsImage(minimumSolidersButton.getImageView());
OriginalImageProvider.get(imageRemoveSwordsman).setAsImage(removeSwordsmanButton.getImageView());
OriginalImageProvider.get(imageRemoveBowman).setAsImage(removeBowmanButton.getImageView());
OriginalImageProvider.get(imageRemovePikeman).setAsImage(removePikemanButton.getImageView());
occupiedLayoutParams = new LinearLayout.LayoutParams(0, 0);
occupiedLayoutParams.weight = 1;
occupiedLayoutParams.height = getContext().getResources().getDimensionPixelSize(R.dimen.menu_tile_occupied_height);
waitingLayoutParams = new LinearLayout.LayoutParams(0, 0);
waitingLayoutParams.weight = 1;
waitingLayoutParams.height = getContext().getResources().getDimensionPixelSize(R.dimen.menu_tile_waiting_height);
maximumSoldiersButton.setOnClickListener(new ActionClickListener(actionControls, EActionType.SOLDIERS_ALL));
addSwordsmanButton.setOnClickListener(new SingleSoldierClickListener(actionControls, EActionType.SOLDIERS_MORE, ESoldierType.SWORDSMAN));
addBowmanButton.setOnClickListener(new SingleSoldierClickListener(actionControls, EActionType.SOLDIERS_MORE, ESoldierType.BOWMAN));
addPikemanButton.setOnClickListener(new SingleSoldierClickListener(actionControls, EActionType.SOLDIERS_MORE, ESoldierType.PIKEMAN));
minimumSolidersButton.setOnClickListener(new ActionClickListener(actionControls, EActionType.SOLDIERS_ONE));
removeSwordsmanButton.setOnClickListener(new SingleSoldierClickListener(actionControls, EActionType.SOLDIERS_LESS, ESoldierType.SWORDSMAN));
removeBowmanButton.setOnClickListener(new SingleSoldierClickListener(actionControls, EActionType.SOLDIERS_LESS, ESoldierType.BOWMAN));
removePikemanButton.setOnClickListener(new SingleSoldierClickListener(actionControls, EActionType.SOLDIERS_LESS, ESoldierType.PIKEMAN));
update();
drawControls.addDrawListener(this);
}
@Override
public void finish() {
super.finish();
drawControls.removeDrawListener(this);
}
@Override
public void draw() {
if (hasNewState()) {
getView().post(() -> update());
}
}
private void update() {
if (getBuildingState().isOccupied()) {
controlsLayout.setVisibility(View.VISIBLE);
infantryLayout.removeAllViews();
bowmenLayout.removeAllViews();
addOccupiers(infantryLayout, getBuildingState().getOccupiers(ESoldierClass.INFANTRY));
addOccupiers(bowmenLayout, getBuildingState().getOccupiers(ESoldierClass.BOWMAN));
}
}
private void addOccupiers(LinearLayout container, List<BuildingState.OccupierState> occupierStates) {
for (BuildingState.OccupierState occupierState : occupierStates) {
ImageView occupierImageView = new ImageView(getContext());
if (occupierState.isMissing()) {
OriginalImageProvider.get(SOILDER_MISSING).setAsImage(occupierImageView);
occupierImageView.setLayoutParams(waitingLayoutParams);
} else if (occupierState.isComming()) {
OriginalImageProvider.get(SOILDER_COMING).setAsImage(occupierImageView);
occupierImageView.setLayoutParams(waitingLayoutParams);
} else {
OriginalImageProvider.get(ImageLinkFactory.get(occupierState.getMovable().getMovableType())).setAsImage(occupierImageView);
occupierImageView.setLayoutParams(occupiedLayoutParams);
}
container.addView(occupierImageView);
}
}
private class SingleSoldierClickListener extends ActionClickListener {
private SingleSoldierClickListener(ActionFireable actionFireable, EActionType actionType, ESoldierType soldierType) {
super(actionFireable, new SoldierAction(actionType, soldierType));
}
}
}