aboutsummaryrefslogtreecommitdiff
path: root/src/esieequest/controller/commands/TakeCommand.java
blob: b92f4e523734c72aab68ee937aad8f22ec70ea73 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package esieequest.controller.commands;

import esieequest.model.Game;
import esieequest.model.Text;
import esieequest.model.items.Item;
import esieequest.model.map.Room;
import esieequest.model.map.Side;
import esieequest.view.Viewable;

/**
 * Allows the player to take an Item from a Room and transfer it to his
 * inventory.
 * 
 * @author Pacien TRAN-GIRARD
 */
public class TakeCommand implements Executable {

	@Override
	public void execute(final String argument, final Game game, final Viewable view) {

		Item item;
		if (argument != null) {
			final String itemName = argument;
			final Room currentRoom = game.getPlayer().getCurrentRoom();
			if (!currentRoom.hasItem(itemName)) {
				view.echo(Text.NO_SUCH_ITEM.toString());
				return;
			}
			item = currentRoom.getItem(itemName);
		} else {
			final Side currentSide = game.getPlayer().getCurrentSide();
			if (currentSide.getInventory().getSize() != 1) {
				view.echo(Text.NO_ITEM.toString());
				return;
			}
			item = currentSide.getInventory().getItem();
		}

		// handle inventory weight limit
		final int maximumWeight = game.getPlayer().getInventoryWeightLimit();
		final int futureWeight = game.getPlayer().getInventory().getTotalWeight() + item.getWeight();
		if (futureWeight > maximumWeight) {
			view.echo(Text.INVENTORY_FULL.toString());
			return;
		}

		game.getPlayer().getCurrentRoom().removeItem(item);
		game.getPlayer().getInventory().putItem(item);

		view.updateLocation(game.getPlayer().getCurrentRoom(), game.getPlayer().getCurrentDirection(), game.getPlayer().getCurrentSide(), game.getPlayer().canGoBack());
		view.updateInventory(game.getPlayer().getInventory());

	}

}