package com.rpsg.rpg.object.game; import com.rpsg.rpg.object.hero.Hero; import com.rpsg.rpg.util.Stream; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.List; /** * {@link Hero} 控制器 */ @SuppressWarnings("unchecked") public class Party implements Serializable{ private static final long serialVersionUID = 1L; /**所有Hero,同时包含了{@link #current},只是被加载过的*/ private ArrayList<Hero> all = new ArrayList<>(); /**当前在队伍中的Hero*/ private ArrayList<Hero> current = new ArrayList<>(); /**在队伍中新加入一名{@link Hero}*/ public void add(int id, int index) { current.add(index, create(id)); if(current.size() > 4) current.remove(current.size() - 1); } /**在队伍中新加入一名{@link Hero}*/ public void add(int id) { add(id, 0); } /**根据ID从当前队伍中删除一名{@link Hero}*/ public void removeById(int id) { current.remove(find(current, id)); } /**根据位置从当前队伍中删除一名{@link Hero}*/ public void removeByIndex(int index) { current.remove(index); } /**根据ID,交换当前队伍中的两名{@link Hero}的位置*/ public void swapById(int id, int anotherId) { Hero h1 = find(current, id), h2 = find(current, anotherId); if(h1 == null || h2 == null) return; Collections.swap(current, current.indexOf(h1), current.indexOf(h2)); } /**根据位置,交换当前队伍中的两名{@link Hero}的位置*/ public void swapByIndex(int idx1, int idx2) { Collections.swap(current, idx1, idx2); } /**从队伍中删除一名{@link Hero}*/ /**在{@link #all}里加入一名{@link Hero},如果已经存在则不加了=。=*/ public Hero create(int id) { Hero hero = find(all, id); if(hero == null){ hero = new Hero(id); all.add(hero); } return hero; } private Hero find(List<Hero> list, int id){ return Stream.of(all).filter(h -> h.id == id).findAny().orElse(null); } /**获取当前{@link Hero}*/public List<Hero> current() { return (List<Hero>)current.clone(); }; }