OSDN Git Service

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