001package com.fs.starfarer.api.campaign;
002
003import java.util.HashMap;
004import java.util.Map;
005
006import com.fs.starfarer.api.fleet.FleetMemberAPI;
007
008public class CombatDamageData {
009        
010        public static class DamageToFleetMember {
011                public float hullDamage;
012        }
013        
014        public static class DealtByFleetMember {
015                private FleetMemberAPI member;
016                private Map<FleetMemberAPI, DamageToFleetMember> damage = new HashMap<FleetMemberAPI, DamageToFleetMember>();
017                public DealtByFleetMember(FleetMemberAPI member) {
018                        this.member = member;
019                }
020                
021                public DamageToFleetMember getDamageTo(FleetMemberAPI target) {
022                        DamageToFleetMember damageTo = damage.get(target);
023                        if (damageTo == null) {
024                                damageTo = new DamageToFleetMember();
025                                damage.put(target, damageTo);
026                        }
027                        return damageTo;
028                }
029                
030                public void addHullDamage(FleetMemberAPI target, float damage) {
031                        getDamageTo(target).hullDamage += damage;
032                }
033
034                public FleetMemberAPI getMember() {
035                        return member;
036                }
037
038                public Map<FleetMemberAPI, DamageToFleetMember> getDamage() {
039                        return damage;
040                }
041        }
042
043        private Map<FleetMemberAPI, DealtByFleetMember> dealt = new HashMap<FleetMemberAPI, DealtByFleetMember>();
044        
045        public Map<FleetMemberAPI, DealtByFleetMember> getDealt() {
046                return dealt;
047        }
048
049        public DealtByFleetMember getDealtBy(FleetMemberAPI member) {
050                DealtByFleetMember dealtBy = dealt.get(member);
051                if (dealtBy == null) {
052                        dealtBy = new DealtByFleetMember(member);
053                        dealt.put(member, dealtBy);
054                }
055                return dealtBy;
056        }
057        
058        public void add(CombatDamageData other) {
059                for (FleetMemberAPI member : other.dealt.keySet()) {
060                        DealtByFleetMember curr = getDealtBy(member);
061                        DealtByFleetMember adding = other.getDealtBy(member);
062                        
063                        for (FleetMemberAPI target : adding.damage.keySet()) {
064                                curr.addHullDamage(target, adding.getDamageTo(target).hullDamage);
065                        }
066                }
067        }
068        
069}
070
071
072