Updated simulation logic.
[VesselSimulator.git] / KerbalEngineer / ResourceContainer.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// Kerbal Engineer Redux
// Author:  CYBUTEK
// License: Attribution-NonCommercial-ShareAlike 3.0 Unported
 
using System.Collections;
using System.Collections.Generic;
 
namespace KerbalEngineer.Simulation
{
    public class ResourceContainer
    {
        Hashtable resources = new Hashtable();
 
        public double this[int type]
        {
            get
            {
                if (this.resources.ContainsKey(type))
                    return (double)this.resources[type];
 
                return 0d;
            }
            set
            {
                if (this.resources.ContainsKey(type))
                    this.resources[type] = value;
                else
                    this.resources.Add(type, value);
            }
        }
 
        public bool HasType(int type)
        {
            return this.resources.ContainsKey(type);
        }
 
        public List<int> Types
        {
            get
            {
                List<int> types = new List<int>();
 
                foreach (int key in this.resources.Keys)
                    types.Add(key);
 
                return types;
            }
        }
 
        public double Mass
        {
            get
            {
                double mass = 0d;
 
                foreach (double resource in this.resources.Values)
                    mass += resource;
 
                return mass;
            }
        }
 
        public bool Empty
        {
            get
            {
                foreach (int type in this.resources.Keys)
                {
                    if ((double)this.resources[type] > SimManager.RESOURCE_MIN)
                        return false;
                }
 
                return true;
            }
        }
 
        public bool EmptyOf(HashSet<int> types)
        {
            foreach (int type in types)
            {
                if (this.HasType(type) && (double)this.resources[type] > SimManager.RESOURCE_MIN)
                    return false;
            }
 
            return true;
        }
 
        public void Add(int type, double amount)
        {
            if (this.resources.ContainsKey(type))
                this.resources[type] = (double)this.resources[type] + amount;
            else
                this.resources.Add(type, amount);
        }
 
        public void Reset()
        {
            this.resources = new Hashtable();
        }
 
        public void Debug()
        {
            foreach (int key in this.resources.Keys)
            {
                UnityEngine.MonoBehaviour.print(" -> " + GetResourceName(key) + " = " + this.resources[key]);
            }
        }
 
        public double GetResourceMass(int type)
        {
            double density = GetResourceDensity(type);
            return density == 0d ? 0d : (double)this.resources[type] * density;
        }
 
        public static ResourceFlowMode GetResourceFlowMode(int type)
        {
            return PartResourceLibrary.Instance.GetDefinition(type).resourceFlowMode;
        }
 
        public static ResourceTransferMode GetResourceTransferMode(int type)
        {
            return PartResourceLibrary.Instance.GetDefinition(type).resourceTransferMode;
        }
 
        public static float GetResourceDensity(int type)
        {
            return PartResourceLibrary.Instance.GetDefinition(type).density;
        }
 
        public static string GetResourceName(int type)
        {
            return PartResourceLibrary.Instance.GetDefinition(type).name;
        }
    }
}