001package com.fs.starfarer.api.campaign;
002
003import java.util.List;
004
005import com.fs.starfarer.api.fleet.FleetMemberAPI;
006
007public interface BuffManagerAPI {
008        public static interface Buff {
009                void apply(FleetMemberAPI member);
010                //void unapply(MutableShipStatsAPI stats);
011                String getId();
012                boolean isExpired();
013                void advance(float days);
014        }
015        
016        public static class TempBuff implements Buff {
017                private Buff buff;
018                private float dur;
019                public TempBuff(Buff buff, float dur) {
020                        this.buff = buff;
021                        this.dur = dur;
022                }
023                public void advance(float days) {
024                        dur -= days;
025                }
026                public void apply(FleetMemberAPI member) {
027                        buff.apply(member);
028                }
029                public String getId() {
030                        return buff.getId();
031                }
032                public boolean isExpired() {
033                        return buff.isExpired() || dur <= 0;
034                }
035        }
036        
037        Buff getBuff(String id);
038        void addBuff(Buff b);
039        void removeBuff(String id);
040        
041        
042        /**
043         * Won't trigger an update of other possibly-related fleet stats.
044         * Useful when modifying a stat that has no effect beyond itself (i.e. a combat stat in campaign).
045         * @param b
046         */
047        void addBuffOnlyUpdateStat(Buff b);
048        List<Buff> getBuffs();
049        void advance(float days);
050}
051
052
053
054