package com.rpsg.rpg.object.game; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.badlogic.gdx.utils.JsonValue; import com.rpsg.rpg.object.prop.PropKey; /** * GDX-RPG 可成长的{@link Target}<br> * 额外的拥有了经验和等级的属性,并且当 当前经验 > 到下一级的经验时,将会升级并且更新玩家的属性 */ public class GrowableTarget extends Target{ public GrowableTarget(JsonValue props, JsonValue grow) { super(props); for(JsonValue value : grow) this.grow.put(PropKey.valueOf(value.name), value.asInt()); } private static final long serialVersionUID = 1L; /**每次升级增加的玩家属性*/ public Map<PropKey, Integer> grow = new HashMap<>(); /**给该target增加经验,如果因此升级的话,返回的list包含了升级后的属性*/ public List<Map<PropKey, Integer>> addExp(int exp) { int currentExp = props.get(PropKey.exp), maxExp = props.get(PropKey.nextExp); List<Map<PropKey, Integer>> list = new ArrayList<>(); list.add(cloneProps()); if(currentExp + exp < maxExp){ props.put(PropKey.exp, currentExp + exp); }else{ //升级 int leftExp = currentExp + exp - maxExp; props.put(PropKey.level, props.get(PropKey.level) + 1); props.put(PropKey.exp, props.get(PropKey.nextExp)); props.put(PropKey.nextExp, props.get(PropKey.nextExp) + 1000);//TODO //升级各种属性 for(PropKey key : grow.keySet()) props.put(key, props.get(key) + grow.get(key)); list.addAll(addExp(leftExp)); } return list; } private Map<PropKey, Integer> cloneProps() { Map<PropKey, Integer> map = new HashMap<>(); for(PropKey key : props.keySet()) map.put(key, props.get(props).intValue()); return map; } }