Improved the logger and handling of objEX.
@@ -1,15 +1,10 @@ | ||
1 | 1 | import java.awt.Image; |
2 | 2 | import java.io.IOException; |
3 | -import java.util.ArrayList; | |
4 | -import java.util.List; | |
5 | 3 | |
6 | 4 | import javax.imageio.ImageIO; |
7 | 5 | |
8 | 6 | public class OrangePool extends ObjEX implements java.io.Serializable { |
9 | 7 | static final long serialVersionUID = 1L; |
10 | - | |
11 | - public static List<ObjEX> objEXList = new ArrayList<ObjEX>(); | |
12 | - | |
13 | 8 | public int type = 0; |
14 | 9 | public static final int hitCheckObjType = 1; |
15 | 10 | public static final int size = 128; |
@@ -88,14 +83,8 @@ | ||
88 | 83 | return cost[type]; |
89 | 84 | } |
90 | 85 | |
91 | - @Override | |
92 | - public void removeListData(){ | |
93 | - objEXList.remove(this); | |
94 | - } | |
95 | - | |
96 | 86 | public OrangePool(int initX, int initY, Direction initDir) { |
97 | 87 | super(initX, initY, ObjEX.Direction.BACK); |
98 | - objEXList.add(this); | |
99 | 88 | switch ( initDir ) { //方向データを仮利用 |
100 | 89 | case BACK: |
101 | 90 | default: |
@@ -3,15 +3,10 @@ | ||
3 | 3 | |
4 | 4 | import javax.imageio.ImageIO; |
5 | 5 | |
6 | -import java.util.ArrayList; | |
7 | -import java.util.List; | |
8 | 6 | import java.util.Random; |
9 | 7 | |
10 | 8 | public class FoodMaker extends ObjEX implements java.io.Serializable { |
11 | 9 | static final long serialVersionUID = 1L; |
12 | - | |
13 | - public static List<ObjEX> objEXList = new ArrayList<ObjEX>(); | |
14 | - | |
15 | 10 | public int type = 0; |
16 | 11 | public static final int hitCheckObjType = 7; |
17 | 12 | public static final int size = 128; |
@@ -229,14 +224,8 @@ | ||
229 | 224 | return cost; |
230 | 225 | } |
231 | 226 | |
232 | - @Override | |
233 | - public void removeListData(){ | |
234 | - objEXList.remove(this); | |
235 | - } | |
236 | - | |
237 | 227 | public FoodMaker(int initX, int initY, Direction initDir) { |
238 | 228 | super(initX, initY, ObjEX.Direction.BACK); |
239 | - objEXList.add(this); | |
240 | 229 | objType = Type.PLATFORM; |
241 | 230 | Cash.addCash(-getValue()); |
242 | 231 | } |
@@ -1,5 +1,4 @@ | ||
1 | 1 | import java.awt.Image; |
2 | -import java.util.*; | |
3 | 2 | |
4 | 3 | public class ObjEX extends Obj implements java.io.Serializable { |
5 | 4 | static final long serialVersionUID = 1L; |
@@ -7,8 +6,6 @@ | ||
7 | 6 | |
8 | 7 | protected Image[] images; |
9 | 8 | |
10 | - public static List<ObjEX> objEXList = new ArrayList<ObjEX>(); | |
11 | - | |
12 | 9 | public static final int YUKKURI = 1; |
13 | 10 | public static final int SHIT = 2; |
14 | 11 | public static final int FOOD = 4; |
@@ -75,7 +72,6 @@ | ||
75 | 72 | { |
76 | 73 | age += TICK; |
77 | 74 | if (removed) { |
78 | - removeListData(); | |
79 | 75 | return Event.REMOVED; |
80 | 76 | } |
81 | 77 | if (!grabbed) { |
@@ -123,10 +119,6 @@ | ||
123 | 119 | upDate(); |
124 | 120 | return Event.DONOTHING; |
125 | 121 | } |
126 | - | |
127 | - public void removeListData(){ | |
128 | - objEXList.remove(this); | |
129 | - } | |
130 | 122 | |
131 | 123 | public ObjEX(int initX, int initY, Direction initDir) { |
132 | 124 | objType = Type.PLATFORM; |
@@ -3,15 +3,10 @@ | ||
3 | 3 | |
4 | 4 | import javax.imageio.ImageIO; |
5 | 5 | |
6 | -import java.util.ArrayList; | |
7 | -import java.util.List; | |
8 | 6 | import java.util.Random; |
9 | 7 | |
10 | 8 | public class ProductChute extends ObjEX implements java.io.Serializable { |
11 | 9 | static final long serialVersionUID = 1L; |
12 | - | |
13 | - public static List<ObjEX> objEXList = new ArrayList<ObjEX>(); | |
14 | - | |
15 | 10 | public static final int type = 0; |
16 | 11 | public static final int hitCheckObjType = 31; |
17 | 12 | public static final int size = 128; |
@@ -84,15 +79,9 @@ | ||
84 | 79 | public int getCost() { |
85 | 80 | return cost; |
86 | 81 | } |
87 | - | |
88 | - @Override | |
89 | - public void removeListData(){ | |
90 | - objEXList.remove(this); | |
91 | - } | |
92 | 82 | |
93 | 83 | public ProductChute(int initX, int initY, Direction initDir) { |
94 | 84 | super(initX, initY, ObjEX.Direction.BACK); |
95 | - objEXList.add(this); | |
96 | 85 | objType = Type.PLATFORM; |
97 | 86 | } |
98 | 87 | } |
\ No newline at end of file |
@@ -3,15 +3,10 @@ | ||
3 | 3 | |
4 | 4 | import javax.imageio.ImageIO; |
5 | 5 | |
6 | -import java.util.ArrayList; | |
7 | -import java.util.List; | |
8 | 6 | import java.util.Random; |
9 | 7 | |
10 | 8 | public class BreedingPool extends ObjEX implements java.io.Serializable { |
11 | 9 | static final long serialVersionUID = 1L; |
12 | - | |
13 | - public static List<ObjEX> objEXList = new ArrayList<ObjEX>(); | |
14 | - | |
15 | 10 | public int type = 0; |
16 | 11 | public static final int hitCheckObjType = 1; |
17 | 12 | public static final int size = 128; |
@@ -77,14 +72,8 @@ | ||
77 | 72 | return cost[type]; |
78 | 73 | } |
79 | 74 | |
80 | - @Override | |
81 | - public void removeListData(){ | |
82 | - objEXList.remove(this); | |
83 | - } | |
84 | - | |
85 | 75 | public BreedingPool(int initX, int initY, Direction initDir) { |
86 | 76 | super(initX, initY, ObjEX.Direction.BACK); |
87 | - objEXList.add(this); | |
88 | 77 | switch ( initDir ) { //方向データを仮利用 |
89 | 78 | case BACK: |
90 | 79 | default: |
@@ -1,5 +1,5 @@ | ||
1 | 1 | /* |
2 | - * Copyright 2013 Mimisuke | |
2 | + * Copyright 2013-2015 Mimisuke | |
3 | 3 | * |
4 | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | 5 | * you may not use this file except in compliance with the License. |
@@ -28,10 +28,11 @@ | ||
28 | 28 | public static ArrayList<Toilet> toiletList = new ArrayList<Toilet>(); |
29 | 29 | public static ArrayList<Toy> toyList = new ArrayList<Toy>(); |
30 | 30 | public static ArrayList<Barrier> barrierList = new ArrayList<Barrier>(); |
31 | + public static ArrayList<ObjEX> objExList = new ArrayList<ObjEX>(); | |
32 | + public static ArrayList<ObjEX> fixedObjExList = new ArrayList<ObjEX>(); | |
31 | 33 | |
32 | - public static int operationTime = 0; | |
34 | + public static long operationTime = 0; | |
33 | 35 | public static final int TICK = 1; |
34 | - | |
35 | 36 | |
36 | 37 | private static int map[][] = new int[MAX_X+1][MAX_Y+1]; |
37 | 38 | private static Random rnd = new Random(); |
@@ -56,17 +57,10 @@ | ||
56 | 57 | out.writeObject(toiletList); |
57 | 58 | out.writeObject(toyList); |
58 | 59 | out.writeObject(barrierList); |
59 | - | |
60 | - out.writeObject(Beltconveyor.objEXList); | |
61 | - out.writeObject(BreedingPool.objEXList); | |
62 | - out.writeObject(GarbageChute.objEXList); | |
63 | - out.writeObject(FoodMaker.objEXList); | |
64 | - out.writeObject(OrangePool.objEXList); | |
65 | - out.writeObject(ProductChute.objEXList); | |
66 | - | |
67 | - out.writeObject(MachinePress.objEXList); | |
68 | - | |
60 | + out.writeObject(objExList); | |
61 | + out.writeObject(fixedObjExList); | |
69 | 62 | out.writeObject(map); |
63 | + out.writeLong(operationTime); | |
70 | 64 | out.flush(); |
71 | 65 | } finally { |
72 | 66 | out.close(); |
@@ -88,17 +82,10 @@ | ||
88 | 82 | ArrayList<Toilet> toiletList; |
89 | 83 | ArrayList<Toy> toyList; |
90 | 84 | ArrayList<Barrier> barrierList; |
91 | - | |
92 | - ArrayList<ObjEX> beltconveyorList; | |
93 | - ArrayList<ObjEX> breedingPoolList; | |
94 | - ArrayList<ObjEX> garbageChuteList; | |
95 | - ArrayList<ObjEX> foodMakerList; | |
96 | - ArrayList<ObjEX> orangePoolList; | |
97 | - ArrayList<ObjEX> productChuteList; | |
98 | - | |
99 | - ArrayList<ObjEX> machinePressList; | |
100 | - | |
85 | + ArrayList<ObjEX> objExList; | |
86 | + ArrayList<ObjEX> fixedObjExList; | |
101 | 87 | int map[][]; |
88 | + long operationTime; | |
102 | 89 | try { |
103 | 90 | String s = in.readUTF(); |
104 | 91 | if(!Terrarium.class.getCanonicalName().equals(s)) { |
@@ -114,17 +101,10 @@ | ||
114 | 101 | toiletList = (ArrayList<Toilet>)in.readObject(); |
115 | 102 | toyList = (ArrayList<Toy>)in.readObject(); |
116 | 103 | barrierList = (ArrayList<Barrier>)in.readObject(); |
117 | - | |
118 | - beltconveyorList = (ArrayList<ObjEX>)in.readObject(); | |
119 | - breedingPoolList = (ArrayList<ObjEX>)in.readObject(); | |
120 | - garbageChuteList = (ArrayList<ObjEX>)in.readObject(); | |
121 | - foodMakerList = (ArrayList<ObjEX>)in.readObject(); | |
122 | - orangePoolList = (ArrayList<ObjEX>)in.readObject(); | |
123 | - productChuteList = (ArrayList<ObjEX>)in.readObject(); | |
124 | - | |
125 | - machinePressList = (ArrayList<ObjEX>)in.readObject(); | |
126 | - | |
104 | + objExList = (ArrayList<ObjEX>)in.readObject(); | |
105 | + fixedObjExList = (ArrayList<ObjEX>)in.readObject(); | |
127 | 106 | map = (int [][])in.readObject(); |
107 | + operationTime = in.readLong(); | |
128 | 108 | } finally { |
129 | 109 | in.close(); |
130 | 110 | } |
@@ -137,20 +117,12 @@ | ||
137 | 117 | Terrarium.toiletList = toiletList; |
138 | 118 | Terrarium.toyList = toyList; |
139 | 119 | Terrarium.barrierList = barrierList; |
140 | - | |
141 | - Beltconveyor.objEXList = beltconveyorList; | |
142 | - BreedingPool.objEXList = breedingPoolList; | |
143 | - GarbageChute.objEXList = garbageChuteList; | |
144 | - FoodMaker.objEXList = foodMakerList; | |
145 | - OrangePool.objEXList = orangePoolList; | |
146 | - ProductChute.objEXList = productChuteList; | |
147 | - | |
148 | - MachinePress.objEXList = machinePressList; | |
149 | - | |
120 | + Terrarium.objExList = objExList; | |
121 | + Terrarium.fixedObjExList = fixedObjExList; | |
150 | 122 | Terrarium.map = map; |
123 | + Terrarium.operationTime = operationTime; | |
151 | 124 | } |
152 | 125 | |
153 | - | |
154 | 126 | public static List<Obj> getObjList(){ |
155 | 127 | List <Obj>objList = new ArrayList<Obj>(); |
156 | 128 | objList.addAll(Terrarium.bodyList); |
@@ -158,28 +130,20 @@ | ||
158 | 130 | objList.addAll(Terrarium.foodList); |
159 | 131 | objList.addAll(Terrarium.toyList); |
160 | 132 | return objList; |
161 | - } | |
133 | + } | |
162 | 134 | |
163 | - | |
164 | 135 | public static List<ObjEX> getPlatformList(){ |
165 | 136 | List <ObjEX>objList = new ArrayList<ObjEX>(); |
166 | - objList.addAll(Beltconveyor.objEXList); | |
167 | - objList.addAll(BreedingPool.objEXList); | |
168 | - objList.addAll(GarbageChute.objEXList); | |
169 | - objList.addAll(FoodMaker.objEXList); | |
170 | - objList.addAll(OrangePool.objEXList); | |
171 | - objList.addAll(ProductChute.objEXList); | |
137 | + objList.addAll(Terrarium.objExList); | |
172 | 138 | return objList; |
173 | - } | |
174 | - | |
139 | + } | |
175 | 140 | |
176 | 141 | public static List<ObjEX> getFixObjList(){ |
177 | 142 | List <ObjEX>objList = new ArrayList<ObjEX>(); |
178 | - objList.addAll(MachinePress.objEXList); | |
143 | + objList.addAll(Terrarium.fixedObjExList); | |
179 | 144 | return objList; |
180 | - } | |
145 | + } | |
181 | 146 | |
182 | - | |
183 | 147 | private static void setLine(int x1, int y1, int x2, int y2, boolean setFlag) { |
184 | 148 | int distance = (int)Math.sqrt(distance(x1, y1, x2, y2)); |
185 | 149 | double deltaX = (double)(x2 - x1)/(double)distance; |
@@ -800,24 +764,31 @@ | ||
800 | 764 | switch(addObjEX){ |
801 | 765 | case SimYukkuri.BELTCONVEYOR: |
802 | 766 | objEX = new Beltconveyor(x, y, dir); |
767 | + objExList.add(objEX); | |
803 | 768 | break; |
804 | 769 | case SimYukkuri.BREEDINGPOOL: |
805 | 770 | objEX = new BreedingPool(x, y, dir); |
771 | + objExList.add(objEX); | |
806 | 772 | break; |
807 | 773 | case SimYukkuri.GARBAGECHUTE: |
808 | 774 | objEX = new GarbageChute(x, y, dir); |
775 | + objExList.add(objEX); | |
809 | 776 | break; |
810 | 777 | case SimYukkuri.MACHINEPRESS: |
811 | 778 | objEX = new MachinePress(x, y, dir); |
779 | + fixedObjExList.add(objEX); | |
812 | 780 | break; |
813 | 781 | case SimYukkuri.FOODMAKER: |
814 | 782 | objEX = new FoodMaker(x, y, dir); |
783 | + objExList.add(objEX); | |
815 | 784 | break; |
816 | 785 | case SimYukkuri.ORANGEPOOL: |
817 | 786 | objEX = new OrangePool(x, y, dir); |
787 | + objExList.add(objEX); | |
818 | 788 | break; |
819 | 789 | case SimYukkuri.PRODUCTCHUTE: |
820 | 790 | objEX = new ProductChute(x, y, dir); |
791 | + objExList.add(objEX); | |
821 | 792 | break; |
822 | 793 | default: |
823 | 794 | break; |
@@ -833,6 +804,10 @@ | ||
833 | 804 | public static boolean getAlarm() { |
834 | 805 | return alarm; |
835 | 806 | } |
807 | + | |
808 | + public static long getOperationTime() { | |
809 | + return operationTime; | |
810 | + } | |
836 | 811 | |
837 | 812 | public static void cleanAll() { |
838 | 813 | for (Shit s: shitList) { |
@@ -873,17 +848,14 @@ | ||
873 | 848 | i.remove(); |
874 | 849 | } |
875 | 850 | } |
876 | - | |
877 | 851 | |
878 | 852 | // Update Platform state. 床置き式の物を更新 |
879 | - | |
880 | - List <ObjEX>platformList = getPlatformList(); | |
881 | - for (Iterator<ObjEX> i = platformList.iterator(); i.hasNext();) { | |
853 | + for (Iterator<ObjEX> i = objExList.iterator(); i.hasNext();) { | |
882 | 854 | ObjEX oex = i.next(); |
883 | 855 | ret = oex.clockTick(); |
884 | 856 | if (ret == Obj.Event.REMOVED) { |
885 | - oex.remove(); | |
886 | - | |
857 | + i.remove(); | |
858 | + continue; | |
887 | 859 | } |
888 | 860 | List <Obj>objList = getObjList(); |
889 | 861 | objList.addAll(Terrarium.toiletList); |
@@ -921,16 +893,14 @@ | ||
921 | 893 | } |
922 | 894 | |
923 | 895 | // Update FixObj state. 置物を更新 |
924 | - List <ObjEX>fixObjList = getFixObjList(); | |
925 | - for (Iterator<ObjEX> i = fixObjList.iterator(); i.hasNext();) { | |
896 | + for (Iterator<ObjEX> i = fixedObjExList.iterator(); i.hasNext();) { | |
926 | 897 | ObjEX oex = i.next(); |
927 | 898 | ret = oex.clockTick(); |
928 | 899 | if (ret == Obj.Event.REMOVED) { |
929 | 900 | i.remove(); |
901 | + continue; | |
930 | 902 | } |
931 | - List <Obj>objList = new ArrayList<Obj>(); | |
932 | - objList.addAll(Terrarium.bodyList); | |
933 | - for (Obj o : objList) { | |
903 | + for (Obj o : Terrarium.bodyList) { | |
934 | 904 | oex.checkHitObj( o ); |
935 | 905 | } |
936 | 906 | } |
@@ -1011,6 +981,5 @@ | ||
1011 | 981 | } |
1012 | 982 | |
1013 | 983 | operationTime += TICK; |
1014 | - | |
1015 | 984 | } |
1016 | 985 | } |
\ No newline at end of file |
@@ -1,15 +1,10 @@ | ||
1 | 1 | import java.awt.Image; |
2 | 2 | import java.io.IOException; |
3 | -import java.util.ArrayList; | |
4 | -import java.util.List; | |
5 | 3 | |
6 | 4 | import javax.imageio.ImageIO; |
7 | 5 | |
8 | 6 | public class Beltconveyor extends ObjEX implements java.io.Serializable { |
9 | 7 | static final long serialVersionUID = 1L; |
10 | - | |
11 | - public static List<ObjEX> objEXList = new ArrayList<ObjEX>(); | |
12 | - | |
13 | 8 | public int type = 0; |
14 | 9 | public static final int hitCheckObjType = 31; |
15 | 10 | public static final int size = 128; |
@@ -105,14 +100,8 @@ | ||
105 | 100 | Cash.addCash(-getValue()); |
106 | 101 | } |
107 | 102 | |
108 | - @Override | |
109 | - public void removeListData(){ | |
110 | - objEXList.remove(this); | |
111 | - } | |
112 | - | |
113 | 103 | public Beltconveyor(int initX, int initY, Direction initDir) { |
114 | 104 | super(initX, initY, initDir); |
115 | - objEXList.add(this); | |
116 | 105 | objType = Type.PLATFORM; |
117 | 106 | beltSpeed = 1; |
118 | 107 | } |
@@ -61,7 +61,7 @@ | ||
61 | 61 | |
62 | 62 | JButton saveButton, loadButton, addYukkuriButton, languageButton, pauseButton, showLogButton, nextPageLogButton, clearLogButton; |
63 | 63 | |
64 | - static int clearLogTime = 0; | |
64 | + static long clearLogTime = 0; | |
65 | 65 | |
66 | 66 | static myPane mypane = new myPane(); |
67 | 67 | static Thread mythread; |
@@ -503,8 +503,6 @@ | ||
503 | 503 | } |
504 | 504 | } |
505 | 505 | } |
506 | - | |
507 | - | |
508 | 506 | if (found == null) {// platform has lowest priority. |
509 | 507 | List <ObjEX>platformList = Terrarium.getPlatformList(); |
510 | 508 | for (Iterator<ObjEX> i = platformList.iterator(); i.hasNext();) { |
@@ -520,7 +518,6 @@ | ||
520 | 518 | } |
521 | 519 | } |
522 | 520 | } |
523 | - | |
524 | 521 | return found; |
525 | 522 | } |
526 | 523 |
@@ -1544,14 +1541,14 @@ | ||
1544 | 1541 | g.setColor(textColor1); |
1545 | 1542 | g.setFont(textFontTitle); |
1546 | 1543 | |
1547 | - int NUM_OF_GRAPH_DATA = 120; | |
1548 | 1544 | int GRAPH_WIDTH = 700; |
1549 | 1545 | int GRAPH_HEIGHT = 200; |
1550 | 1546 | int GRAPH_OFFSETX = 100; |
1551 | 1547 | int GRAPH_OFFSETY = 300; |
1552 | 1548 | int LEGEND_OFFSETX = 120; |
1549 | + int NUM_OF_GRAPH_DATA = Logger.getLogGeneration(); | |
1553 | 1550 | |
1554 | - int[] logData = new int[Logger.NUM_OF_LOGDATA_TYPE * NUM_OF_GRAPH_DATA]; | |
1551 | + int[][] logData = new int[NUM_OF_GRAPH_DATA][Logger.NUM_OF_LOGDATA_TYPE]; | |
1555 | 1552 | int[] numOfObjNowLog = Logger.getNumOfObjNowLog(); |
1556 | 1553 | int numOfMaxYukkuri = 0; |
1557 | 1554 | int numOfMaxUnun = 0; |
@@ -1558,12 +1555,10 @@ | ||
1558 | 1555 | int numOfMaxCash = 0; |
1559 | 1556 | int numOfSumYukkuri = 0; |
1560 | 1557 | int[] logDataTmp; |
1561 | - int operationTime = Terrarium.operationTime / 10; | |
1558 | + long operationTime = Terrarium.operationTime / 10; | |
1562 | 1559 | |
1563 | 1560 | for (int i = 0; i < NUM_OF_GRAPH_DATA; i++) { // グラフの最大値を求めるため描写する一定時間のデータ処理 |
1564 | - logDataTmp = Logger.getLog((Terrarium.operationTime - (SimYukkuri.clearLogTime - (SimYukkuri.clearLogTime % 10))) / 10 - NUM_OF_GRAPH_DATA + i); | |
1565 | - | |
1566 | - if (logDataTmp != null) { | |
1561 | + if ((logDataTmp = Logger.getLog(i)) != null) { | |
1567 | 1562 | numOfSumYukkuri = 0; |
1568 | 1563 | for (int j = 0; j < Logger.NUM_OF_ETC_YUKKURI_TYPE + 1; j++) { |
1569 | 1564 | numOfSumYukkuri += logDataTmp[j]; |
@@ -1579,11 +1574,11 @@ | ||
1579 | 1574 | numOfMaxCash = logDataTmp[Logger.NUM_OF_CASH]; |
1580 | 1575 | } |
1581 | 1576 | for (int j = 0; j < Logger.NUM_OF_LOGDATA_TYPE; j++) { |
1582 | - logData[Logger.NUM_OF_LOGDATA_TYPE * i + j] = logDataTmp[j]; | |
1577 | + logData[i][j] = logDataTmp[j]; | |
1583 | 1578 | } |
1584 | 1579 | } else { |
1585 | 1580 | for (int j = 0; j < Logger.NUM_OF_LOGDATA_TYPE; j++) { |
1586 | - logData[Logger.NUM_OF_LOGDATA_TYPE * i + j] = 0; | |
1581 | + logData[i][j] = 0; | |
1587 | 1582 | } |
1588 | 1583 | } |
1589 | 1584 | } |
@@ -1596,7 +1591,7 @@ | ||
1596 | 1591 | yp[NUM_OF_GRAPH_DATA + i] = GRAPH_HEIGHT + GRAPH_OFFSETY; |
1597 | 1592 | } |
1598 | 1593 | |
1599 | - int opetmp = operationTime % NUM_OF_GRAPH_DATA; | |
1594 | + int opetmp = (int)(operationTime % NUM_OF_GRAPH_DATA); | |
1600 | 1595 | |
1601 | 1596 | switch (showPage) { |
1602 | 1597 | case 0: |
@@ -1632,10 +1627,10 @@ | ||
1632 | 1627 | } |
1633 | 1628 | g.fillRect(LEGEND_OFFSETX + 180, 30 * i + 130, 10, 10); |
1634 | 1629 | for (int k = 0; k < NUM_OF_GRAPH_DATA; k++) { |
1635 | - if (logData[Logger.NUM_OF_LOGDATA_TYPE * k + i] != 0) { | |
1636 | - yp[k] -= logData[Logger.NUM_OF_LOGDATA_TYPE * k + i] * GRAPH_HEIGHT / numOfMaxYukkuri; | |
1630 | + if (logData[k][i] != 0) { | |
1631 | + yp[k] -= logData[k][i] * GRAPH_HEIGHT / numOfMaxYukkuri; | |
1637 | 1632 | } else { |
1638 | - yp[k] -= logData[Logger.NUM_OF_LOGDATA_TYPE * k + i] * GRAPH_HEIGHT / 1; | |
1633 | + yp[k] -= logData[k][i] * GRAPH_HEIGHT / 1; | |
1639 | 1634 | } |
1640 | 1635 | } |
1641 | 1636 | g.fillPolygon(xp, yp, NUM_OF_GRAPH_DATA * 2); |
@@ -1672,10 +1667,10 @@ | ||
1672 | 1667 | } |
1673 | 1668 | g.fillRect(LEGEND_OFFSETX + 180, 30 * i + 130, 10, 10); |
1674 | 1669 | for (int k = 0; k < NUM_OF_GRAPH_DATA; k++) { |
1675 | - if (logData[Logger.NUM_OF_LOGDATA_TYPE * k + i + Logger.NUM_OF_BABY] != 0) { | |
1676 | - yp[k] -= logData[Logger.NUM_OF_LOGDATA_TYPE * k + i + Logger.NUM_OF_BABY] * GRAPH_HEIGHT / numOfMaxYukkuri; | |
1670 | + if (logData[k][Logger.NUM_OF_BABY + i] != 0) { | |
1671 | + yp[k] -= logData[k][Logger.NUM_OF_BABY + i] * GRAPH_HEIGHT / numOfMaxYukkuri; | |
1677 | 1672 | } else { |
1678 | - yp[k] -= logData[Logger.NUM_OF_LOGDATA_TYPE * k + i + Logger.NUM_OF_BABY] * GRAPH_HEIGHT / 1; | |
1673 | + yp[k] -= logData[k][Logger.NUM_OF_BABY + i] * GRAPH_HEIGHT / 1; | |
1679 | 1674 | } |
1680 | 1675 | } |
1681 | 1676 | g.fillPolygon(xp, yp, NUM_OF_GRAPH_DATA * 2); |
@@ -1710,17 +1705,11 @@ | ||
1710 | 1705 | g.fillRect(LEGEND_OFFSETX + 180, 30 * i + 130, 10, 10); |
1711 | 1706 | for (int k = 0; k < NUM_OF_GRAPH_DATA; k++) { |
1712 | 1707 | if (numOfMaxYukkuri == 0) { |
1713 | - yp[k] -= logData[Logger.NUM_OF_LOGDATA_TYPE * k + i + Logger.NUM_OF_SICK] * GRAPH_HEIGHT / 1; | |
1708 | + yp[k] -= logData[k][Logger.NUM_OF_SICK + i] * GRAPH_HEIGHT / 1; | |
1714 | 1709 | } else if (i == 0) { |
1715 | - yp[k] -= logData[Logger.NUM_OF_LOGDATA_TYPE * k + i + Logger.NUM_OF_SICK] * GRAPH_HEIGHT / numOfMaxYukkuri; | |
1710 | + yp[k] -= logData[k][Logger.NUM_OF_SICK + i] * GRAPH_HEIGHT / numOfMaxYukkuri; | |
1716 | 1711 | } else { |
1717 | - yp[k] -= (logData[Logger.NUM_OF_LOGDATA_TYPE * k] | |
1718 | - + logData[Logger.NUM_OF_LOGDATA_TYPE * k + 1] | |
1719 | - + logData[Logger.NUM_OF_LOGDATA_TYPE * k + 2] | |
1720 | - + logData[Logger.NUM_OF_LOGDATA_TYPE * k + 3] | |
1721 | - + logData[Logger.NUM_OF_LOGDATA_TYPE * k + 4] | |
1722 | - + logData[Logger.NUM_OF_LOGDATA_TYPE * k + 5] | |
1723 | - - logData[Logger.NUM_OF_LOGDATA_TYPE * k + Logger.NUM_OF_SICK]) * GRAPH_HEIGHT / numOfMaxYukkuri; | |
1712 | + yp[k] -= (logData[k][0] + logData[k][1] + logData[k][2] + logData[k][3] + logData[k][4] + logData[k][5] - logData[k][Logger.NUM_OF_SICK]) * GRAPH_HEIGHT / numOfMaxYukkuri; | |
1724 | 1713 | } |
1725 | 1714 | } |
1726 | 1715 | g.fillPolygon(xp, yp, NUM_OF_GRAPH_DATA * 2); |
@@ -1742,10 +1731,10 @@ | ||
1742 | 1731 | g.drawString(Integer.toString(numOfObjNowLog[Logger.NUM_OF_SHIT]), LEGEND_OFFSETX + 130, 140); |
1743 | 1732 | g.setColor(Color.GRAY); |
1744 | 1733 | for (int k = 0; k < NUM_OF_GRAPH_DATA; k++) { |
1745 | - if (logData[Logger.NUM_OF_LOGDATA_TYPE * k + Logger.NUM_OF_SHIT] != 0) { | |
1746 | - yp[k] -= logData[Logger.NUM_OF_LOGDATA_TYPE * k + Logger.NUM_OF_SHIT] * GRAPH_HEIGHT / numOfMaxUnun; | |
1734 | + if (logData[k][Logger.NUM_OF_SHIT] != 0) { | |
1735 | + yp[k] -= logData[k][Logger.NUM_OF_SHIT] * GRAPH_HEIGHT / numOfMaxUnun; | |
1747 | 1736 | } else { |
1748 | - yp[k] -= logData[Logger.NUM_OF_LOGDATA_TYPE * k + Logger.NUM_OF_SHIT] * GRAPH_HEIGHT / 1; | |
1737 | + yp[k] -= logData[k][Logger.NUM_OF_SHIT] * GRAPH_HEIGHT / 1; | |
1749 | 1738 | } |
1750 | 1739 | } |
1751 | 1740 | g.fillRect(LEGEND_OFFSETX + 180, 130, 10, 10); |
@@ -1765,17 +1754,17 @@ | ||
1765 | 1754 | g.setFont(textFonttext); |
1766 | 1755 | for (int i = 0; i < 1; i++) { |
1767 | 1756 | g.setColor(Color.WHITE); |
1768 | - g.drawString(Integer.toString(numOfObjNowLog[i + Logger.NUM_OF_CASH]), LEGEND_OFFSETX + 130, 30 * i + 140); | |
1769 | - g.drawString(Integer.toString(numOfObjNowLog[Logger.NUM_OF_CASH] - logData[Logger.NUM_OF_LOGDATA_TYPE * 59 + Logger.NUM_OF_CASH]), LEGEND_OFFSETX + 130, 30 * (i + 1) + 140); | |
1757 | + g.drawString(Integer.toString(numOfObjNowLog[Logger.NUM_OF_CASH + i]), LEGEND_OFFSETX + 130, 30 * i + 140); | |
1758 | + g.drawString(Integer.toString(numOfObjNowLog[Logger.NUM_OF_CASH] - logData[59][Logger.NUM_OF_CASH]), LEGEND_OFFSETX + 130, 30 * (i + 1) + 140); | |
1770 | 1759 | g.drawString(InitLoader.getLogKind(4, 0), LEGEND_OFFSETX, 30 * i + 140); |
1771 | 1760 | g.drawString(InitLoader.getLogKind(4, 1), LEGEND_OFFSETX, 30 * (i + 1) + 140); |
1772 | 1761 | g.setColor(Color.YELLOW); |
1773 | 1762 | if (i == 0) { |
1774 | 1763 | for (int k = 0; k < NUM_OF_GRAPH_DATA; k++) { |
1775 | - if (logData[Logger.NUM_OF_LOGDATA_TYPE * k + i + Logger.NUM_OF_CASH] > 0) { | |
1776 | - yp[k] -= logData[Logger.NUM_OF_LOGDATA_TYPE * k + i + Logger.NUM_OF_CASH] * GRAPH_HEIGHT / numOfMaxCash; | |
1777 | - } else if (logData[Logger.NUM_OF_LOGDATA_TYPE * k + i + Logger.NUM_OF_CASH] == 0) { | |
1778 | - yp[k] -= logData[Logger.NUM_OF_LOGDATA_TYPE * k + i + Logger.NUM_OF_CASH] * GRAPH_HEIGHT / 1; | |
1764 | + if (logData[k][i + Logger.NUM_OF_CASH] > 0) { | |
1765 | + yp[k] -= logData[k][Logger.NUM_OF_CASH + i] * GRAPH_HEIGHT / numOfMaxCash; | |
1766 | + } else if (logData[k][Logger.NUM_OF_CASH + i] == 0) { | |
1767 | + yp[k] -= logData[k][Logger.NUM_OF_CASH + i] * GRAPH_HEIGHT / 1; | |
1779 | 1768 | } |
1780 | 1769 | } |
1781 | 1770 | g.fillPolygon(xp, yp, NUM_OF_GRAPH_DATA * 2); |
@@ -1800,8 +1789,8 @@ | ||
1800 | 1789 | int graphx = GRAPH_WIDTH - (((GRAPH_WIDTH) * 30 * i) / NUM_OF_GRAPH_DATA) - ((opetmp % 30) * GRAPH_WIDTH / NUM_OF_GRAPH_DATA) + GRAPH_OFFSETX; |
1801 | 1790 | if (GRAPH_WIDTH - (GRAPH_WIDTH * 30 * i / NUM_OF_GRAPH_DATA + opetmp) >= 0 && operationTime - 30 * i >= 0) { |
1802 | 1791 | g.drawLine(graphx, GRAPH_OFFSETY, graphx, GRAPH_OFFSETY + GRAPH_HEIGHT); |
1803 | - g.drawString(((Integer.toString((operationTime - 30 * i) / 3600)) + ":" + (Integer.toString((operationTime - 30 * i) / 60)) + ":" + Integer.toString((operationTime + 30 * i) % 60 / 30 * 30)), | |
1804 | - graphx - String.valueOf(((Integer.toString((operationTime - 30 * i) / 3600)) + ":" + (Integer.toString((operationTime - 30 * i) / 60)) + ":" + Integer.toString((operationTime + 30 * i) % 60 / 30 * 30))).length() * 5 - 4, | |
1792 | + g.drawString(((Long.toString((operationTime - 30 * i) / 3600)) + ":" + (Long.toString((operationTime - 30 * i) / 60)) + ":" + Long.toString((operationTime + 30 * i) % 60 / 30 * 30)), | |
1793 | + graphx - String.valueOf(((Long.toString((operationTime - 30 * i) / 3600)) + ":" + (Long.toString((operationTime - 30 * i) / 60)) + ":" + Long.toString((operationTime + 30 * i) % 60 / 30 * 30))).length() * 5 - 4, | |
1805 | 1794 | GRAPH_OFFSETY + GRAPH_HEIGHT + 18); |
1806 | 1795 | } |
1807 | 1796 | } |
@@ -1,8 +1,20 @@ | ||
1 | -import java.util.ArrayList; | |
2 | -import java.util.List; | |
1 | +/* | |
2 | + * Copyright 2013-2015 Mimisuke | |
3 | + * | |
4 | + * Licensed under the Apache License, Version 2.0 (the "License"); | |
5 | + * you may not use this file except in compliance with the License. | |
6 | + * You may obtain a copy of the License at | |
7 | + * | |
8 | + * http://www.apache.org/licenses/LICENSE-2.0 | |
9 | + * | |
10 | + * Unless required by applicable law or agreed to in writing, software | |
11 | + * distributed under the License is distributed on an "AS IS" BASIS, | |
12 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
13 | + * See the License for the specific language governing permissions and | |
14 | + * limitations under the License. | |
15 | + */ | |
3 | 16 | |
4 | 17 | public class Logger { |
5 | - public static final int TICK = 1; | |
6 | 18 | public static final int NUM_OF_MARISA = 0; |
7 | 19 | public static final int NUM_OF_REIMU = 1; |
8 | 20 | public static final int NUM_OF_ALICE = 2; |
@@ -16,58 +28,55 @@ | ||
16 | 28 | public static final int NUM_OF_SHIT = 10; |
17 | 29 | public static final int NUM_OF_CASH = 11; |
18 | 30 | public static final int NUM_OF_LOGDATA_TYPE = 12; |
31 | + public static final int LOG_GENERATION = 120; | |
19 | 32 | |
20 | 33 | private static int[] prevLogData = new int[NUM_OF_LOGDATA_TYPE]; |
21 | 34 | private static int[] logDataSum = new int[NUM_OF_LOGDATA_TYPE]; |
22 | - private static List<Integer> logList = new ArrayList<Integer>(); | |
35 | + private static int[][] logList = new int[LOG_GENERATION][NUM_OF_LOGDATA_TYPE]; | |
36 | + private static int logPointer = 0; | |
37 | + private static boolean overwrapped = false; | |
38 | + | |
39 | + static final Object lock = new Object(); | |
23 | 40 | |
24 | 41 | public static void run(){ |
25 | - | |
26 | 42 | int logData[] = new int[NUM_OF_LOGDATA_TYPE]; |
27 | 43 | |
28 | 44 | for ( Body b : Terrarium.bodyList) { |
29 | 45 | if ( !b.isDead() ){ |
30 | 46 | switch(b.getType()){ |
31 | - case 0: | |
32 | - logData[NUM_OF_MARISA]++; | |
33 | - break; | |
34 | - | |
35 | - case 1: | |
36 | - logData[NUM_OF_REIMU]++; | |
37 | - break; | |
38 | - | |
39 | - case 2: | |
40 | - logData[NUM_OF_ALICE]++; | |
41 | - break; | |
42 | - | |
43 | - case 3: | |
44 | - logData[NUM_OF_WASAREIMU]++; | |
45 | - break; | |
46 | - | |
47 | - case 4: | |
48 | - logData[NUM_OF_TARINAI]++; | |
49 | - break; | |
50 | - | |
51 | - default: | |
52 | - logData[NUM_OF_ETC_YUKKURI_TYPE]++; | |
53 | - break; | |
47 | + case 0: | |
48 | + logData[NUM_OF_MARISA]++; | |
49 | + break; | |
50 | + case 1: | |
51 | + logData[NUM_OF_REIMU]++; | |
52 | + break; | |
53 | + case 2: | |
54 | + logData[NUM_OF_ALICE]++; | |
55 | + break; | |
56 | + case 3: | |
57 | + logData[NUM_OF_WASAREIMU]++; | |
58 | + break; | |
59 | + case 4: | |
60 | + logData[NUM_OF_TARINAI]++; | |
61 | + break; | |
62 | + default: | |
63 | + logData[NUM_OF_ETC_YUKKURI_TYPE]++; | |
64 | + break; | |
54 | 65 | } |
55 | 66 | |
56 | 67 | switch(b.getAgeState()){ |
57 | - case BABY: | |
58 | - logData[NUM_OF_BABY]++; | |
59 | - break; | |
68 | + case BABY: | |
69 | + logData[NUM_OF_BABY]++; | |
70 | + break; | |
71 | + case CHILD: | |
72 | + logData[NUM_OF_CHILD]++; | |
73 | + break; | |
74 | + default: | |
75 | + case ADULT: | |
76 | + logData[NUM_OF_ADULT]++; | |
77 | + break; | |
78 | + } | |
60 | 79 | |
61 | - case CHILD: | |
62 | - logData[NUM_OF_CHILD]++; | |
63 | - break; | |
64 | - | |
65 | - default: | |
66 | - case ADULT: | |
67 | - logData[NUM_OF_ADULT]++; | |
68 | - break; | |
69 | - } | |
70 | - | |
71 | 80 | if ( b.isSick() == true ){ |
72 | 81 | logData[NUM_OF_SICK]++; |
73 | 82 | } |
@@ -76,32 +85,33 @@ | ||
76 | 85 | logData[NUM_OF_SHIT] = Terrarium.shitList.size(); |
77 | 86 | logData[NUM_OF_CASH] = Cash.cash; |
78 | 87 | |
79 | - for ( int i = 0 ; i < NUM_OF_LOGDATA_TYPE ; i++ ) { | |
80 | - logList.add( logData[i] ); | |
81 | - logDataSum[i] += logData[i] - prevLogData[i]; | |
82 | - prevLogData[i] = logData[i]; | |
88 | + synchronized(lock) { | |
89 | + for ( int i = 0 ; i < NUM_OF_LOGDATA_TYPE ; i++ ) { | |
90 | + logList[(int)(logPointer % LOG_GENERATION)][i] = logData[i]; | |
91 | + logDataSum[i] += (logData[i] - prevLogData[i]); | |
92 | + prevLogData[i] = logData[i]; | |
93 | + } | |
94 | + logPointer++; | |
95 | + if (logPointer >= LOG_GENERATION) { | |
96 | + overwrapped = true; | |
97 | + } | |
83 | 98 | } |
84 | 99 | } |
85 | 100 | |
86 | - public static int getNumOfLogData(){ | |
87 | - return logList.size(); | |
88 | - } | |
89 | - | |
90 | - public static int[] getLog( int logRecord ){ | |
91 | - if (( logRecord >= 0 ) && ( NUM_OF_LOGDATA_TYPE * logRecord < logList.size() ) && ( logList.size() != 0 ) ){ | |
92 | - int[] logDataReturn = new int[NUM_OF_LOGDATA_TYPE]; | |
93 | - for ( int i = 0 ; i < NUM_OF_LOGDATA_TYPE ; i++ ) { | |
94 | - logDataReturn[i] = logList.get(NUM_OF_LOGDATA_TYPE * ( logRecord ) + i ); | |
101 | + public static int[] getLog(int index){ | |
102 | + synchronized(lock) { | |
103 | + if (index < 0 || index >= LOG_GENERATION) { | |
104 | + return null; | |
95 | 105 | } |
96 | - return logDataReturn; | |
106 | + if (!overwrapped && (logPointer - LOG_GENERATION + index < 0)) { | |
107 | + return null; | |
108 | + } | |
109 | + return logList[(logPointer + index) % LOG_GENERATION]; | |
97 | 110 | } |
98 | - return null; | |
99 | - | |
100 | 111 | } |
101 | 112 | |
102 | 113 | public static int[] getNumOfObjSumLog(){ |
103 | 114 | return logDataSum; |
104 | - | |
105 | 115 | } |
106 | 116 | |
107 | 117 | public static int[] getNumOfObjNowLog(){ |
@@ -108,9 +118,16 @@ | ||
108 | 118 | return prevLogData; |
109 | 119 | |
110 | 120 | } |
121 | + | |
122 | + public static int getLogGeneration() { | |
123 | + return LOG_GENERATION; | |
124 | + } | |
111 | 125 | |
112 | 126 | public static void clearLog(){ |
113 | - logList.clear(); | |
114 | - run(); | |
127 | + synchronized(lock) { | |
128 | + logPointer = 0; | |
129 | + overwrapped = false; | |
130 | + run(); | |
131 | + } | |
115 | 132 | } |
116 | 133 | } |
\ No newline at end of file |
@@ -3,15 +3,10 @@ | ||
3 | 3 | |
4 | 4 | import javax.imageio.ImageIO; |
5 | 5 | |
6 | -import java.util.ArrayList; | |
7 | -import java.util.List; | |
8 | 6 | import java.util.Random; |
9 | 7 | |
10 | 8 | public class GarbageChute extends ObjEX implements java.io.Serializable { |
11 | 9 | static final long serialVersionUID = 1L; |
12 | - | |
13 | - public static List<ObjEX> objEXList = new ArrayList<ObjEX>(); | |
14 | - | |
15 | 10 | public int type = 0; |
16 | 11 | public static final int hitCheckObjType = 31; |
17 | 12 | public static final int size = 128; |
@@ -77,15 +72,9 @@ | ||
77 | 72 | public int getCost() { |
78 | 73 | return cost; |
79 | 74 | } |
80 | - | |
81 | - @Override | |
82 | - public void removeListData(){ | |
83 | - objEXList.remove(this); | |
84 | - } | |
85 | 75 | |
86 | 76 | public GarbageChute(int initX, int initY, Direction initDir) { |
87 | 77 | super(initX, initY, ObjEX.Direction.BACK); |
88 | - objEXList.add(this); | |
89 | 78 | objType = Type.PLATFORM; |
90 | 79 | } |
91 | 80 | } |
\ No newline at end of file |
@@ -1,15 +1,10 @@ | ||
1 | 1 | import java.awt.Image; |
2 | 2 | import java.io.IOException; |
3 | -import java.util.ArrayList; | |
4 | -import java.util.List; | |
5 | 3 | |
6 | 4 | import javax.imageio.ImageIO; |
7 | 5 | |
8 | 6 | public class MachinePress extends ObjEX implements java.io.Serializable { |
9 | 7 | static final long serialVersionUID = 1L; |
10 | - | |
11 | - public static List<ObjEX> objEXList = new ArrayList<ObjEX>(); | |
12 | - | |
13 | 8 | public int type = 0; |
14 | 9 | public static final int hitCheckObjType = 3; |
15 | 10 | public static final int size = 256; |
@@ -82,14 +77,8 @@ | ||
82 | 77 | return cost; |
83 | 78 | } |
84 | 79 | |
85 | - @Override | |
86 | - public void removeListData(){ | |
87 | - objEXList.remove(this); | |
88 | - } | |
89 | - | |
90 | 80 | public MachinePress(int initX, int initY, Direction initDir) { |
91 | 81 | super(initX, initY, initDir); |
92 | - objEXList.add(this); | |
93 | 82 | objType = Type.FIX_OBJECT; |
94 | 83 | } |
95 | 84 | } |
\ No newline at end of file |