package org.leumasjaffe.charsheet.model.skill; import org.leumasjaffe.charsheet.model.observable.IntValue; import org.leumasjaffe.observer.Observable; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.experimental.Delegate; import lombok.Setter; import lombok.experimental.FieldDefaults; @AllArgsConstructor @Data @EqualsAndHashCode(callSuper=false) @FieldDefaults(level=AccessLevel.PRIVATE) public class DDSkill extends Observable.Instance { final @Getter(AccessLevel.NONE) @Delegate DDSkillPrototype name; // boolean isClassSkill = false; @Setter(value=AccessLevel.PRIVATE) IntValue ranks = new IntValue(0); // CC skills are 2/1 point, you cannot have half-ranks // This would be 2x ranks if cross-class, 1x if class. // Unless you gain it as a class skill later, in which case it might be in-between @Setter(value=AccessLevel.PRIVATE) int pointsSpent = 0; public DDSkill(String name) { this(new DDSkillPrototype(name)); } public DDSkill(DDSkillPrototype proto) { this.name = proto; } public void spendPoints(int ranks, boolean isCC) { this.ranks.value(this.ranks.value() + ranks); this.pointsSpent += (ranks * (isCC ? 2 : 1)); } }