Applied the patches related to #32009.
@@ -24,6 +24,7 @@ | ||
24 | 24 | |
25 | 25 | private static final int toiletSize = 128; |
26 | 26 | private static Image images; |
27 | + private static int value = 200; | |
27 | 28 | |
28 | 29 | public static void loadImages (ClassLoader loader) throws IOException { |
29 | 30 | final String path = "images/"; |
@@ -44,6 +45,11 @@ | ||
44 | 45 | return toiletSize; |
45 | 46 | } |
46 | 47 | |
48 | + @Override | |
49 | + public int getValue() { | |
50 | + return value; | |
51 | + } | |
52 | + | |
47 | 53 | public Toilet(int initX, int initY) { |
48 | 54 | objType = Type.TOILET; |
49 | 55 | x = initX; |
@@ -10,7 +10,7 @@ | ||
10 | 10 | |
11 | 11 | public static List<ObjEX> objEXList = new ArrayList<ObjEX>(); |
12 | 12 | |
13 | - public static final int type = 0; | |
13 | + public int type = 0; | |
14 | 14 | public static final int hitCheckObjType = 1; |
15 | 15 | public static final int size = 128; |
16 | 16 | private static final int images_num = 1; //このクラスの総使用画像数 |
@@ -17,6 +17,9 @@ | ||
17 | 17 | private static final int anime_pattern = 1; //このクラスのアニメーション数 |
18 | 18 | private static int AnimeImagesNum[] = {1};//アニメごとに何枚使うか |
19 | 19 | private static Image[] images = new Image[images_num]; |
20 | + private boolean rescue; | |
21 | + private static int[] value = {500,10000}; | |
22 | + private static int[] cost = {10,200}; | |
20 | 23 | |
21 | 24 | public static void loadImages (ClassLoader loader) throws IOException { |
22 | 25 | final String path = "images/"; |
@@ -62,7 +65,6 @@ | ||
62 | 65 | |
63 | 66 | @Override |
64 | 67 | public int objHitProcess( Obj o ) { |
65 | - | |
66 | 68 | if ( o.objType == Obj.Type.YUKKURI ){ |
67 | 69 | Body b = (Body)o; |
68 | 70 | b.giveJuice(); |
@@ -69,11 +71,28 @@ | ||
69 | 71 | if ( b.isDirty() == true ) { |
70 | 72 | b.dirty = false; |
71 | 73 | } |
74 | + if ( rescue ) { | |
75 | + if ( b.isDead() && !b.isCrashed() ){ | |
76 | + b.revival(); | |
77 | + } | |
78 | + b.setCantDie(); | |
79 | + } | |
80 | + Cash.addCash(-getCost()); | |
72 | 81 | } |
73 | 82 | return 0; |
74 | 83 | } |
84 | + | |
85 | + @Override | |
86 | + public int getValue() { | |
87 | + return value[type]; | |
88 | + } | |
75 | 89 | |
76 | 90 | @Override |
91 | + public int getCost() { | |
92 | + return cost[type]; | |
93 | + } | |
94 | + | |
95 | + @Override | |
77 | 96 | public void removeListData(){ |
78 | 97 | objEXList.remove(this); |
79 | 98 | } |
@@ -81,6 +100,17 @@ | ||
81 | 100 | public OrangePool(int initX, int initY, Direction initDir) { |
82 | 101 | super(initX, initY, ObjEX.Direction.BACK); |
83 | 102 | objEXList.add(this); |
103 | + switch ( initDir ) { //方向データを仮利用 | |
104 | + case BACK: | |
105 | + default: | |
106 | + rescue = false; | |
107 | + type = 0; | |
108 | + break; | |
109 | + case THISSIDE: | |
110 | + rescue = true; | |
111 | + type = 1; | |
112 | + break; | |
113 | + } | |
84 | 114 | objType = Type.PLATFORM; |
85 | 115 | } |
86 | 116 | } |
\ No newline at end of file |
@@ -34,6 +34,10 @@ | ||
34 | 34 | private int amount = 0; |
35 | 35 | |
36 | 36 | private static final int[] shitSize = {10, 20, 30}; |
37 | + | |
38 | + | |
39 | + private static final int value[] = {-50,-100,-300}; | |
40 | + | |
37 | 41 | private static Image[][] images = new Image[NUM_OF_SHIT_STATE][3]; |
38 | 42 | |
39 | 43 | public static void loadImages (ClassLoader loader) throws IOException { |
@@ -108,6 +112,10 @@ | ||
108 | 112 | kick(0, blowLevel[ageState.ordinal()]*2, blowLevel[ageState.ordinal()]); |
109 | 113 | } |
110 | 114 | |
115 | + public int getValue() { | |
116 | + return value[ageState.ordinal()]; | |
117 | + } | |
118 | + | |
111 | 119 | public Event clockTick() |
112 | 120 | { |
113 | 121 | if (removed == false) { |
@@ -12,7 +12,7 @@ | ||
12 | 12 | |
13 | 13 | public static List<ObjEX> objEXList = new ArrayList<ObjEX>(); |
14 | 14 | |
15 | - public static final int type = 0; | |
15 | + public int type = 0; | |
16 | 16 | public static final int hitCheckObjType = 7; |
17 | 17 | public static final int size = 128; |
18 | 18 | private static final int images_num = 6; //このクラスの総使用画像数 |
@@ -21,6 +21,9 @@ | ||
21 | 21 | private static Image[] images = new Image[images_num]; |
22 | 22 | protected Random rnd = new Random(); |
23 | 23 | |
24 | + protected boolean processReady = true; | |
25 | + private static int value = 30000; | |
26 | + private static int cost = 20; | |
24 | 27 | protected int stockFood = -1; |
25 | 28 | private static final int numOfBodyType = 5; |
26 | 29 | private static final int numOfFoodType = 5; |
@@ -91,8 +94,11 @@ | ||
91 | 94 | |
92 | 95 | @Override |
93 | 96 | public int objHitProcess( Obj o ) { |
97 | + if ( !processReady ){ | |
98 | + return 0; | |
99 | + } | |
94 | 100 | Food.type foodType = null; |
95 | - if (stockFood == -1 ){ | |
101 | + if (stockFood == -1){ | |
96 | 102 | if ( o.objType == Obj.Type.YUKKURI ){ |
97 | 103 | Body b = (Body)o; |
98 | 104 | if ( b.isCrashed() == true || b.isBaby() == true ) { |
@@ -108,6 +114,7 @@ | ||
108 | 114 | if ( b.isAdult() == true ) { |
109 | 115 | objHitProcess( o ); |
110 | 116 | }else{ |
117 | + processReady = false; | |
111 | 118 | b.remove(); |
112 | 119 | } |
113 | 120 | } |
@@ -135,10 +142,12 @@ | ||
135 | 142 | default: |
136 | 143 | break; |
137 | 144 | } |
145 | + processReady = false; | |
138 | 146 | f.remove(); |
139 | 147 | }else if ( o.objType == Obj.Type.SHIT ){ |
140 | 148 | Shit s = (Shit)o; |
141 | 149 | stockFood = numOfBodyType+numOfFoodType; |
150 | + processReady = false; | |
142 | 151 | s.remove(); |
143 | 152 | } |
144 | 153 | }else{ |
@@ -154,6 +163,8 @@ | ||
154 | 163 | }else{ |
155 | 164 | foodType = foodTable[makeTable[stockFood][b.getType()]]; |
156 | 165 | } |
166 | + processReady = false; | |
167 | + Cash.addCash(-getCost()); | |
157 | 168 | b.remove(); |
158 | 169 | } |
159 | 170 | }else if ( o.objType == Obj.Type.FOOD ){ |
@@ -180,10 +191,14 @@ | ||
180 | 191 | default: |
181 | 192 | break; |
182 | 193 | } |
194 | + processReady = false; | |
195 | + Cash.addCash(-getCost()); | |
183 | 196 | f.remove(); |
184 | 197 | }else if ( o.objType == Obj.Type.SHIT ){ |
185 | 198 | Shit s = (Shit)o; |
186 | 199 | foodType = foodTable[makeTable[stockFood][numOfBodyType+numOfFoodType]]; |
200 | + processReady = false; | |
201 | + Cash.addCash(-getCost()); | |
187 | 202 | s.remove(); |
188 | 203 | } |
189 | 204 | if (foodType == null) { |
@@ -198,8 +213,25 @@ | ||
198 | 213 | } |
199 | 214 | return 0; |
200 | 215 | } |
216 | + | |
217 | + @Override | |
218 | + public void upDate() { | |
219 | + if ( age % 4 == 0 && processReady == false ){ | |
220 | + processReady = true; | |
221 | + } | |
222 | + } | |
201 | 223 | |
202 | 224 | @Override |
225 | + public int getValue() { | |
226 | + return value; | |
227 | + } | |
228 | + | |
229 | + @Override | |
230 | + public int getCost() { | |
231 | + return cost; | |
232 | + } | |
233 | + | |
234 | + @Override | |
203 | 235 | public void removeListData(){ |
204 | 236 | objEXList.remove(this); |
205 | 237 | } |
@@ -208,5 +240,6 @@ | ||
208 | 240 | super(initX, initY, ObjEX.Direction.BACK); |
209 | 241 | objEXList.add(this); |
210 | 242 | objType = Type.PLATFORM; |
243 | + Cash.addCash(-getValue()); | |
211 | 244 | } |
212 | 245 | } |
\ No newline at end of file |
@@ -71,7 +71,14 @@ | ||
71 | 71 | public int objHitProcess( Obj o ) { |
72 | 72 | return 0; |
73 | 73 | } |
74 | + | |
75 | + public void upDate() { | |
76 | + } | |
74 | 77 | |
78 | + public void buyObj() { | |
79 | + Cash.addCash(-getValue()); | |
80 | + } | |
81 | + | |
75 | 82 | @Override |
76 | 83 | public Event clockTick() |
77 | 84 | { |
@@ -122,6 +129,7 @@ | ||
122 | 129 | } |
123 | 130 | } |
124 | 131 | } |
132 | + upDate(); | |
125 | 133 | return Event.DONOTHING; |
126 | 134 | } |
127 | 135 |
@@ -136,5 +144,6 @@ | ||
136 | 144 | y = initY; |
137 | 145 | z = 0; |
138 | 146 | direction = initDir; |
147 | + //Cash.addCash(-getValue()); | |
139 | 148 | } |
140 | 149 | } |
\ No newline at end of file |
@@ -0,0 +1,102 @@ | ||
1 | +import java.awt.Image; | |
2 | +import java.io.IOException; | |
3 | + | |
4 | +import javax.imageio.ImageIO; | |
5 | + | |
6 | +import java.util.ArrayList; | |
7 | +import java.util.List; | |
8 | +import java.util.Random; | |
9 | + | |
10 | +public class ProductChute extends ObjEX implements java.io.Serializable { | |
11 | + static final long serialVersionUID = 1L; | |
12 | + | |
13 | + public static List<ObjEX> objEXList = new ArrayList<ObjEX>(); | |
14 | + | |
15 | + public static final int type = 0; | |
16 | + public static final int hitCheckObjType = 31; | |
17 | + public static final int size = 128; | |
18 | + private static final int images_num = 1; //このクラスの総使用画像数 | |
19 | + private static final int anime_pattern = 1; //このクラスのアニメーション数 | |
20 | + private static int AnimeImagesNum[] = {1};//アニメごとに何枚使うか | |
21 | + private static Image[] images = new Image[images_num]; | |
22 | + protected Random rnd = new Random(); | |
23 | + private static int value = 5000; | |
24 | + private static int cost = 10; | |
25 | + | |
26 | + public static void loadImages (ClassLoader loader) throws IOException { | |
27 | + final String path = "images/"; | |
28 | + images[0] = ImageIO.read(loader.getResourceAsStream(path+"productchute.png")); | |
29 | + images[0] = images[0].getScaledInstance(size*9/8, size*3/4, Image.SCALE_AREA_AVERAGING); | |
30 | + } | |
31 | + | |
32 | + public Image getImage(){ | |
33 | + return images[0]; | |
34 | + } | |
35 | + | |
36 | + @Override | |
37 | + public int getSize() { | |
38 | + return size; | |
39 | + } | |
40 | + | |
41 | + @Override | |
42 | + public int getHitCheckObjType() { | |
43 | + return hitCheckObjType; | |
44 | + } | |
45 | + | |
46 | + @Override | |
47 | + public int checkHitObj( Obj o ) { | |
48 | + int objX = o.getX(); | |
49 | + int objY = o.getY(); | |
50 | + int objZ = o.getZ(); | |
51 | + int platformSize = getSize()/2; | |
52 | + int platformX = getX(); | |
53 | + int platformY = getY(); | |
54 | + int platformZ = getZ(); | |
55 | + int offsetX = (Body.MAXSIZE - getSize())*7/32-28; | |
56 | + int offsetY = (Body.MAXSIZE - getSize())*6/16-40; | |
57 | + if ( objZ == 0 ){ //空中の物は移動させない | |
58 | + if ((platformX + offsetX)<=(objX) && (objX)<=(platformX + offsetX + platformSize)){ //X軸比較 | |
59 | + if ((platformY + offsetY)<=(objY) && (objY)<=(platformY + offsetY + platformSize)){ //Y軸比較 | |
60 | + objHitProcess( o ); | |
61 | + return 1; | |
62 | + } | |
63 | + } | |
64 | + } | |
65 | + return 0; | |
66 | + } | |
67 | + | |
68 | + @Override | |
69 | + public int objHitProcess( Obj o ) { | |
70 | + if ( o.objType == Obj.Type.YUKKURI ){ | |
71 | + Cash.addCash( -o.getValue()*10 ); | |
72 | + }else if ( o.objType == Obj.Type.FOOD ) { | |
73 | + Cash.addCash( o.getValue()/2 ); | |
74 | + }else{ | |
75 | + Cash.addCash( -o.getValue()*2 ); | |
76 | + } | |
77 | + Cash.addCash( -getCost() ); | |
78 | + o.remove(); | |
79 | + return 0; | |
80 | + } | |
81 | + | |
82 | + @Override | |
83 | + public int getValue() { | |
84 | + return value; | |
85 | + } | |
86 | + | |
87 | + @Override | |
88 | + public int getCost() { | |
89 | + return cost; | |
90 | + } | |
91 | + | |
92 | + @Override | |
93 | + public void removeListData(){ | |
94 | + objEXList.remove(this); | |
95 | + } | |
96 | + | |
97 | + public ProductChute(int initX, int initY, Direction initDir) { | |
98 | + super(initX, initY, ObjEX.Direction.BACK); | |
99 | + objEXList.add(this); | |
100 | + objType = Type.PLATFORM; | |
101 | + } | |
102 | +} | |
\ No newline at end of file |
@@ -12,7 +12,7 @@ | ||
12 | 12 | |
13 | 13 | public static List<ObjEX> objEXList = new ArrayList<ObjEX>(); |
14 | 14 | |
15 | - public static final int type = 0; | |
15 | + public int type = 0; | |
16 | 16 | public static final int hitCheckObjType = 1; |
17 | 17 | public static final int size = 128; |
18 | 18 | private static final int images_num = 1; //このクラスの総使用画像数 |
@@ -23,7 +23,10 @@ | ||
23 | 23 | |
24 | 24 | private boolean highDensity; |
25 | 25 | private boolean rapidGrowth; |
26 | + private static int[] value = {1000,4000,4000,10000}; | |
27 | + private static int[] cost = {50,180,180,350}; | |
26 | 28 | |
29 | + | |
27 | 30 | public static void loadImages (ClassLoader loader) throws IOException { |
28 | 31 | final String path = "images/"; |
29 | 32 | images[0] = ImageIO.read(loader.getResourceAsStream(path+"breedingpool.png")); |
@@ -46,9 +49,9 @@ | ||
46 | 49 | |
47 | 50 | @Override |
48 | 51 | public int objHitProcess( Obj o ) { |
49 | - if ( o.objType == Obj.Type.YUKKURI ){ | |
50 | - Body p = (Body)o; | |
51 | - if ( p.isDead() == false && (int)age % ((highDensity==true)?4:10) == 0 ) { | |
52 | + if ( o.objType == Obj.Type.YUKKURI ){ | |
53 | + Body p = (Body)o; | |
54 | + if ( p.isDead() == false && (int)age % ((highDensity==true)?4:10) == 0 ) { | |
52 | 55 | int babyType; |
53 | 56 | babyType = p.getType(); |
54 | 57 | if ((babyType == Reimu.type) && rnd.nextBoolean()) { |
@@ -64,7 +67,8 @@ | ||
64 | 67 | p.hasBaby = true; |
65 | 68 | if (rapidGrowth == true){ |
66 | 69 | p.rapidPregnantPeriod(); |
67 | - } | |
70 | + } | |
71 | + Cash.addCash(-getCost()); | |
68 | 72 | } |
69 | 73 | } |
70 | 74 | return 0; |
@@ -71,6 +75,16 @@ | ||
71 | 75 | } |
72 | 76 | |
73 | 77 | @Override |
78 | + public int getValue() { | |
79 | + return value[type]; | |
80 | + } | |
81 | + | |
82 | + @Override | |
83 | + public int getCost() { | |
84 | + return cost[type]; | |
85 | + } | |
86 | + | |
87 | + @Override | |
74 | 88 | public void removeListData(){ |
75 | 89 | objEXList.remove(this); |
76 | 90 | } |
@@ -98,5 +112,6 @@ | ||
98 | 112 | break; |
99 | 113 | } |
100 | 114 | objType = Type.PLATFORM; |
115 | + type = initDir.ordinal(); | |
101 | 116 | } |
102 | 117 | } |
\ No newline at end of file |
@@ -62,6 +62,7 @@ | ||
62 | 62 | out.writeObject(GarbageChute.objEXList); |
63 | 63 | out.writeObject(FoodMaker.objEXList); |
64 | 64 | out.writeObject(OrangePool.objEXList); |
65 | + out.writeObject(ProductChute.objEXList); | |
65 | 66 | |
66 | 67 | out.writeObject(MachinePress.objEXList); |
67 | 68 |
@@ -93,6 +94,7 @@ | ||
93 | 94 | ArrayList<ObjEX> garbageChuteList; |
94 | 95 | ArrayList<ObjEX> foodMakerList; |
95 | 96 | ArrayList<ObjEX> orangePoolList; |
97 | + ArrayList<ObjEX> productChuteList; | |
96 | 98 | |
97 | 99 | ArrayList<ObjEX> machinePressList; |
98 | 100 |
@@ -118,6 +120,7 @@ | ||
118 | 120 | garbageChuteList = (ArrayList<ObjEX>)in.readObject(); |
119 | 121 | foodMakerList = (ArrayList<ObjEX>)in.readObject(); |
120 | 122 | orangePoolList = (ArrayList<ObjEX>)in.readObject(); |
123 | + productChuteList = (ArrayList<ObjEX>)in.readObject(); | |
121 | 124 | |
122 | 125 | machinePressList = (ArrayList<ObjEX>)in.readObject(); |
123 | 126 |
@@ -140,6 +143,7 @@ | ||
140 | 143 | GarbageChute.objEXList = garbageChuteList; |
141 | 144 | FoodMaker.objEXList = foodMakerList; |
142 | 145 | OrangePool.objEXList = orangePoolList; |
146 | + ProductChute.objEXList = productChuteList; | |
143 | 147 | |
144 | 148 | MachinePress.objEXList = machinePressList; |
145 | 149 |
@@ -164,6 +168,7 @@ | ||
164 | 168 | objList.addAll(GarbageChute.objEXList); |
165 | 169 | objList.addAll(FoodMaker.objEXList); |
166 | 170 | objList.addAll(OrangePool.objEXList); |
171 | + objList.addAll(ProductChute.objEXList); | |
167 | 172 | return objList; |
168 | 173 | } |
169 | 174 |
@@ -476,7 +481,7 @@ | ||
476 | 481 | |
477 | 482 | private boolean checkFood(Body b) { |
478 | 483 | boolean ret = false; |
479 | - if (b.isExciting() || b.isSleeping() || b.isDead() || b.isFull() || b.isScare() || b.isSick()) { | |
484 | + if (b.isExciting() || b.isSleeping() || b.isDead() || b.isFull() || b.isScare() || b.isSick() || b.isFeelHardPain()) { | |
480 | 485 | return false; |
481 | 486 | } |
482 | 487 | if (!b.isRude() && !b.isIdiot() && b.wantToShit()) { |
@@ -747,6 +752,12 @@ | ||
747 | 752 | babyList.get(babyList.size()-1).kick(0,5,-2); |
748 | 753 | |
749 | 754 | } |
755 | + | |
756 | + private void addBaby(int x, int y, int z, int vx, int vy, int vz, int type, Body p1, Body p2) { | |
757 | + babyList.add(makeBody(x, y, z + 1, type, Body.AgeState.BABY, p1, p2)); | |
758 | + babyList.get(babyList.size()-1).kick(vx,vy,vz); | |
759 | + | |
760 | + } | |
750 | 761 | |
751 | 762 | public Body makeBody(int x, int y, int z, int type, Body.AgeState age, Body p1, Body p2) { |
752 | 763 | Body b; |
@@ -796,6 +807,7 @@ | ||
796 | 807 | |
797 | 808 | public void addToy(int x, int y) { |
798 | 809 | toyList.add(new Toy(x, y)); |
810 | + Cash.addCash( -toyList.get(toyList.size()-1).getValue() ); | |
799 | 811 | } |
800 | 812 | |
801 | 813 | public void addCrushedShit(int x, int y, int z, Body.AgeState ageState) { |
@@ -806,31 +818,37 @@ | ||
806 | 818 | |
807 | 819 | public void addToilet(int x, int y) { |
808 | 820 | toiletList.add(new Toilet(x, y)); |
821 | + Cash.addCash( -toiletList.get(toiletList.size()-1).getValue() ); | |
809 | 822 | } |
810 | 823 | |
811 | 824 | public void addObjEX( int addObjEX, int x, int y, ObjEX.Direction dir) { |
825 | + ObjEX objEX = null; | |
812 | 826 | switch(addObjEX){ |
813 | 827 | case SimYukkuri.BELTCONVEYOR: |
814 | - new Beltconveyor(x, y, dir); | |
828 | + objEX = new Beltconveyor(x, y, dir); | |
815 | 829 | break; |
816 | 830 | case SimYukkuri.BREEDINGPOOL: |
817 | - new BreedingPool(x, y, dir); | |
831 | + objEX = new BreedingPool(x, y, dir); | |
818 | 832 | break; |
819 | 833 | case SimYukkuri.GARBAGECHUTE: |
820 | - new GarbageChute(x, y, dir); | |
834 | + objEX = new GarbageChute(x, y, dir); | |
821 | 835 | break; |
822 | 836 | case SimYukkuri.MACHINEPRESS: |
823 | - new MachinePress(x, y, dir); | |
837 | + objEX = new MachinePress(x, y, dir); | |
824 | 838 | break; |
825 | 839 | case SimYukkuri.FOODMAKER: |
826 | - new FoodMaker(x, y, dir); | |
840 | + objEX = new FoodMaker(x, y, dir); | |
827 | 841 | break; |
828 | 842 | case SimYukkuri.ORANGEPOOL: |
829 | - new OrangePool(x, y, dir); | |
843 | + objEX = new OrangePool(x, y, dir); | |
830 | 844 | break; |
845 | + case SimYukkuri.PRODUCTCHUTE: | |
846 | + objEX = new ProductChute(x, y, dir); | |
847 | + break; | |
831 | 848 | default: |
832 | 849 | break; |
833 | 850 | } |
851 | + objEX.buyObj(); | |
834 | 852 | } |
835 | 853 | |
836 | 854 | public static void setAlarm() { |
@@ -966,13 +984,22 @@ | ||
966 | 984 | ret = b.clockTick(); |
967 | 985 | switch (ret) { |
968 | 986 | case DEAD: |
987 | + if (b.getBabyTypes().size() >= b.getMaxHaveBaby()/120) { | |
988 | + int numOfBaby = b.getBabyTypes().size(); | |
989 | + for ( int babyTypes:b.getBabyTypes()) { | |
990 | + addBaby(b.getX(), b.getY(), b.getZ()+b.getSize()/20, rnd.nextInt(numOfBaby/4+1)-numOfBaby/8, rnd.nextInt(numOfBaby/4+1)-numOfBaby/8, rnd.nextInt(numOfBaby/4+1)-numOfBaby/8-2, babyTypes, b, b.partner); | |
991 | + } | |
992 | + b.getBabyTypes().clear(); | |
993 | + if ( b.isCrashed() == false ) { | |
994 | + b.strikeByPress(); | |
995 | + } | |
996 | + } | |
969 | 997 | continue; |
970 | 998 | case BIRTHBABY: |
971 | - //for (int babyType:b.getBabyTypes()) { | |
972 | 999 | if ( b.age % 10 == 0 ){ |
973 | - int babytype = b.getBabyTypesDequeue(); | |
974 | - if ( babytype != -1 ){ | |
975 | - addBaby(b.getX(), b.getY(), b.getZ()+b.getSize()/15, babytype, b, b.partner); | |
1000 | + int babyType = b.getBabyTypesDequeue(); | |
1001 | + if ( babyType != -1 ){ | |
1002 | + addBaby(b.getX(), b.getY(), b.getZ()+b.getSize()/15, babyType, b, b.partner); | |
976 | 1003 | } |
977 | 1004 | } |
978 | 1005 | break; |
@@ -20,6 +20,9 @@ | ||
20 | 20 | public enum Type {YUKKURI, SHIT, FOOD, TOILET, TOY, PLATFORM, FIX_OBJECT} |
21 | 21 | public enum Event {DONOTHING, BIRTHBABY, DOSHIT, DEAD, REMOVED} |
22 | 22 | |
23 | + protected static final int value = 0; | |
24 | + protected static final int cost = 0; | |
25 | + | |
23 | 26 | public static final int TICK = 1; |
24 | 27 | |
25 | 28 | // basic attributes |
@@ -117,6 +120,14 @@ | ||
117 | 120 | return objType; |
118 | 121 | } |
119 | 122 | |
123 | + public int getValue() { | |
124 | + return value; | |
125 | + } | |
126 | + | |
127 | + public int getCost() { | |
128 | + return cost; | |
129 | + } | |
130 | + | |
120 | 131 | public void remove() { |
121 | 132 | removed = true; |
122 | 133 | } |
@@ -28,6 +28,7 @@ | ||
28 | 28 | private static int toysize = 16; |
29 | 29 | private static Image[] images = new Image[NUM_OF_BALL_IMG]; |
30 | 30 | private Body owner = null; |
31 | + private static int value = 100; | |
31 | 32 | |
32 | 33 | public static void loadImages (ClassLoader loader) throws IOException { |
33 | 34 | final String path = "images/toy/"; |
@@ -76,7 +77,12 @@ | ||
76 | 77 | public boolean isOwned(Body b) { |
77 | 78 | return (owner == b); |
78 | 79 | } |
79 | - | |
80 | + | |
81 | + @Override | |
82 | + public int getValue() { | |
83 | + return value; | |
84 | + } | |
85 | + | |
80 | 86 | public Toy(int initX, int initY) { |
81 | 87 | objType = Type.TOY; |
82 | 88 | x = initX; |
@@ -10,7 +10,7 @@ | ||
10 | 10 | |
11 | 11 | public static List<ObjEX> objEXList = new ArrayList<ObjEX>(); |
12 | 12 | |
13 | - public static final int type = 0; | |
13 | + public int type = 0; | |
14 | 14 | public static final int hitCheckObjType = 31; |
15 | 15 | public static final int size = 128; |
16 | 16 | private static final int images_num = 10; //このクラスの総使用画像数 |
@@ -19,6 +19,8 @@ | ||
19 | 19 | private static Image[] images = new Image[images_num]; |
20 | 20 | |
21 | 21 | private int beltSpeed; |
22 | + private static final int value = 2000; | |
23 | + private static final int cost = 5; | |
22 | 24 | |
23 | 25 | public static void loadImages (ClassLoader loader) throws IOException { |
24 | 26 | final String path = "images/beltconveyor/"; |
@@ -78,11 +80,33 @@ | ||
78 | 80 | return 0; |
79 | 81 | } |
80 | 82 | |
83 | + @Override | |
84 | + public void upDate() { | |
85 | + if ( age % 150 == 0 ){ | |
86 | + Cash.addCash(-getCost()/4); | |
87 | + } | |
88 | + } | |
89 | + | |
81 | 90 | public int getBeltSpeed() { |
82 | 91 | return beltSpeed; |
83 | 92 | } |
84 | 93 | |
85 | 94 | @Override |
95 | + public int getValue() { | |
96 | + return value; | |
97 | + } | |
98 | + | |
99 | + @Override | |
100 | + public int getCost() { | |
101 | + return cost; | |
102 | + } | |
103 | + | |
104 | + @Override | |
105 | + public void buyObj() { | |
106 | + Cash.addCash(-getValue()); | |
107 | + } | |
108 | + | |
109 | + @Override | |
86 | 110 | public void removeListData(){ |
87 | 111 | objEXList.remove(this); |
88 | 112 | } |
@@ -44,7 +44,7 @@ | ||
44 | 44 | static final Object lock = new Object(); |
45 | 45 | static boolean initialized = false; |
46 | 46 | |
47 | - static final int TOOL = 0, FOOD = 1, CLEAN = 2, ACCESSORY = 3, PICKUP = 4, PANTS = 5, TOILET = 6, BARRIER = 7, TOYS = 8, BELTCONVEYOR = 9, BREEDINGPOOL = 10 ,GARBAGECHUTE = 11, MACHINEPRESS = 12, FOODMAKER = 13, ORANGEPOOL = 14; | |
47 | + static final int TOOL = 0, FOOD = 1, CLEAN = 2, ACCESSORY = 3, PICKUP = 4, PANTS = 5, TOILET = 6, BARRIER = 7, TOYS = 8, BELTCONVEYOR = 9, BREEDINGPOOL = 10 ,GARBAGECHUTE = 11, MACHINEPRESS = 12, FOODMAKER = 13, ORANGEPOOL = 14, PRODUCTCHUTE = 15; | |
48 | 48 | |
49 | 49 | static final int PUNISH = 0, HAMMER = 1, VIBRATOR = 2, JUICE = 3, DECOPING = 4; |
50 | 50 |
@@ -53,7 +53,7 @@ | ||
53 | 53 | static final int NORMAL = 0, BITTER = 1, SELFFEEDER = 2, LEMONPOP = 3, HOT = 4, VIYUGRA = 5; |
54 | 54 | static final int INDIVIDUAL = 0, ALL = 1; |
55 | 55 | static final int SET = 0, DEL = 1; |
56 | - static int selectedTool = 0, selectedFood = 0, selectedCleaner = 0, selectedBarrier = 0, selectedBeltconveyor = 0, selectedBreedingPool = 0, selectedGameSpeed = 1; | |
56 | + static int selectedTool = 0, selectedFood = 0, selectedCleaner = 0, selectedBarrier = 0, selectedBeltconveyor = 0, selectedBreedingPool = 0, selectedOrangePool = 0, selectedGameSpeed = 1; | |
57 | 57 | JLabel title; |
58 | 58 | JPanel rootPane = new JPanel(); |
59 | 59 | JPanel buttonPane = new JPanel(); |
@@ -173,7 +173,7 @@ | ||
173 | 173 | if(language == Body.Language.ENGLISH) { |
174 | 174 | title.setText("SimYukkuri " + VERSION + " "); |
175 | 175 | final int selectedIndex = s1.getSelectedIndex(); |
176 | - s1.setModel(new DefaultComboBoxModel(new String[]{"Tool", "Food", "Clean", "Accessory", "Pick up", "Pants", "Toilet", "Barrier", "Toys", "Belt conveyor", "Breeding pool", "Garbage chute", "Machine press", "Food maker","Orange pool"})); | |
176 | + s1.setModel(new DefaultComboBoxModel(new String[]{"Tool", "Food", "Clean", "Accessory", "Pick up", "Pants", "Toilet", "Barrier", "Toys", "Belt conveyor", "Breeding pool", "Garbage chute", "Machine press", "Food maker","Orange pool", "Product chute"})); | |
177 | 177 | if(selectedIndex > -1) |
178 | 178 | s1.setSelectedIndex(selectedIndex); |
179 | 179 | s3.setModel(new DefaultComboBoxModel(new String[]{"Pause", "Speed: x1", "Speed: x5", "Speed: x10", "Speed: MAX"})); |
@@ -199,7 +199,7 @@ | ||
199 | 199 | title.setText("しむゆっくり " + VERSION + " "); |
200 | 200 | final int selectedIndex = s1.getSelectedIndex(); |
201 | 201 | |
202 | - s1.setModel(new DefaultComboBoxModel(new String[]{"道具", "えさ", "清掃", "おかざり", "持ち上げる", "おくるみ", "トイレ", "壁", "おもちゃ", "ベルトコンベア", "養殖プール", "ダストシュート", "プレス機", "フードメーカー", "オレンジプール"})); | |
202 | + s1.setModel(new DefaultComboBoxModel(new String[]{"道具", "えさ", "清掃", "おかざり", "持ち上げる", "おくるみ", "トイレ", "壁", "おもちゃ", "ベルトコンベア", "養殖プール", "ダストシュート", "プレス機", "フードメーカー", "オレンジプール", "製品投入口"})); | |
203 | 203 | |
204 | 204 | if(selectedIndex > -1) |
205 | 205 | s1.setSelectedIndex(selectedIndex); |
@@ -246,9 +246,14 @@ | ||
246 | 246 | break; |
247 | 247 | |
248 | 248 | case BELTCONVEYOR: |
249 | - s2.setModel(new DefaultComboBoxModel(new String[]{" Low-priced", "High density", "Rapid growth", "High-grade"})); | |
249 | + s2.setModel(new DefaultComboBoxModel(new String[]{" Low-priced", "High-density", "Rapid-growth", "High-grade"})); | |
250 | 250 | s2.setSelectedIndex(selectedBreedingPool); |
251 | 251 | break; |
252 | + | |
253 | + case ORANGEPOOL: | |
254 | + s2.setModel(new DefaultComboBoxModel(new String[]{"For drink", "For rescue use"})); | |
255 | + s2.setSelectedIndex(selectedBreedingPool); | |
256 | + break; | |
252 | 257 | |
253 | 258 | default: |
254 | 259 | s2.setModel(new DefaultComboBoxModel(new String[]{" "})); |
@@ -284,6 +289,11 @@ | ||
284 | 289 | s2.setModel(new DefaultComboBoxModel(new String[]{"廉価品", "こくまろ", "高速成長薬添加", "プロ用"})); |
285 | 290 | s2.setSelectedIndex(selectedBreedingPool); |
286 | 291 | break; |
292 | + | |
293 | + case ORANGEPOOL: | |
294 | + s2.setModel(new DefaultComboBoxModel(new String[]{"清涼飲料水", "救命用"})); | |
295 | + s2.setSelectedIndex(selectedOrangePool); | |
296 | + break; | |
287 | 297 | |
288 | 298 | default: |
289 | 299 | s2.setModel(new DefaultComboBoxModel(new String[]{" "})); |
@@ -401,7 +411,7 @@ | ||
401 | 411 | myPane.showLog = !myPane.showLog; |
402 | 412 | } |
403 | 413 | else if(source.equals(nextPageLogButton)) { |
404 | - if ( myPane.showPage > 2 ){ | |
414 | + if ( myPane.showPage >= 4 ){ | |
405 | 415 | myPane.showPage = 0; |
406 | 416 | }else{ |
407 | 417 | myPane.showPage++; |
@@ -709,6 +719,7 @@ | ||
709 | 719 | break; |
710 | 720 | } |
711 | 721 | mypane.terrarium.addFood(x, y, foodType); |
722 | + Cash.addCash( -mypane.terrarium.foodList.get(mypane.terrarium.foodList.size()-1).getValue() ); | |
712 | 723 | } |
713 | 724 | } |
714 | 725 | break; |
@@ -842,11 +853,40 @@ | ||
842 | 853 | int x = Translate.invX(X, Y, Terrarium.MAX_X, Terrarium.MAX_Y); |
843 | 854 | int y = Translate.invY(X, Y, Terrarium.MAX_X, Terrarium.MAX_Y); |
844 | 855 | if (x >= 0 && x <= Terrarium.MAX_X && y >= 0 && y <= Terrarium.MAX_Y) { |
845 | - mypane.terrarium.addObjEX(ORANGEPOOL, x, y, ObjEX.Direction.BACK); | |
856 | + ObjEX.Direction dir; | |
857 | + switch (s2.getSelectedIndex()) { | |
858 | + case BACK: | |
859 | + default: | |
860 | + dir = ObjEX.Direction.BACK; | |
861 | + break; | |
862 | + case THISSIDE: | |
863 | + dir = ObjEX.Direction.THISSIDE; | |
864 | + break; | |
865 | + case RIGHT: | |
866 | + dir = ObjEX.Direction.BACK; | |
867 | + break; | |
868 | + case LEFT: | |
869 | + dir = ObjEX.Direction.BACK; | |
870 | + break; | |
871 | + } | |
872 | + mypane.terrarium.addObjEX(ORANGEPOOL, x, y, dir); | |
846 | 873 | } |
847 | 874 | } |
848 | 875 | break; |
849 | 876 | |
877 | + case PRODUCTCHUTE: { | |
878 | + int offsetX = (Body.MAXSIZE - GarbageChute.getSizeS())/2; | |
879 | + int offsetY = (Body.MAXSIZE - GarbageChute.getSizeS()/2); | |
880 | + int X = (e.getX() - offsetX)*Terrarium.MAX_X/(w-Body.MAXSIZE); | |
881 | + int Y = (e.getY() - offsetY)*Terrarium.MAX_Y/(h-Body.MAXSIZE); | |
882 | + int x = Translate.invX(X, Y, Terrarium.MAX_X, Terrarium.MAX_Y); | |
883 | + int y = Translate.invY(X, Y, Terrarium.MAX_X, Terrarium.MAX_Y); | |
884 | + if (x >= 0 && x <= Terrarium.MAX_X && y >= 0 && y <= Terrarium.MAX_Y) { | |
885 | + mypane.terrarium.addObjEX(PRODUCTCHUTE, x, y, ObjEX.Direction.BACK); | |
886 | + } | |
887 | + } | |
888 | + break; | |
889 | + | |
850 | 890 | default://Other tool |
851 | 891 | break; |
852 | 892 | } |
@@ -1117,6 +1157,7 @@ | ||
1117 | 1157 | GarbageChute.loadImages(loader); |
1118 | 1158 | FoodMaker.loadImages(loader); |
1119 | 1159 | OrangePool.loadImages(loader); |
1160 | + ProductChute.loadImages(loader); | |
1120 | 1161 | |
1121 | 1162 | MachinePress.loadImages(loader); |
1122 | 1163 |
@@ -1272,6 +1313,7 @@ | ||
1272 | 1313 | for (Body b: bodies) { |
1273 | 1314 | synchronized(SimYukkuri.lock) { |
1274 | 1315 | terrarium.addBody(b); |
1316 | + Cash.addCash( -b.getValue() ); | |
1275 | 1317 | } |
1276 | 1318 | } |
1277 | 1319 | } |
@@ -1407,9 +1449,9 @@ | ||
1407 | 1449 | img = b.getImage(Body.SLEEPING,direction); |
1408 | 1450 | } |
1409 | 1451 | else if (b.isPeroPero() || b.isEating()) { |
1410 | - if (b.isStrike() || b.isVerySad()) | |
1452 | + if (b.isStrike() || b.isVerySad() || b.isFeelHardPain() ) | |
1411 | 1453 | img = b.getImage(Body.CRYING,direction); |
1412 | - else if (b.isSad() || b.isEatingShit()) | |
1454 | + else if (b.isSad() || b.isEatingShit() || b.isFeelPain() ) | |
1413 | 1455 | img = b.getImage(Body.TIRED, direction); |
1414 | 1456 | else |
1415 | 1457 | img = b.getImage(Body.SMILE, direction); |
@@ -1417,8 +1459,8 @@ | ||
1417 | 1459 | else if (b.isSukkiri()) { |
1418 | 1460 | img = b.getImage(Body.REFRESHED,direction); |
1419 | 1461 | } |
1420 | - else if (b.isDamaged() || b.isSick()) { | |
1421 | - if (b.isStrike() || b.isVerySad()) | |
1462 | + else if (b.isDamaged() || b.isSick() || b.isFeelPain() ) { | |
1463 | + if (b.isStrike() || b.isVerySad() || b.isFeelHardPain() ) | |
1422 | 1464 | img = b.getImage(Body.CRYING,direction); |
1423 | 1465 | else |
1424 | 1466 | img = b.getImage(Body.TIRED,direction); |
@@ -1562,6 +1604,7 @@ | ||
1562 | 1604 | int[] numOfObjNowLog = Logger.getNumOfObjNowLog(); |
1563 | 1605 | int numOfMaxYukkuri = 0; |
1564 | 1606 | int numOfMaxUnun = 0; |
1607 | + int numOfMaxCash = 0; | |
1565 | 1608 | int numOfSumYukkuri = 0; |
1566 | 1609 | int[] logDataTmp; |
1567 | 1610 | int operationTime = Terrarium.operationTime / 10; |
@@ -1580,6 +1623,10 @@ | ||
1580 | 1623 | if ( numOfMaxUnun < logDataTmp[Logger.NUM_OF_SHIT] ){ |
1581 | 1624 | numOfMaxUnun = logDataTmp[Logger.NUM_OF_SHIT]; |
1582 | 1625 | } |
1626 | + | |
1627 | + if ( numOfMaxCash < logDataTmp[Logger.NUM_OF_CASH] ){ | |
1628 | + numOfMaxCash = logDataTmp[Logger.NUM_OF_CASH]; | |
1629 | + } | |
1583 | 1630 | for( int j = 0 ; j < Logger.NUM_OF_LOGDATA_TYPE ; j++ ){ |
1584 | 1631 | logData[ Logger.NUM_OF_LOGDATA_TYPE * i + j ] = logDataTmp[j]; |
1585 | 1632 | } |
@@ -1762,6 +1809,38 @@ | ||
1762 | 1809 | g.drawString( "0", GRAPH_OFFSETX - 12 , GRAPH_OFFSETY + GRAPH_HEIGHT ); |
1763 | 1810 | |
1764 | 1811 | break; |
1812 | + case 4: | |
1813 | + g.drawString( "収入・支出", 100, 100 ); | |
1814 | + g.setFont( textFonttext ); | |
1815 | + for ( int i = 0 ; i < 1 ; i++ ){ | |
1816 | + g.setColor( Color.WHITE ); | |
1817 | + g.drawString( Integer.toString( numOfObjNowLog[ i + Logger.NUM_OF_CASH ] ), LEGEND_OFFSETX + 130, 30 * i + 140); | |
1818 | + | |
1819 | + 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); | |
1820 | + g.drawString( "所持金", LEGEND_OFFSETX, 30 * i + 140); | |
1821 | + g.drawString( "収益(¥/分)", LEGEND_OFFSETX, 30 * (i+1) + 140); | |
1822 | + g.setColor( Color.YELLOW ); | |
1823 | + if ( i == 0 ){ | |
1824 | + for( int k = 0 ; k < NUM_OF_GRAPH_DATA ; k++ ){ | |
1825 | + if ( logData[ Logger.NUM_OF_LOGDATA_TYPE * k + i + Logger.NUM_OF_CASH ] > 0 ){ | |
1826 | + yp[k] -= logData[ Logger.NUM_OF_LOGDATA_TYPE * k + i + Logger.NUM_OF_CASH ] * GRAPH_HEIGHT / numOfMaxCash; | |
1827 | + } else if ( logData[ Logger.NUM_OF_LOGDATA_TYPE * k + i + Logger.NUM_OF_CASH ] == 0 ) { | |
1828 | + yp[k] -= logData[ Logger.NUM_OF_LOGDATA_TYPE * k + i + Logger.NUM_OF_CASH ] * GRAPH_HEIGHT / 1; | |
1829 | + } | |
1830 | + } | |
1831 | + g.fillPolygon( xp , yp, NUM_OF_GRAPH_DATA * 2); | |
1832 | + } | |
1833 | + | |
1834 | + for( int k = 0 ; k < NUM_OF_GRAPH_DATA ; k++ ){ | |
1835 | + yp[ NUM_OF_GRAPH_DATA * 2 - k - 1 ] = yp[ k ]; | |
1836 | + } | |
1837 | + g.setColor( Color.WHITE ); | |
1838 | + g.drawRect( GRAPH_OFFSETX , GRAPH_OFFSETY, GRAPH_WIDTH, GRAPH_HEIGHT); | |
1839 | + g.drawString( Integer.toString( numOfMaxCash ), GRAPH_OFFSETX - String.valueOf(numOfMaxCash).length() * 10 - 2 , GRAPH_OFFSETY ); | |
1840 | + g.drawString( Integer.toString( numOfMaxCash / 2 ), GRAPH_OFFSETX - String.valueOf(numOfMaxCash).length() * 10 - 2 , GRAPH_OFFSETY + GRAPH_HEIGHT / 2 ); | |
1841 | + g.drawString( "0", GRAPH_OFFSETX - 12 , GRAPH_OFFSETY + GRAPH_HEIGHT ); | |
1842 | + } | |
1843 | + break; | |
1765 | 1844 | default: |
1766 | 1845 | break; |
1767 | 1846 | } |
@@ -0,0 +1,14 @@ | ||
1 | +import java.util.ArrayList; | |
2 | +import java.util.List; | |
3 | + | |
4 | +public class Cash { | |
5 | + | |
6 | + public static int cash = 5000; | |
7 | + | |
8 | + public static void addCash( int addcash ){ | |
9 | + cash += addcash; | |
10 | + } | |
11 | + | |
12 | + | |
13 | + | |
14 | +} | |
\ No newline at end of file |
@@ -14,7 +14,8 @@ | ||
14 | 14 | public static final int NUM_OF_ADULT = 8; |
15 | 15 | public static final int NUM_OF_SICK = 9; |
16 | 16 | public static final int NUM_OF_SHIT = 10; |
17 | - public static final int NUM_OF_LOGDATA_TYPE = 11; | |
17 | + public static final int NUM_OF_CASH = 11; | |
18 | + public static final int NUM_OF_LOGDATA_TYPE = 12; | |
18 | 19 | |
19 | 20 | private static int[] prevLogData = new int[NUM_OF_LOGDATA_TYPE]; |
20 | 21 | private static int[] logDataSum = new int[NUM_OF_LOGDATA_TYPE]; |
@@ -77,6 +78,8 @@ | ||
77 | 78 | logData[NUM_OF_SHIT]++; |
78 | 79 | } |
79 | 80 | |
81 | + logData[NUM_OF_CASH] = Cash.cash; | |
82 | + | |
80 | 83 | for ( int i = 0 ; i < NUM_OF_LOGDATA_TYPE ; i++ ) { |
81 | 84 | logList.add( logData[i] ); |
82 | 85 | logDataSum[i] += logData[i] - prevLogData[i]; |
@@ -10,7 +10,7 @@ | ||
10 | 10 | |
11 | 11 | public static List<ObjEX> objEXList = new ArrayList<ObjEX>(); |
12 | 12 | |
13 | - public static final int type = 0; | |
13 | + public int type = 0; | |
14 | 14 | public static final int hitCheckObjType = 3; |
15 | 15 | public static final int size = 256; |
16 | 16 | private static final int images_num = 8; //このクラスの総使用画像数 |
@@ -18,7 +18,8 @@ | ||
18 | 18 | private static int AnimeImagesNum[] = {8};//アニメごとに何枚使うか |
19 | 19 | private static Image[] images = new Image[images_num]; |
20 | 20 | |
21 | - private int running; | |
21 | + private static final int value = 30000; | |
22 | + private static final int cost = 100; | |
22 | 23 | |
23 | 24 | public static void loadImages (ClassLoader loader) throws IOException { |
24 | 25 | final String path = "images/machinepress/"; |
@@ -67,6 +68,23 @@ | ||
67 | 68 | } |
68 | 69 | |
69 | 70 | @Override |
71 | + public void upDate() { | |
72 | + if ( age % 150 == 0 ){ | |
73 | + Cash.addCash(-getCost()/4); | |
74 | + } | |
75 | + } | |
76 | + | |
77 | + @Override | |
78 | + public int getValue() { | |
79 | + return value; | |
80 | + } | |
81 | + | |
82 | + @Override | |
83 | + public int getCost() { | |
84 | + return cost; | |
85 | + } | |
86 | + | |
87 | + @Override | |
70 | 88 | public void removeListData(){ |
71 | 89 | objEXList.remove(this); |
72 | 90 | } |
@@ -12,7 +12,7 @@ | ||
12 | 12 | |
13 | 13 | public static List<ObjEX> objEXList = new ArrayList<ObjEX>(); |
14 | 14 | |
15 | - public static final int type = 0; | |
15 | + public int type = 0; | |
16 | 16 | public static final int hitCheckObjType = 31; |
17 | 17 | public static final int size = 128; |
18 | 18 | private static final int images_num = 1; //このクラスの総使用画像数 |
@@ -20,6 +20,8 @@ | ||
20 | 20 | private static int AnimeImagesNum[] = {1};//アニメごとに何枚使うか |
21 | 21 | private static Image[] images = new Image[images_num]; |
22 | 22 | protected Random rnd = new Random(); |
23 | + private static int value = 5000; | |
24 | + private static int cost = 5; | |
23 | 25 | |
24 | 26 | public static void loadImages (ClassLoader loader) throws IOException { |
25 | 27 | final String path = "images/"; |
@@ -66,8 +68,19 @@ | ||
66 | 68 | @Override |
67 | 69 | public int objHitProcess( Obj o ) { |
68 | 70 | o.remove(); |
71 | + Cash.addCash(-getCost()); | |
69 | 72 | return 0; |
70 | 73 | } |
74 | + | |
75 | + @Override | |
76 | + public int getValue() { | |
77 | + return value; | |
78 | + } | |
79 | + | |
80 | + @Override | |
81 | + public int getCost() { | |
82 | + return cost; | |
83 | + } | |
71 | 84 | |
72 | 85 | @Override |
73 | 86 | public void removeListData(){ |
@@ -37,6 +37,9 @@ | ||
37 | 37 | private int amount; |
38 | 38 | |
39 | 39 | private static final int foodSize = 64; |
40 | + | |
41 | + private static final int value[] = {-100,250,250,10000,400,400,650,-100}; | |
42 | + | |
40 | 43 | private static Image[] images = new Image[NUM_OF_FOOD_STATE]; |
41 | 44 | |
42 | 45 | public static void loadImages (ClassLoader loader) throws IOException { |
@@ -88,6 +91,10 @@ | ||
88 | 91 | return foodSize; |
89 | 92 | } |
90 | 93 | |
94 | + public int getValue() { | |
95 | + return value[foodType.ordinal()]; | |
96 | + } | |
97 | + | |
91 | 98 | public Food(int initX, int initY, type initType) { |
92 | 99 | objType = Type.FOOD; |
93 | 100 | x = initX; |
@@ -73,7 +73,8 @@ | ||
73 | 73 | |
74 | 74 | // private variables |
75 | 75 | protected enum Hunger { NONE, VERY }; |
76 | - protected enum Damage { NONE, VERY } | |
76 | + protected enum Damage { NONE, VERY }; | |
77 | + protected enum Pain { NONE, SOME, VERY }; | |
77 | 78 | protected enum Happiness { VERY_HAPPY, HAPPY, AVERAGE, SAD, VERY_SAD }; |
78 | 79 | protected enum Attitude { VERY_NICE, NICE, AVERAGE, SHITHEAD, SUPER_SHITHEAD }; |
79 | 80 |
@@ -202,6 +203,9 @@ | ||
202 | 203 | protected int blockedCount = 0; |
203 | 204 | |
204 | 205 | protected Random rnd = new Random(); |
206 | + | |
207 | + protected int value[] = {10,100,300}; | |
208 | + protected int cantDiePeriod = 0; | |
205 | 209 | |
206 | 210 | // private methods |
207 | 211 | private AgeState checkAgeState() |
@@ -229,7 +233,7 @@ | ||
229 | 233 | private Damage checkDamageState() |
230 | 234 | { |
231 | 235 | if (damage > DAMAGELIMIT[ageState.ordinal()]) { |
232 | - dead = true; | |
236 | + toDead(); | |
233 | 237 | return Damage.VERY; |
234 | 238 | } |
235 | 239 | if (damage >= DAMAGELIMIT[ageState.ordinal()]/2) { |
@@ -237,6 +241,17 @@ | ||
237 | 241 | } |
238 | 242 | return Damage.NONE; |
239 | 243 | } |
244 | + | |
245 | + private Pain checkPainState() | |
246 | + { | |
247 | + if ( hasNearMaxNumBabies() ){ | |
248 | + return Pain.VERY; | |
249 | + } | |
250 | + if ( hasManyBabies() ){ | |
251 | + return Pain.SOME; | |
252 | + } | |
253 | + return Pain.NONE; | |
254 | + } | |
240 | 255 | |
241 | 256 | private void checkHungry() { |
242 | 257 | if (exciting || hasBaby) { |
@@ -282,10 +297,10 @@ | ||
282 | 297 | private boolean checkShit() { |
283 | 298 | boolean cantMove = false; |
284 | 299 | if (checkHungryState() == Hunger.NONE) { |
285 | - shit += TICK*2 + (shitBoost / 2); | |
300 | + shit += TICK*2 + ( shitBoost/3*2 ); | |
286 | 301 | } |
287 | 302 | else { |
288 | - shit += TICK + (shitBoost / 2); | |
303 | + shit += TICK + ( shitBoost/3*2 ); | |
289 | 304 | } |
290 | 305 | if (shit > SHITLIMIT[ageState.ordinal()] - TICK*SHITSTAY) { |
291 | 306 | if (hasPants) { |
@@ -326,7 +341,7 @@ | ||
326 | 341 | private boolean checkChildbirth() { |
327 | 342 | boolean cantMove = false; |
328 | 343 | if (hasBaby || !hasBaby && birth) { |
329 | - pregnantPeriod += TICK + (pregnantPeriodBoost * 4); | |
344 | + pregnantPeriod += TICK + (pregnantPeriodBoost / 2); | |
330 | 345 | if (pregnantPeriod > PREGPERIOD - TICK*100) { |
331 | 346 | if (!birth) { |
332 | 347 | showBreed(); |
@@ -376,6 +391,12 @@ | ||
376 | 391 | } |
377 | 392 | return sleeping; |
378 | 393 | } |
394 | + | |
395 | + private void checkCantDie() { | |
396 | + if ( cantDiePeriod > 0 ){ | |
397 | + cantDiePeriod -= TICK; | |
398 | + } | |
399 | + } | |
379 | 400 | |
380 | 401 | private void checkDiscipline() { |
381 | 402 | int period = (isRude() ? 1 : 2) * DECLINEPERIOD; |
@@ -425,7 +446,7 @@ | ||
425 | 446 | } |
426 | 447 | if (noHungryPeriod > RELAXPERIOD && noDamagePeriod > RELAXPERIOD |
427 | 448 | && !sleeping && !shitting && !eating |
428 | - && !isSad() && !isVerySad() && !isSick()) { | |
449 | + && !isSad() && !isVerySad() && !isSick()&&!isFeelPain()) { | |
429 | 450 | if (!exciting && !relax) { |
430 | 451 | int r = 1; |
431 | 452 | int adjust = excitingDiscipline*(isRude() ? 1 : 2); |
@@ -646,7 +667,7 @@ | ||
646 | 667 | |
647 | 668 | // moving |
648 | 669 | int step = STEP[ageState.ordinal()]; |
649 | - if (hasBaby || hungryState == Hunger.VERY || damageState == Damage.VERY || isSick()) { | |
670 | + if (hasBaby || hungryState == Hunger.VERY || damageState == Damage.VERY || isSick() || isFeelPain()) { | |
650 | 671 | step /= 2; |
651 | 672 | if (step == 0) { |
652 | 673 | step = 1; |
@@ -1526,7 +1547,7 @@ | ||
1526 | 1547 | } |
1527 | 1548 | |
1528 | 1549 | public int getSize() { |
1529 | - return diameter[ageState.ordinal()] + (20 - 20/(getBabyTypes().size() + 1 )) + getBabyTypes().size(); | |
1550 | + return diameter[ageState.ordinal()] + (20 - 20/(getBabyTypes().size() + 1 )) + getBabyTypes().size() *2; | |
1530 | 1551 | } |
1531 | 1552 | |
1532 | 1553 | public int getOriginSize() { |
@@ -1557,6 +1578,10 @@ | ||
1557 | 1578 | return treasure; |
1558 | 1579 | } |
1559 | 1580 | |
1581 | + public int getMaxHaveBaby() { | |
1582 | + return getDamageLimit()/300; | |
1583 | + } | |
1584 | + | |
1560 | 1585 | public static void loadShadowImages (ClassLoader loader) throws IOException { |
1561 | 1586 | final String path = "images/"; |
1562 | 1587 |
@@ -1687,6 +1712,14 @@ | ||
1687 | 1712 | return (checkDamageState() == Damage.VERY); |
1688 | 1713 | } |
1689 | 1714 | |
1715 | + public boolean isFeelPain() { | |
1716 | + return (checkPainState() == Pain.VERY || checkPainState() == Pain.SOME); | |
1717 | + } | |
1718 | + | |
1719 | + public boolean isFeelHardPain() { | |
1720 | + return (checkPainState() == Pain.VERY || checkPainState() == Pain.VERY); | |
1721 | + } | |
1722 | + | |
1690 | 1723 | public boolean isBirth() { |
1691 | 1724 | return (!dead && birth); |
1692 | 1725 | } |
@@ -1776,6 +1809,10 @@ | ||
1776 | 1809 | return (treasure == t); |
1777 | 1810 | } |
1778 | 1811 | |
1812 | + public boolean isCantDie() { | |
1813 | + return (cantDiePeriod > 0); | |
1814 | + } | |
1815 | + | |
1779 | 1816 | public boolean hasAccessory() { |
1780 | 1817 | return hasAccessory; |
1781 | 1818 | } |
@@ -1784,6 +1821,14 @@ | ||
1784 | 1821 | return hasPants; |
1785 | 1822 | } |
1786 | 1823 | |
1824 | + public boolean hasManyBabies() { | |
1825 | + return (getBabyTypes().size() > getMaxHaveBaby()/2 ); | |
1826 | + } | |
1827 | + | |
1828 | + public boolean hasNearMaxNumBabies() { | |
1829 | + return (getBabyTypes().size() > getMaxHaveBaby()/5*4 ); | |
1830 | + } | |
1831 | + | |
1787 | 1832 | public boolean wantToShit() { |
1788 | 1833 | int step = (checkHungryState() == Hunger.NONE ? TICK*2 : TICK); |
1789 | 1834 | int adjust = 100*(isRude() ? 1 : 2)*shittingDiscipline; |
@@ -2102,7 +2147,17 @@ | ||
2102 | 2147 | } |
2103 | 2148 | } |
2104 | 2149 | /*---------------------------------------------------------------------------------------*/ |
2105 | - | |
2150 | + public void bodyBurst() { | |
2151 | + if (crashed == false) { | |
2152 | + strike(HAMMER*20); | |
2153 | + toDead(); | |
2154 | + } | |
2155 | + if (dead) { | |
2156 | + showDieing(); | |
2157 | + crashed = true; | |
2158 | + } | |
2159 | + } | |
2160 | + | |
2106 | 2161 | public void kick() { |
2107 | 2162 | int blowLevel[] = {-4, -3, -2}; |
2108 | 2163 | kick(0, blowLevel[ageState.ordinal()]*2, blowLevel[ageState.ordinal()]); |
@@ -2237,7 +2292,29 @@ | ||
2237 | 2292 | shitBoost += TICK; |
2238 | 2293 | } |
2239 | 2294 | |
2295 | + @Override | |
2296 | + public int getValue() { | |
2297 | + return value[ageState.ordinal()]; | |
2298 | + } | |
2240 | 2299 | |
2300 | + public void setCantDie() { | |
2301 | + cantDiePeriod = 3; | |
2302 | + } | |
2303 | + | |
2304 | + public void toDead(){ | |
2305 | + if ( !isCantDie() ) { | |
2306 | + dead = true; | |
2307 | + } | |
2308 | + } | |
2309 | + | |
2310 | + public void revival(){ | |
2311 | + if ( dead == true ) { | |
2312 | + dead = false; | |
2313 | + crashed = false; | |
2314 | + giveJuice(); | |
2315 | + } | |
2316 | + } | |
2317 | + | |
2241 | 2318 | // calling every tick |
2242 | 2319 | @Override |
2243 | 2320 | public Obj.Event clockTick() { |
@@ -2248,7 +2325,7 @@ | ||
2248 | 2325 | |
2249 | 2326 | // if partner and parents are removed, clean relationship. |
2250 | 2327 | clearRelation(); |
2251 | - | |
2328 | + | |
2252 | 2329 | // if dead, do nothing. |
2253 | 2330 | if (dead) { |
2254 | 2331 | moveBody(true); // for falling the body |
@@ -2261,10 +2338,12 @@ | ||
2261 | 2338 | // check age |
2262 | 2339 | age += TICK; |
2263 | 2340 | if (age > LIFELIMIT) { |
2264 | - dead = true; | |
2341 | + toDead(); | |
2265 | 2342 | moveBody(true); // for falling the body |
2266 | 2343 | checkMessage(); |
2267 | - return Obj.Event.DEAD; | |
2344 | + if (dead){ | |
2345 | + return Obj.Event.DEAD; | |
2346 | + } | |
2268 | 2347 | } |
2269 | 2348 | ageState = checkAgeState(); |
2270 | 2349 |
@@ -2272,6 +2351,7 @@ | ||
2272 | 2351 | checkHungry(); |
2273 | 2352 | checkDamage(); |
2274 | 2353 | checkSick(); |
2354 | + checkCantDie(); | |
2275 | 2355 | |
2276 | 2356 | // check events |
2277 | 2357 | boolean dontMove = false; |
@@ -2297,6 +2377,16 @@ | ||
2297 | 2377 | retval = Obj.Event.BIRTHBABY; |
2298 | 2378 | } |
2299 | 2379 | } |
2380 | + | |
2381 | + if ( getBabyTypes().size() > getMaxHaveBaby() ){ | |
2382 | + toDead(); | |
2383 | + moveBody(true); // for falling the body | |
2384 | + checkMessage(); | |
2385 | + if (dead){ | |
2386 | + bodyBurst(); | |
2387 | + return Obj.Event.DEAD; | |
2388 | + } | |
2389 | + } | |
2300 | 2390 | |
2301 | 2391 | // check sleep |
2302 | 2392 | if (checkSleep()) { |
@@ -2380,6 +2470,9 @@ | ||
2380 | 2470 | if (mama.isSick()) { |
2381 | 2471 | setSick(); |
2382 | 2472 | } |
2473 | + if (mama.isDead()) { | |
2474 | + damage+=DAMAGELIMIT[ageState.BABY.ordinal()]/4*3+rnd.nextInt(DAMAGELIMIT[ageState.BABY.ordinal()]); | |
2475 | + } | |
2383 | 2476 | showBirth(); |
2384 | 2477 | } |
2385 | 2478 | } |