Starsector API
Loading...
Searching...
No Matches
TimeoutTrackerMap.java
Go to the documentation of this file.
1package com.fs.starfarer.api.util;
2
3import java.util.ArrayList;
4import java.util.LinkedHashMap;
5import java.util.List;
6import java.util.Map;
7import java.util.Set;
8import java.util.Map.Entry;
9
10public class TimeoutTrackerMap<K, V> {
11
12 public static class ItemData<K, V> {
13 public K key;
14 public V item;
15 public float remaining;
16 }
17
19 public void add(K key, V item, float time) {
20 getData(key, item).remaining += time;
21 }
22
23 public void add(K key, V item, float time, float limit) {
24 ItemData<K, V> d = getData(key, item);
25 if (time > 0 && d.remaining + time > limit) {
26 time = Math.max(0, limit - d.remaining);
27 }
28 d.remaining += time;
29 if (d.remaining < 0) {
30 d.remaining = 0;
31 }
32 }
33
34 public void set(K key, V item, float time) {
35 getData(key, item).remaining = time;
36 }
37
38 public float getRemaining(K key) {
39 return getData(key, null).remaining;
40 }
41 public V getItem(K key) {
42 return getData(key, null).item;
43 }
44
45 public void remove(K key) {
46 items.remove(key);
47 }
48
49 public void clear() {
50 items.clear();
51 }
52
53
54 private ItemData<K, V> getData(K key, V item) {
55 ItemData<K, V> data = items.get(key);
56 if (data == null) {
57 data = new ItemData<K, V>();
58 data.key = key;
59 data.item = item;
60 data.remaining = 0;
61 items.put(key, data);
62
63 }
64 return data;
65 }
66
67 public void advance(float amount) {
68 List<K> remove = new ArrayList<K>();
69 Set<Entry<K, ItemData<K, V>>> entrySet = items.entrySet();
71 entry.getValue().remaining -= amount;
72 if (entry.getValue().remaining <= 0) {
73 remove.add(entry.getKey());
74 }
75 }
76 for (K key : remove) {
77 items.remove(key);
78 }
79 }
80
81 public boolean contains(K key) {
82 return items.containsKey(key);
83 }
84}
85
86
87
88
89
90
91
void add(K key, V item, float time, float limit)