OSDN Git Service

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