OSDN Git Service

add to declare place event.
[yukkurioverwint/YukkuriOverwinter.git] / ctrl.js
1 var Ctrl = enchant.Class.create({
2         initialize: function (){
3                 this.game = null;
4                 this.menuBg = null;
5                 this.currentCommand = ECommand.WORLD_CURSOR;
6                 this.backgroundMap = null;
7                 this.player = null;
8                 this.objArray = {};
9                 this.def = null;
10         },
11         init : function (game){
12                 this.game = game;
13         },
14         setDefined:function(def){
15                 this.def = def;
16         },
17         addObj: function(obj){
18                 this.objArray[obj.id] = obj;
19         },
20         getObjs: function(){
21                 return this.objArray;
22         },
23         removeObj:function(obj){
24                 delete this.objArray[obj.id];
25         },
26         setMenuBg: function (menuBg){
27                 console.log("setMenuBg");
28                 this.menuBg = menuBg;
29         },
30         setBackgroundMap: function(backgroundMap){
31                 this.backgroundMap = backgroundMap;
32         },
33         setPlayer: function(player){
34                 this.player = player;
35         },
36         /**
37          * [setCurrentCommand description]
38          * @param {ECommand} cmd [description]
39          */
40         setCurrentCommand: function(cmd){
41                 this.currentCommand = cmd;
42         },
43         getCurrentCommand: function(){
44                 return this.currentCommand;
45         }
46 });
47 var CommandIcon = enchant.Class.create(enchant.Sprite,{
48         initialize: function (x, y, ecmd, index){
49                 enchant.Sprite.call(this, x, y);
50                 this.ecmd = ecmd;
51                 this.index = index;
52         },
53         isCurrent: function(){
54                 return (this.index * 2)%2 !== 0;
55         },
56         setCurrent: function(){
57                 this.frame = (this.index * 2) + 1;
58         },
59         removeCurrent: function(){
60                 this.frame = (this.index * 2);
61         }
62 });
63 var MangIcon = enchant.Class.create({
64         initialize: function (ctl, menuBg){
65                 var self = this;
66                 this.ctl = ctl;
67                 this.cmdIcons = [];
68                 var index = 0;
69                 for (var key in ECommand) {
70                         var value = ECommand[key];
71                         this.cmdIcons[value] = new CommandIcon(40, 40, value, index);
72                         this.cmdIcons[value].image = this.ctl.game.assets[EResPath.COMMAND];
73                         this.cmdIcons[value].x = 40 * index;
74                         this.cmdIcons[value].y = 4;
75
76                         // odd equals current. even equals not current.
77                         this.cmdIcons[value].frame = (this.ctl.getCurrentCommand() == value)? index * 2 + 1: index * 2;
78                         menuBg.addChild(this.cmdIcons[value]);
79                         this.cmdIcons[value].ontouchstart = function(obj){
80                                 // change command icons
81                                 var nowECmd = self.ctl.getCurrentCommand();
82                                 self.cmdIcons[nowECmd].removeCurrent();
83                                 if(!this.isCurrent()){
84                                         this.setCurrent();
85                                 }
86                                 self.ctl.setCurrentCommand(this.index);
87                         };
88                         index++;
89                 }
90         },
91         get: function(commandIndex){
92                 return this.cmdIcons[commandIndex];
93         }
94 });
95 var ATouchEvent = enchant.Class.create({
96         // initialize: function (ctl){
97         //      this.ctl = ctl;
98         // },
99         touchstart: function(e){
100         },
101         touchmove: function(e){
102         },
103         touchend: function(e){
104         }
105 });
106
107 var WorldCursorTouchEvent = enchant.Class.create(ATouchEvent,{
108         initialize: function (ctl){
109                 this.ctl = ctl;
110                 this.touchX = 0;
111                 this.touchY = 0;
112         },
113         touchstart : function(e){
114                 this.touchX = e.x - this.ctl.backgroundMap.x;
115                 this.touchY = e.y - this.ctl.backgroundMap.y;
116         },
117         touchmove : function(e){
118                 var backgroundMap = this.ctl.backgroundMap;
119                 var game = this.ctl.game;
120
121                 if(game.touched){
122                         backgroundMap.x = e.x - this.touchX;
123                         if(backgroundMap.x < -EFieldPos.WIDTH)backgroundMap.x = -EFieldPos.WIDTH;
124                         if(backgroundMap.x > 0)backgroundMap.x = 0;
125
126                         backgroundMap.y = e.y - this.touchY;
127                         if(backgroundMap.y < -EFieldPos.HEIGHT)backgroundMap.y = -EFieldPos.HEIGHT;
128                         if(backgroundMap.y > 0)backgroundMap.y = 0;
129                 }
130                 if(e.x > EFieldPos.WIDTH)game.touched = false;
131                 else if(e.x < 30)game.touched = false;
132         },
133         touchend : function(e){
134         }
135 });
136 var WorldTargetTouchEvent = enchant.Class.create(ATouchEvent,{
137         initialize: function (ctl){
138                 this.ctl = ctl;
139                 this.touchX = 0;
140                 this.touchY = 0;
141         },
142         touchstart :function(e){
143                 if(e.x >= 0 && e.x <= EFieldPos.WIDTH){
144                         var backgroundMap = this.ctl.backgroundMap;
145                         addEffect(this.ctl.backgroundMap, -backgroundMap.x + e.x, -backgroundMap.y + e.y);
146                         this.ctl.player.tweet("ゆっくりりかいしたよ!");
147                         var vx = (-backgroundMap.x + e.x) - this.ctl.player.getX() ;
148                         var vy = (-backgroundMap.y + e.y) - this.ctl.player.getY() ;
149
150                         // this.ctl.player.action.setStatus(EAction.MOVE_TO_COMMAND);
151                         // new MoveCommandEvent({
152                         //      "vx": vx,
153                         //      "vy": vy,
154                         //      "action": this.ctl.player.action,
155                         //      "myYukkuri": this.ctl.player
156                         // });
157
158                         // this.ctl.player.tweet("ゆー...いきたくないのぜ");
159                 }
160         }
161 });
162 var WorldAppleTouchEvent = enchant.Class.create(ATouchEvent,{
163         initialize: function (ctl){
164                 this.ctl = ctl;
165                 this.touchX = 0;
166                 this.touchY = 0;
167         },
168         touchstart :function(e){
169                 if(e.x >= 0 && e.x <= EFieldPos.WIDTH){
170                         var backgroundMap = this.ctl.backgroundMap;
171                         var tx = -backgroundMap.x + e.x;
172                         var ty = -backgroundMap.y + e.y;
173                         new ctl.def.Food("apple", tx, ty);
174                 }
175         }
176 });
177 var WorldPlaceTouchEvent = enchant.Class.create(ATouchEvent,{
178         initialize: function (ctl){
179                 this.ctl = ctl;
180                 this.touchX = 0;
181                 this.touchY = 0;
182         },
183         touchstart :function(e){
184                 if(e.x >= 0 && e.x <= EFieldPos.WIDTH){
185                         var backgroundMap = this.ctl.backgroundMap;
186                         var tx = -backgroundMap.x + e.x;
187                         var ty = -backgroundMap.y + e.y;
188                         new ctl.def.Place("tree", tx, ty);
189                 }
190         }
191 });
192
193
194 var MangTouch = enchant.Class.create({
195         initialize: function (ctl){
196                 this.ctl = ctl;
197                 var cursor = ECommand.WORLD_CURSOR;
198                 this.mang = {};
199                 this.mang[ECommand.WORLD_CURSOR] = new WorldCursorTouchEvent(ctl);
200                 this.mang[ECommand.WORLD_TARGET] = new WorldTargetTouchEvent(ctl);
201                 this.mang[ECommand.WORLD_APPLE] = new WorldAppleTouchEvent(ctl);
202                 this.mang[ECommand.WORLD_PLACE] = new WorldPlaceTouchEvent(ctl);
203         },
204         get: function(ecmd){
205                 return this.mang[ecmd];
206         }
207 });
208 var MangLabel = enchant.Class.create({
209         initialize: function (ctl, menuBg){
210                 this.ctl = ctl;
211                 var labelGroup = new LabelGroup();
212                 this.START_XPOS = 4;
213                 this.START_YPOS = GAME_HEIGHT / 2;
214                 this.GAUGE_XPOS = 80;
215                 this.menuBg = menuBg;
216                 this.widthArr = [];
217                 this.WIDTH_MARGIN = 4;
218                 this.GAUGE_HEIGHT = 16;
219                 var FONT = "18px 'Times New Roman'";
220                 var COLOR = "#ffffff";
221                 menuBg.image.context.font = FONT;
222                 var self = this;
223                 // this.labels = {};
224                 this.labelParams = {
225                         "yukkuri" : {
226                                 label: null,
227                                 init: function(){
228                                         var TEXT = M.LABEL_YUKKURI;
229                                         var label = new Label(TEXT);
230                                         label.color = COLOR;
231                                         label.font = FONT;
232                                         label.x = self.START_XPOS;
233                                         label.y = self.START_YPOS;
234                                         label.textWidth = menuBg.image.context.measureText(TEXT).width;
235                                         this.label = label;
236                                 },
237                                 draw: function(yukkuriObj){
238                                         //100/maxhp*hp
239                                         var gauge = 100 / yukkuriObj.param.maxYukkuri * yukkuriObj.param.yukkuri;
240                                         self.menuBg.image.context.fillStyle = "#ffffff";
241                                         self.menuBg.image.context.fillRect(self.GAUGE_XPOS, this.label.y, 100, self.GAUGE_HEIGHT);
242                                         self.menuBg.image.context.fillStyle = "#ff0000";
243                                         self.menuBg.image.context.fillRect(self.GAUGE_XPOS, this.label.y, gauge, self.GAUGE_HEIGHT);
244                                 }
245                         },
246                         "hungry" : {
247                                 label: null,
248                                 init: function(){
249                                         var TEXT = M.LABEL_HUNGRY;
250                                         var label = new Label(TEXT);
251                                         label.color = COLOR;
252                                         label.font = FONT;
253                                         label.x = self.START_XPOS;
254                                         label.y = self.START_YPOS + 20;
255                                         label.textWidth = menuBg.image.context.measureText(TEXT).width;
256                                         this.label = label;
257                                 },
258                                 draw: function(yukkuriObj){
259                                         var gauge =yukkuriObj.param.hungry;
260                                         self.menuBg.image.context.fillStyle = "#ffffff";
261                                         self.menuBg.image.context.fillRect(self.GAUGE_XPOS, this.label.y, 100, self.GAUGE_HEIGHT);
262                                         self.menuBg.image.context.fillStyle = "#bb7777";
263                                         self.menuBg.image.context.fillRect(self.GAUGE_XPOS, this.label.y, gauge, self.GAUGE_HEIGHT);
264                                 }
265                         },
266                         "unun" : {
267                                 label: null,
268                                 init: function(){
269                                         var TEXT = M.LABEL_UNUN;
270                                         var label = new Label(TEXT);
271                                         label.color = COLOR;
272                                         label.font = FONT;
273                                         label.x = self.START_XPOS;
274                                         label.y = self.START_YPOS + 40;
275                                         label.textWidth = menuBg.image.context.measureText(TEXT).width;
276                                         this.label = label;
277                                 },
278                                 draw: function(yukkuriObj){
279                                         var gauge =yukkuriObj.param.unun;
280                                         self.menuBg.image.context.fillStyle = "#ffffff";
281                                         self.menuBg.image.context.fillRect(self.GAUGE_XPOS, this.label.y, 100, self.GAUGE_HEIGHT);
282                                         self.menuBg.image.context.fillStyle = "#bb7777";
283                                         self.menuBg.image.context.fillRect(self.GAUGE_XPOS, this.label.y, gauge, self.GAUGE_HEIGHT);
284                                 }
285                         },
286                         "sleep" : {
287                                 label: null,
288                                 init: function(){
289                                         var TEXT = M.LABEL_SLEEP;
290                                         var label = new Label(TEXT);
291                                         label.color = COLOR;
292                                         label.font = FONT;
293                                         label.x = self.START_XPOS;
294                                         label.y = self.START_YPOS + 60;
295                                         label.textWidth = menuBg.image.context.measureText(TEXT).width;
296                                         this.label = label;
297                                 },
298                                 draw: function(yukkuriObj){
299                                         var gauge =yukkuriObj.param.sleep;
300                                         self.menuBg.image.context.fillStyle = "#ffffff";
301                                         self.menuBg.image.context.fillRect(self.GAUGE_XPOS, this.label.y, 100, self.GAUGE_HEIGHT);
302                                         self.menuBg.image.context.fillStyle = "#bb7777";
303                                         self.menuBg.image.context.fillRect(self.GAUGE_XPOS, this.label.y, gauge, self.GAUGE_HEIGHT);
304                                 }
305                         },
306                         "stress" : {
307                                 label: null,
308                                 init: function(){
309                                         var TEXT = M.LABEL_STRESS;
310                                         var label = new Label(TEXT);
311                                         label.color = COLOR;
312                                         label.font = FONT;
313                                         label.x = self.START_XPOS;
314                                         label.y = self.START_YPOS + 80;
315                                         label.textWidth = menuBg.image.context.measureText(TEXT).width;
316                                         this.label = label;
317                                 },
318                                 draw: function(yukkuriObj){
319                                         var gauge =yukkuriObj.param.stress;
320                                         self.menuBg.image.context.fillStyle = "#ffffff";
321                                         self.menuBg.image.context.fillRect(self.GAUGE_XPOS, this.label.y, 100, self.GAUGE_HEIGHT);
322                                         self.menuBg.image.context.fillStyle = "#bb7777";
323                                         self.menuBg.image.context.fillRect(self.GAUGE_XPOS, this.label.y, gauge, self.GAUGE_HEIGHT);
324                                 }
325                         },
326                 };
327
328                 this.menuBg.image.context.fillStyle = '#ff0000';
329                 for(var key in this.labelParams){
330                         var labelObj = this.labelParams[key];
331                         labelObj.init();
332                         labelGroup.addChild(labelObj.label);
333                 }
334                 menuBg.addChild(labelGroup);
335         },
336         draw: function(yukkuriObj){
337                 for(var key in this.labelParams){
338                         var labelObj = this.labelParams[key];
339                         labelObj.draw(yukkuriObj);
340                 }
341
342         }
343 });
344 var MangMsg = enchant.Class.create({
345         initialize: function (ctl){
346                 this.ctl = ctl;
347         },
348         output:function(yukkuri, emsg, targetYukkuri){
349                 //var M = yukkuri.getMsg();
350                 if(emsg == EMsg.WALK){
351                         if(rand(4) === 0){
352                                 yukkuri.tweet(M.WALK1);
353                         }
354                         else if(rand(4) === 1){
355                                 yukkuri.tweet(M.WALK2);
356                         }
357                         else if(rand(4) === 2){
358                                 yukkuri.tweet(M.WALK3);
359                         }
360                         else if(rand(4) === 3){
361                                 yukkuri.tweet(M.WALK4);
362                         }
363                 }
364                 else if(emsg == EMsg.EAT){
365                         if(rand(3) === 0){
366                                 yukkuri.tweet(M.EAT1);
367                         }
368                         else if(rand(3) === 1){
369                                 yukkuri.tweet(M.EAT2);
370                         }
371                         else if(rand(3) === 2){
372                                 yukkuri.tweet(M.EAT3);
373                         }
374                 }
375                 else if(emsg == EMsg.GET_UP){
376                         yukkuri.tweet(M.GET_UP1);
377                 }
378                 else if(emsg == EMsg.SLEEP){
379                         yukkuri.tweet(M.SLEEP1);
380                 }
381                 else if(emsg == EMsg.DEAD){
382                         yukkuri.tweet(M.DEAD1);
383                 }
384                 else if(emsg == EMsg.UNUN){
385                         if(rand(2) === 0){
386                                 yukkuri.tweet(M.UNUN1);
387                         }else{
388                                 yukkuri.tweet(M.UNUN2);
389                         }
390                 }
391                 else if(emsg == EMsg.UNUN_END){
392                         yukkuri.tweet(M.UNUN_END1);
393                 }
394                 else if(emsg == EMsg.UNUN_SMELL){
395                         yukkuri.tweet(M.UNUN_SPELL1);
396                 }
397                 else if(emsg == EMsg.EAT_FAILED){
398                         yukkuri.tweet(M.EAT_FAILED1);
399                 }
400                 else if(emsg == EMsg.SAY_HELLO){
401                         if(yukkuri.getAddress(targetYukkuri) === null){
402                                 yukkuri.tweet(M.SAY_HELLO1);
403                         }else{
404                                 yukkuri.tweet(M.SAY_HELLO2);
405                         }
406                 }
407                 else if(emsg == EMsg.TARGETING_EAT){
408                         yukkuri.tweet(M.TARGETING_EAT1);
409                 }
410                 else if(emsg == EMsg.DECLARE_PLACE){
411                         yukkuri.tweet(M.DECLARE_PLACE1);
412                 }
413
414         }
415 });
416
417 // var MangLabel = enchant.Class.create({
418 //      initialize: function (ctl, menuBg){
419 //              this.ctl = ctl;
420 //              var labelGroup = new LabelGroup();
421 //              this.START_XPOS = 4;
422 //              this.START_YPOS = GAME_HEIGHT / 2;
423 //              this.menuBg = menuBg;
424 //              this.widthArr = [];
425 //              this.WIDTH_MARGIN = 4;
426 //              var FONT = "14px 'Times New Roman'";
427 //              var COLOR = "#ffffff";
428 //              menuBg.image.context.font = FONT;
429 //              var self = this;
430 //              this.labels = {
431 //                      "yukkuri" : function(){
432 //                              var TEXT = "ゆっくり";
433 //                              var label = new Label(TEXT);
434 //                              label.color = COLOR;
435 //                              label.font = FONT;
436 //                              label.x = self.START_XPOS;
437 //                              label.y = self.START_YPOS;
438 //                              label.textWidth = menuBg.image.context.measureText(TEXT).width;
439 //                      },
440 //                      "hungry" : function(){
441 //                              var TEXT = "空腹";
442 //                              var label = new Label(TEXT);
443 //                              label.color = COLOR;
444 //                              label.font = FONT;
445 //                              label.x = self.START_XPOS;
446 //                              label.y = self.START_YPOS + 20;
447 //                              label.textWidth = menuBg.image.context.measureText(TEXT).width;
448 //                              return label;
449 //                      },
450 //              };
451
452 //              this.labels["yukkuri"]();
453 //              console.log(this.labels["yukkuri"]().textWidth);
454 //              // for(var key in this.labels){
455 //              //      console.log(key);
456 //              //      var label = this.labels[key]();
457 //              //      // labelGroup.addChild(label);
458 //              // }
459 //              // var width = this.widthArr['yukkuri'];
460 //              // this.menuBg.image.context.fillStyle = '#ff0000';
461 //              // this.menuBg.image.context.fillRect(this.START_XPOS + width, this.START_YPOS, 100, 30);
462 //              // menuBg.addChild(labelGroup);
463 //      },
464 //      draw: function(){
465 //              label = this.labels[key]();
466 //              this.menuBg.image.context.fillStyle = '#ff0000';
467 //              this.menuBg.image.context.fillRect(label.x, label.y, 100, 14);
468 //      }
469 // });
470