forked from External/mage
* GUI: new reworked GUI and card render engine, card icons and dozens of other fixes (see full list in related PR);
This commit is contained in:
parent
df98cc3e62
commit
a1da5ef437
304 changed files with 7266 additions and 5093 deletions
136
Mage/src/main/java/mage/players/PlayableObjectStats.java
Normal file
136
Mage/src/main/java/mage/players/PlayableObjectStats.java
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
package mage.players;
|
||||
|
||||
import mage.abilities.ActivatedAbility;
|
||||
import mage.abilities.PlayLandAbility;
|
||||
import mage.abilities.SpellAbility;
|
||||
import mage.abilities.mana.BasicManaAbility;
|
||||
import mage.constants.SpellAbilityType;
|
||||
import mage.util.Copyable;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* Contains stats with playable abilities for one object
|
||||
*
|
||||
* @author JayDi85
|
||||
*/
|
||||
public class PlayableObjectStats implements Serializable, Copyable<PlayableObjectStats> {
|
||||
|
||||
// map: ability.id -> ability.rules
|
||||
List<PlayableObjectRecord> basicManaAbilities = new ArrayList<>();
|
||||
List<PlayableObjectRecord> basicPlayAbilities = new ArrayList<>();
|
||||
List<PlayableObjectRecord> basicCastAbilities = new ArrayList<>();
|
||||
List<PlayableObjectRecord> other = new ArrayList<>();
|
||||
|
||||
public PlayableObjectStats() {
|
||||
}
|
||||
|
||||
public PlayableObjectStats(List<ActivatedAbility> activatedAbilities) {
|
||||
load(activatedAbilities);
|
||||
}
|
||||
|
||||
public void load(List<ActivatedAbility> activatedAbilities) {
|
||||
this.basicManaAbilities.clear();
|
||||
this.basicPlayAbilities.clear();
|
||||
this.basicCastAbilities.clear();
|
||||
this.other.clear();
|
||||
|
||||
// split abilities to types (it allows to enable or disable playable icon)
|
||||
for (ActivatedAbility ability : activatedAbilities) {
|
||||
List<PlayableObjectRecord> dest;
|
||||
if (ability instanceof BasicManaAbility) {
|
||||
dest = this.basicManaAbilities;
|
||||
} else if (ability instanceof PlayLandAbility) {
|
||||
dest = this.basicPlayAbilities;
|
||||
} else if (ability instanceof SpellAbility && (((SpellAbility) ability).getSpellAbilityType() == SpellAbilityType.BASE)) {
|
||||
dest = this.basicCastAbilities;
|
||||
} else {
|
||||
dest = this.other;
|
||||
}
|
||||
|
||||
// collect info about abilities for card icons popup, must be simple online text (html symbols are possible)
|
||||
// some long html tags can be miss (example: ability extra hint) -- that's ok
|
||||
String shortInfo = ability.toString();
|
||||
if (shortInfo.length() > 50) {
|
||||
shortInfo = shortInfo.substring(0, 50 - 1) + "...";
|
||||
}
|
||||
shortInfo = shortInfo.replace("<br>", " ");
|
||||
shortInfo = shortInfo.replace("\n", " ");
|
||||
dest.add(new PlayableObjectRecord(ability.getId(), shortInfo));
|
||||
}
|
||||
}
|
||||
|
||||
public PlayableObjectStats(final PlayableObjectStats source) {
|
||||
for (PlayableObjectRecord rec : source.basicManaAbilities) {
|
||||
this.basicManaAbilities.add(rec.copy());
|
||||
}
|
||||
for (PlayableObjectRecord rec : source.basicPlayAbilities) {
|
||||
this.basicPlayAbilities.add(rec.copy());
|
||||
}
|
||||
for (PlayableObjectRecord rec : source.basicCastAbilities) {
|
||||
this.basicCastAbilities.add(rec.copy());
|
||||
}
|
||||
for (PlayableObjectRecord rec : source.other) {
|
||||
this.other.add(rec.copy());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayableObjectStats copy() {
|
||||
return new PlayableObjectStats(this);
|
||||
}
|
||||
|
||||
public int getPlayableAmount() {
|
||||
return this.basicManaAbilities.size()
|
||||
+ this.basicPlayAbilities.size()
|
||||
+ this.basicCastAbilities.size()
|
||||
+ this.other.size();
|
||||
}
|
||||
|
||||
public List<String> getPlayableAbilities() {
|
||||
List<String> all = new ArrayList<>();
|
||||
all.addAll(this.basicManaAbilities.stream().map(PlayableObjectRecord::getValue).sorted().collect(Collectors.toList()));
|
||||
all.addAll(this.basicPlayAbilities.stream().map(PlayableObjectRecord::getValue).sorted().collect(Collectors.toList()));
|
||||
all.addAll(this.basicCastAbilities.stream().map(PlayableObjectRecord::getValue).sorted().collect(Collectors.toList()));
|
||||
all.addAll(this.other.stream().map(PlayableObjectRecord::getValue).sorted().collect(Collectors.toList()));
|
||||
return all;
|
||||
}
|
||||
|
||||
public int getPlayableImportantAmount() {
|
||||
// return only important abilities (e.g. show it as card icons)
|
||||
return this.other.size();
|
||||
}
|
||||
}
|
||||
|
||||
class PlayableObjectRecord implements Serializable, Copyable<PlayableObjectRecord> {
|
||||
|
||||
UUID id;
|
||||
String value;
|
||||
|
||||
public PlayableObjectRecord(UUID id, String value) {
|
||||
this.id = id;
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
private PlayableObjectRecord(final PlayableObjectRecord record) {
|
||||
this.id = record.id;
|
||||
this.value = record.value;
|
||||
}
|
||||
|
||||
public UUID getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlayableObjectRecord copy() {
|
||||
return new PlayableObjectRecord(this);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue