• R/O
  • SSH
  • HTTPS

simyukkuri: 提交


Commit MetaInfo

修订版249 (tree)
时间2015-08-27 20:31:44
作者mimisuke

Log Message

Improved the logger and handling of objEX.

更改概述

差异

--- branches/test/OrangePool.java (revision 248)
+++ branches/test/OrangePool.java (revision 249)
@@ -1,15 +1,10 @@
11 import java.awt.Image;
22 import java.io.IOException;
3-import java.util.ArrayList;
4-import java.util.List;
53
64 import javax.imageio.ImageIO;
75
86 public class OrangePool extends ObjEX implements java.io.Serializable {
97 static final long serialVersionUID = 1L;
10-
11- public static List<ObjEX> objEXList = new ArrayList<ObjEX>();
12-
138 public int type = 0;
149 public static final int hitCheckObjType = 1;
1510 public static final int size = 128;
@@ -88,14 +83,8 @@
8883 return cost[type];
8984 }
9085
91- @Override
92- public void removeListData(){
93- objEXList.remove(this);
94- }
95-
9686 public OrangePool(int initX, int initY, Direction initDir) {
9787 super(initX, initY, ObjEX.Direction.BACK);
98- objEXList.add(this);
9988 switch ( initDir ) { //方向データを仮利用
10089 case BACK:
10190 default:
--- branches/test/FoodMaker.java (revision 248)
+++ branches/test/FoodMaker.java (revision 249)
@@ -3,15 +3,10 @@
33
44 import javax.imageio.ImageIO;
55
6-import java.util.ArrayList;
7-import java.util.List;
86 import java.util.Random;
97
108 public class FoodMaker extends ObjEX implements java.io.Serializable {
119 static final long serialVersionUID = 1L;
12-
13- public static List<ObjEX> objEXList = new ArrayList<ObjEX>();
14-
1510 public int type = 0;
1611 public static final int hitCheckObjType = 7;
1712 public static final int size = 128;
@@ -229,14 +224,8 @@
229224 return cost;
230225 }
231226
232- @Override
233- public void removeListData(){
234- objEXList.remove(this);
235- }
236-
237227 public FoodMaker(int initX, int initY, Direction initDir) {
238228 super(initX, initY, ObjEX.Direction.BACK);
239- objEXList.add(this);
240229 objType = Type.PLATFORM;
241230 Cash.addCash(-getValue());
242231 }
--- branches/test/ObjEX.java (revision 248)
+++ branches/test/ObjEX.java (revision 249)
@@ -1,5 +1,4 @@
11 import java.awt.Image;
2-import java.util.*;
32
43 public class ObjEX extends Obj implements java.io.Serializable {
54 static final long serialVersionUID = 1L;
@@ -7,8 +6,6 @@
76
87 protected Image[] images;
98
10- public static List<ObjEX> objEXList = new ArrayList<ObjEX>();
11-
129 public static final int YUKKURI = 1;
1310 public static final int SHIT = 2;
1411 public static final int FOOD = 4;
@@ -75,7 +72,6 @@
7572 {
7673 age += TICK;
7774 if (removed) {
78- removeListData();
7975 return Event.REMOVED;
8076 }
8177 if (!grabbed) {
@@ -123,10 +119,6 @@
123119 upDate();
124120 return Event.DONOTHING;
125121 }
126-
127- public void removeListData(){
128- objEXList.remove(this);
129- }
130122
131123 public ObjEX(int initX, int initY, Direction initDir) {
132124 objType = Type.PLATFORM;
--- branches/test/ProductChute.java (revision 248)
+++ branches/test/ProductChute.java (revision 249)
@@ -3,15 +3,10 @@
33
44 import javax.imageio.ImageIO;
55
6-import java.util.ArrayList;
7-import java.util.List;
86 import java.util.Random;
97
108 public class ProductChute extends ObjEX implements java.io.Serializable {
119 static final long serialVersionUID = 1L;
12-
13- public static List<ObjEX> objEXList = new ArrayList<ObjEX>();
14-
1510 public static final int type = 0;
1611 public static final int hitCheckObjType = 31;
1712 public static final int size = 128;
@@ -84,15 +79,9 @@
8479 public int getCost() {
8580 return cost;
8681 }
87-
88- @Override
89- public void removeListData(){
90- objEXList.remove(this);
91- }
9282
9383 public ProductChute(int initX, int initY, Direction initDir) {
9484 super(initX, initY, ObjEX.Direction.BACK);
95- objEXList.add(this);
9685 objType = Type.PLATFORM;
9786 }
9887 }
\ No newline at end of file
--- branches/test/BreedingPool.java (revision 248)
+++ branches/test/BreedingPool.java (revision 249)
@@ -3,15 +3,10 @@
33
44 import javax.imageio.ImageIO;
55
6-import java.util.ArrayList;
7-import java.util.List;
86 import java.util.Random;
97
108 public class BreedingPool extends ObjEX implements java.io.Serializable {
119 static final long serialVersionUID = 1L;
12-
13- public static List<ObjEX> objEXList = new ArrayList<ObjEX>();
14-
1510 public int type = 0;
1611 public static final int hitCheckObjType = 1;
1712 public static final int size = 128;
@@ -77,14 +72,8 @@
7772 return cost[type];
7873 }
7974
80- @Override
81- public void removeListData(){
82- objEXList.remove(this);
83- }
84-
8575 public BreedingPool(int initX, int initY, Direction initDir) {
8676 super(initX, initY, ObjEX.Direction.BACK);
87- objEXList.add(this);
8877 switch ( initDir ) { //方向データを仮利用
8978 case BACK:
9079 default:
--- branches/test/Terrarium.java (revision 248)
+++ branches/test/Terrarium.java (revision 249)
@@ -1,5 +1,5 @@
11 /*
2- * Copyright 2013 Mimisuke
2+ * Copyright 2013-2015 Mimisuke
33 *
44 * Licensed under the Apache License, Version 2.0 (the "License");
55 * you may not use this file except in compliance with the License.
@@ -28,10 +28,11 @@
2828 public static ArrayList<Toilet> toiletList = new ArrayList<Toilet>();
2929 public static ArrayList<Toy> toyList = new ArrayList<Toy>();
3030 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>();
3133
32- public static int operationTime = 0;
34+ public static long operationTime = 0;
3335 public static final int TICK = 1;
34-
3536
3637 private static int map[][] = new int[MAX_X+1][MAX_Y+1];
3738 private static Random rnd = new Random();
@@ -56,17 +57,10 @@
5657 out.writeObject(toiletList);
5758 out.writeObject(toyList);
5859 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);
6962 out.writeObject(map);
63+ out.writeLong(operationTime);
7064 out.flush();
7165 } finally {
7266 out.close();
@@ -88,17 +82,10 @@
8882 ArrayList<Toilet> toiletList;
8983 ArrayList<Toy> toyList;
9084 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;
10187 int map[][];
88+ long operationTime;
10289 try {
10390 String s = in.readUTF();
10491 if(!Terrarium.class.getCanonicalName().equals(s)) {
@@ -114,17 +101,10 @@
114101 toiletList = (ArrayList<Toilet>)in.readObject();
115102 toyList = (ArrayList<Toy>)in.readObject();
116103 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();
127106 map = (int [][])in.readObject();
107+ operationTime = in.readLong();
128108 } finally {
129109 in.close();
130110 }
@@ -137,20 +117,12 @@
137117 Terrarium.toiletList = toiletList;
138118 Terrarium.toyList = toyList;
139119 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;
150122 Terrarium.map = map;
123+ Terrarium.operationTime = operationTime;
151124 }
152125
153-
154126 public static List<Obj> getObjList(){
155127 List <Obj>objList = new ArrayList<Obj>();
156128 objList.addAll(Terrarium.bodyList);
@@ -158,28 +130,20 @@
158130 objList.addAll(Terrarium.foodList);
159131 objList.addAll(Terrarium.toyList);
160132 return objList;
161- }
133+ }
162134
163-
164135 public static List<ObjEX> getPlatformList(){
165136 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);
172138 return objList;
173- }
174-
139+ }
175140
176141 public static List<ObjEX> getFixObjList(){
177142 List <ObjEX>objList = new ArrayList<ObjEX>();
178- objList.addAll(MachinePress.objEXList);
143+ objList.addAll(Terrarium.fixedObjExList);
179144 return objList;
180- }
145+ }
181146
182-
183147 private static void setLine(int x1, int y1, int x2, int y2, boolean setFlag) {
184148 int distance = (int)Math.sqrt(distance(x1, y1, x2, y2));
185149 double deltaX = (double)(x2 - x1)/(double)distance;
@@ -800,24 +764,31 @@
800764 switch(addObjEX){
801765 case SimYukkuri.BELTCONVEYOR:
802766 objEX = new Beltconveyor(x, y, dir);
767+ objExList.add(objEX);
803768 break;
804769 case SimYukkuri.BREEDINGPOOL:
805770 objEX = new BreedingPool(x, y, dir);
771+ objExList.add(objEX);
806772 break;
807773 case SimYukkuri.GARBAGECHUTE:
808774 objEX = new GarbageChute(x, y, dir);
775+ objExList.add(objEX);
809776 break;
810777 case SimYukkuri.MACHINEPRESS:
811778 objEX = new MachinePress(x, y, dir);
779+ fixedObjExList.add(objEX);
812780 break;
813781 case SimYukkuri.FOODMAKER:
814782 objEX = new FoodMaker(x, y, dir);
783+ objExList.add(objEX);
815784 break;
816785 case SimYukkuri.ORANGEPOOL:
817786 objEX = new OrangePool(x, y, dir);
787+ objExList.add(objEX);
818788 break;
819789 case SimYukkuri.PRODUCTCHUTE:
820790 objEX = new ProductChute(x, y, dir);
791+ objExList.add(objEX);
821792 break;
822793 default:
823794 break;
@@ -833,6 +804,10 @@
833804 public static boolean getAlarm() {
834805 return alarm;
835806 }
807+
808+ public static long getOperationTime() {
809+ return operationTime;
810+ }
836811
837812 public static void cleanAll() {
838813 for (Shit s: shitList) {
@@ -873,17 +848,14 @@
873848 i.remove();
874849 }
875850 }
876-
877851
878852 // 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();) {
882854 ObjEX oex = i.next();
883855 ret = oex.clockTick();
884856 if (ret == Obj.Event.REMOVED) {
885- oex.remove();
886-
857+ i.remove();
858+ continue;
887859 }
888860 List <Obj>objList = getObjList();
889861 objList.addAll(Terrarium.toiletList);
@@ -921,16 +893,14 @@
921893 }
922894
923895 // 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();) {
926897 ObjEX oex = i.next();
927898 ret = oex.clockTick();
928899 if (ret == Obj.Event.REMOVED) {
929900 i.remove();
901+ continue;
930902 }
931- List <Obj>objList = new ArrayList<Obj>();
932- objList.addAll(Terrarium.bodyList);
933- for (Obj o : objList) {
903+ for (Obj o : Terrarium.bodyList) {
934904 oex.checkHitObj( o );
935905 }
936906 }
@@ -1011,6 +981,5 @@
1011981 }
1012982
1013983 operationTime += TICK;
1014-
1015984 }
1016985 }
\ No newline at end of file
--- branches/test/Beltconveyor.java (revision 248)
+++ branches/test/Beltconveyor.java (revision 249)
@@ -1,15 +1,10 @@
11 import java.awt.Image;
22 import java.io.IOException;
3-import java.util.ArrayList;
4-import java.util.List;
53
64 import javax.imageio.ImageIO;
75
86 public class Beltconveyor extends ObjEX implements java.io.Serializable {
97 static final long serialVersionUID = 1L;
10-
11- public static List<ObjEX> objEXList = new ArrayList<ObjEX>();
12-
138 public int type = 0;
149 public static final int hitCheckObjType = 31;
1510 public static final int size = 128;
@@ -105,14 +100,8 @@
105100 Cash.addCash(-getValue());
106101 }
107102
108- @Override
109- public void removeListData(){
110- objEXList.remove(this);
111- }
112-
113103 public Beltconveyor(int initX, int initY, Direction initDir) {
114104 super(initX, initY, initDir);
115- objEXList.add(this);
116105 objType = Type.PLATFORM;
117106 beltSpeed = 1;
118107 }
--- branches/test/SimYukkuri.java (revision 248)
+++ branches/test/SimYukkuri.java (revision 249)
@@ -61,7 +61,7 @@
6161
6262 JButton saveButton, loadButton, addYukkuriButton, languageButton, pauseButton, showLogButton, nextPageLogButton, clearLogButton;
6363
64- static int clearLogTime = 0;
64+ static long clearLogTime = 0;
6565
6666 static myPane mypane = new myPane();
6767 static Thread mythread;
@@ -503,8 +503,6 @@
503503 }
504504 }
505505 }
506-
507-
508506 if (found == null) {// platform has lowest priority.
509507 List <ObjEX>platformList = Terrarium.getPlatformList();
510508 for (Iterator<ObjEX> i = platformList.iterator(); i.hasNext();) {
@@ -520,7 +518,6 @@
520518 }
521519 }
522520 }
523-
524521 return found;
525522 }
526523
@@ -1544,14 +1541,14 @@
15441541 g.setColor(textColor1);
15451542 g.setFont(textFontTitle);
15461543
1547- int NUM_OF_GRAPH_DATA = 120;
15481544 int GRAPH_WIDTH = 700;
15491545 int GRAPH_HEIGHT = 200;
15501546 int GRAPH_OFFSETX = 100;
15511547 int GRAPH_OFFSETY = 300;
15521548 int LEGEND_OFFSETX = 120;
1549+ int NUM_OF_GRAPH_DATA = Logger.getLogGeneration();
15531550
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];
15551552 int[] numOfObjNowLog = Logger.getNumOfObjNowLog();
15561553 int numOfMaxYukkuri = 0;
15571554 int numOfMaxUnun = 0;
@@ -1558,12 +1555,10 @@
15581555 int numOfMaxCash = 0;
15591556 int numOfSumYukkuri = 0;
15601557 int[] logDataTmp;
1561- int operationTime = Terrarium.operationTime / 10;
1558+ long operationTime = Terrarium.operationTime / 10;
15621559
15631560 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) {
15671562 numOfSumYukkuri = 0;
15681563 for (int j = 0; j < Logger.NUM_OF_ETC_YUKKURI_TYPE + 1; j++) {
15691564 numOfSumYukkuri += logDataTmp[j];
@@ -1579,11 +1574,11 @@
15791574 numOfMaxCash = logDataTmp[Logger.NUM_OF_CASH];
15801575 }
15811576 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];
15831578 }
15841579 } else {
15851580 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;
15871582 }
15881583 }
15891584 }
@@ -1596,7 +1591,7 @@
15961591 yp[NUM_OF_GRAPH_DATA + i] = GRAPH_HEIGHT + GRAPH_OFFSETY;
15971592 }
15981593
1599- int opetmp = operationTime % NUM_OF_GRAPH_DATA;
1594+ int opetmp = (int)(operationTime % NUM_OF_GRAPH_DATA);
16001595
16011596 switch (showPage) {
16021597 case 0:
@@ -1632,10 +1627,10 @@
16321627 }
16331628 g.fillRect(LEGEND_OFFSETX + 180, 30 * i + 130, 10, 10);
16341629 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;
16371632 } else {
1638- yp[k] -= logData[Logger.NUM_OF_LOGDATA_TYPE * k + i] * GRAPH_HEIGHT / 1;
1633+ yp[k] -= logData[k][i] * GRAPH_HEIGHT / 1;
16391634 }
16401635 }
16411636 g.fillPolygon(xp, yp, NUM_OF_GRAPH_DATA * 2);
@@ -1672,10 +1667,10 @@
16721667 }
16731668 g.fillRect(LEGEND_OFFSETX + 180, 30 * i + 130, 10, 10);
16741669 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;
16771672 } 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;
16791674 }
16801675 }
16811676 g.fillPolygon(xp, yp, NUM_OF_GRAPH_DATA * 2);
@@ -1710,17 +1705,11 @@
17101705 g.fillRect(LEGEND_OFFSETX + 180, 30 * i + 130, 10, 10);
17111706 for (int k = 0; k < NUM_OF_GRAPH_DATA; k++) {
17121707 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;
17141709 } 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;
17161711 } 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;
17241713 }
17251714 }
17261715 g.fillPolygon(xp, yp, NUM_OF_GRAPH_DATA * 2);
@@ -1742,10 +1731,10 @@
17421731 g.drawString(Integer.toString(numOfObjNowLog[Logger.NUM_OF_SHIT]), LEGEND_OFFSETX + 130, 140);
17431732 g.setColor(Color.GRAY);
17441733 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;
17471736 } 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;
17491738 }
17501739 }
17511740 g.fillRect(LEGEND_OFFSETX + 180, 130, 10, 10);
@@ -1765,17 +1754,17 @@
17651754 g.setFont(textFonttext);
17661755 for (int i = 0; i < 1; i++) {
17671756 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);
17701759 g.drawString(InitLoader.getLogKind(4, 0), LEGEND_OFFSETX, 30 * i + 140);
17711760 g.drawString(InitLoader.getLogKind(4, 1), LEGEND_OFFSETX, 30 * (i + 1) + 140);
17721761 g.setColor(Color.YELLOW);
17731762 if (i == 0) {
17741763 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;
17791768 }
17801769 }
17811770 g.fillPolygon(xp, yp, NUM_OF_GRAPH_DATA * 2);
@@ -1800,8 +1789,8 @@
18001789 int graphx = GRAPH_WIDTH - (((GRAPH_WIDTH) * 30 * i) / NUM_OF_GRAPH_DATA) - ((opetmp % 30) * GRAPH_WIDTH / NUM_OF_GRAPH_DATA) + GRAPH_OFFSETX;
18011790 if (GRAPH_WIDTH - (GRAPH_WIDTH * 30 * i / NUM_OF_GRAPH_DATA + opetmp) >= 0 && operationTime - 30 * i >= 0) {
18021791 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,
18051794 GRAPH_OFFSETY + GRAPH_HEIGHT + 18);
18061795 }
18071796 }
--- branches/test/Logger.java (revision 248)
+++ branches/test/Logger.java (revision 249)
@@ -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+ */
316
417 public class Logger {
5- public static final int TICK = 1;
618 public static final int NUM_OF_MARISA = 0;
719 public static final int NUM_OF_REIMU = 1;
820 public static final int NUM_OF_ALICE = 2;
@@ -16,58 +28,55 @@
1628 public static final int NUM_OF_SHIT = 10;
1729 public static final int NUM_OF_CASH = 11;
1830 public static final int NUM_OF_LOGDATA_TYPE = 12;
31+ public static final int LOG_GENERATION = 120;
1932
2033 private static int[] prevLogData = new int[NUM_OF_LOGDATA_TYPE];
2134 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();
2340
2441 public static void run(){
25-
2642 int logData[] = new int[NUM_OF_LOGDATA_TYPE];
2743
2844 for ( Body b : Terrarium.bodyList) {
2945 if ( !b.isDead() ){
3046 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;
5465 }
5566
5667 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+ }
6079
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-
7180 if ( b.isSick() == true ){
7281 logData[NUM_OF_SICK]++;
7382 }
@@ -76,32 +85,33 @@
7685 logData[NUM_OF_SHIT] = Terrarium.shitList.size();
7786 logData[NUM_OF_CASH] = Cash.cash;
7887
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+ }
8398 }
8499 }
85100
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;
95105 }
96- return logDataReturn;
106+ if (!overwrapped && (logPointer - LOG_GENERATION + index < 0)) {
107+ return null;
108+ }
109+ return logList[(logPointer + index) % LOG_GENERATION];
97110 }
98- return null;
99-
100111 }
101112
102113 public static int[] getNumOfObjSumLog(){
103114 return logDataSum;
104-
105115 }
106116
107117 public static int[] getNumOfObjNowLog(){
@@ -108,9 +118,16 @@
108118 return prevLogData;
109119
110120 }
121+
122+ public static int getLogGeneration() {
123+ return LOG_GENERATION;
124+ }
111125
112126 public static void clearLog(){
113- logList.clear();
114- run();
127+ synchronized(lock) {
128+ logPointer = 0;
129+ overwrapped = false;
130+ run();
131+ }
115132 }
116133 }
\ No newline at end of file
--- branches/test/GarbageChute.java (revision 248)
+++ branches/test/GarbageChute.java (revision 249)
@@ -3,15 +3,10 @@
33
44 import javax.imageio.ImageIO;
55
6-import java.util.ArrayList;
7-import java.util.List;
86 import java.util.Random;
97
108 public class GarbageChute extends ObjEX implements java.io.Serializable {
119 static final long serialVersionUID = 1L;
12-
13- public static List<ObjEX> objEXList = new ArrayList<ObjEX>();
14-
1510 public int type = 0;
1611 public static final int hitCheckObjType = 31;
1712 public static final int size = 128;
@@ -77,15 +72,9 @@
7772 public int getCost() {
7873 return cost;
7974 }
80-
81- @Override
82- public void removeListData(){
83- objEXList.remove(this);
84- }
8575
8676 public GarbageChute(int initX, int initY, Direction initDir) {
8777 super(initX, initY, ObjEX.Direction.BACK);
88- objEXList.add(this);
8978 objType = Type.PLATFORM;
9079 }
9180 }
\ No newline at end of file
--- branches/test/MachinePress.java (revision 248)
+++ branches/test/MachinePress.java (revision 249)
@@ -1,15 +1,10 @@
11 import java.awt.Image;
22 import java.io.IOException;
3-import java.util.ArrayList;
4-import java.util.List;
53
64 import javax.imageio.ImageIO;
75
86 public class MachinePress extends ObjEX implements java.io.Serializable {
97 static final long serialVersionUID = 1L;
10-
11- public static List<ObjEX> objEXList = new ArrayList<ObjEX>();
12-
138 public int type = 0;
149 public static final int hitCheckObjType = 3;
1510 public static final int size = 256;
@@ -82,14 +77,8 @@
8277 return cost;
8378 }
8479
85- @Override
86- public void removeListData(){
87- objEXList.remove(this);
88- }
89-
9080 public MachinePress(int initX, int initY, Direction initDir) {
9181 super(initX, initY, initDir);
92- objEXList.add(this);
9382 objType = Type.FIX_OBJECT;
9483 }
9584 }
\ No newline at end of file
Show on old repository browser