-
Notifications
You must be signed in to change notification settings - Fork 9
/
SilencePower.java
101 lines (85 loc) · 2.4 KB
/
SilencePower.java
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package com.codingame.game.model.commands;
import com.codingame.game.GameException;
import com.codingame.game.model.Direction;
import com.codingame.game.model.PlayerAction;
import com.codingame.game.model.PlayerModel;
public class SilencePower implements IPower {
private int charges;
public static String NAME = "SILENCE";
private PlayerModel playerModel;
public SilencePower(PlayerModel playerModel){
this.playerModel = playerModel;
}
@Override
public String getName() {
return NAME;
}
@Override
public boolean canExecute(PlayerAction action) throws GameException {
if(getMaxValue() > charges){
playerModel.game.addError(playerModel, "Not enough charges of " + NAME);
return false;
}
String[] commands = action.command.split(" ");
if(commands.length != 3){
throw new GameException("Invalid amount of params for Silence, should be: SILENCE direction steps");
}
getDirection(action.command);
getDistance(action.command);
return true;
}
@Override
public void execute(PlayerAction action) throws GameException {
Direction dir = getDirection(action.command);
int dist = getDistance(action.command);
for(int i = 0; i < dist;i++){
playerModel.move(dir);
}
playerModel.summaries.add(NAME);
//playerModel.game.addTooltip(playerModel, NAME);
charges = 0;
}
@Override
public String getActionWindowMessage(PlayerAction action) throws GameException {
return action.command;
}
@Override
public int getMaxValue() {
return 6;
}
@Override
public int getCharges() {
return charges;
}
@Override
public int getPowerIndex() {
return 2;
}
@Override
public void increaseCharges() { charges = Math.min(getMaxValue(), charges+1); }
private int getDistance(String command) throws GameException{
try{
String[] commands = command.split(" ");
Integer distance = Integer.parseInt(commands[2]);
if(distance < 0 || distance > 4) {
throw new GameException("Invalid SILENCE distance");
}
return distance;
}catch (Exception e){
throw new GameException("Invalid distance on SILENCE: " + command);
}
}
private Direction getDirection(String command) throws GameException{
try{
String[] commands = command.split(" ");
Direction dir = Direction.getDir(commands[1]);
return dir;
}
catch (GameException e){
throw new GameException(e.getMessage());
}
catch (Exception e){
throw new GameException("Invalid move command: " + command);
}
}
}