OSDN Git Service

ae211ae72c9e3854777a9a4fa5dcf84bc95d596a
[yukkurioverwint/YukkuriOverwinter.git] / main.js
1 enchant();
2 //////////////////////////////////////
3 //global
4 var ctl = null;
5 var mangIcon = null;
6 var mangTouch = null;
7 var mangLabel = null;
8 var mangMsg = null;
9 var LabelGroup = enchant.Class.mixClasses(Label, Group,true);
10 var net = new Net();
11 //////////////////////////////////////
12 //define
13 //////////////////////////////////////
14 var PALYER_INIT_X = 100;
15 var PALYER_INIT_Y = 100;
16 var CHARA_WIDTH = 64;
17 var CHARA_HEIGHT = 64;
18 var GAME_WIDTH = 800;
19 var GAME_HEIGHT = 600;
20 var FPS = 20;
21 var BASE_FPS = 20;
22 var HUNGRY_MAX = 100;
23
24 var EResPath = {
25         YUKKURI_BASE : './data/yukkuri_base.png',
26         YUKKURI_BODY_DEAD : './data/yukkuri_dead.png',
27         YUKKURI_UNUN : './data/unun.png',
28         YUKKURI_SHADOW : './data/shadow.png',
29         MARISA_FACE_NORMAL : './data/marisa/face_normal1.png',
30         MARISA_FACE_TIRED : './data/marisa/face_tired1.png',
31         MARISA_FACE_ANGRY : './data/marisa/face_angry1.png',
32         MARISA_FACE_CRY1 : './data/marisa/face_cry1.png',
33         MARISA_FACE_CRY2 : './data/marisa/face_cry2.png',
34         MARISA_FACE_EAT1 : './data/marisa/face_eat1.png',
35         MARISA_FACE_EAT2 : './data/marisa/face_eat2.png',
36         MARISA_FACE_HAPPY1 : './data/marisa/face_happy1.png',
37         MARISA_FACE_HAPPY2 : './data/marisa/face_happy2.png',
38         MARISA_FACE_SLEEP : './data/marisa/face_sleep1.png',
39         MARISA_HEAR : './data/marisa/hear1.png',
40         OBJECT : './data/object.png',
41         MAP0 : './data/map0.png',
42         COMMAND : './data/command.png',
43         OKAZARI : './data/okazari.png',
44 };
45 var EFace = {
46         NORMAL:0,
47         TIRED:1,
48         ANGRY:2,
49         CRY1:3,
50         CRY2:4,
51         EAT1:5,
52         EAT2:6,
53         HAPPY1:7,
54         HAPPY2:8,
55         SLEEP:9,
56 };
57 var EBody = {
58         NORMAL: 0,
59         DEAD: 1,
60 };
61
62 var ECommand = {
63         WORLD_CURSOR: 0,
64         WORLD_TARGET: 1,
65         WORLD_APPLE: 2,
66 };
67
68 var EMenuPos = {
69         X : 600,
70         Y : 0,
71         WIDTH : 200,
72         HEIGHT : GAME_HEIGHT,
73 };
74 var EFieldPos = {
75         X : 0,
76         Y : 0,
77         WIDTH: GAME_WIDTH - EMenuPos.WIDTH,
78         HEIGHT: GAME_HEIGHT,
79 };
80 var EAction = {
81         WAIT : 0,
82         HUNT : 3,
83         THINK : 4,
84         WALK : 5,
85         DEAD: 6,
86         EAT_START : 8,
87         EAT_WAIT : 9,
88         MOVE_TO_EAT_START: 10,
89         MOVE_TO_EAT_UNDERWAY: 11,
90         MOVE_TO_COMMAND: 12,
91         UNUN_START : 13,
92         UNUN_WAIT : 14,
93         UNUN_SMELL_START : 15,
94         UNUN_SMELL_WAIT : 16,
95         SLEEP_START : 17,
96         SLEEP_WAIT : 18,
97         NONE: 9999
98 };
99 var EDirection = {
100         LEFT : 0,
101         RIGHT: 1,
102 };
103 var EMsg = {
104         WALK: 0,
105         SLEEP: 1,
106         EAT: 2,
107         GET_UP: 3,
108         DEAD: 4,
109         UNUN: 5,
110         UNUN_END: 6,
111         UNUN_SMELL_START: 7,
112         SEARCH_FOOD: 8,
113 };
114 include("./lang/ja.js");
115 window.onload = function(){
116
117         //init game
118         var def = new Object();
119         var foodGroup = new Group();
120         var SpriteGroup = enchant.Class.mixClasses(Sprite, Group,true);
121         var menuBg = new SpriteGroup(EMenuPos.WIDTH, EMenuPos.HEIGHT);
122         var fieldBg = new enchant.Sprite(EFieldPos.WIDTH, EFieldPos.HEIGHT);
123         var windowFront = new enchant.Sprite(EFieldPos.WIDTH, EFieldPos.HEIGHT);
124         var game = new Game(GAME_WIDTH, GAME_HEIGHT);
125         game.fps = FPS;
126         var _loadArr = [];
127         var i=0;
128         for(var _v in EResPath){
129                 _loadArr[i] = EResPath[_v];
130                 i++;
131         }
132         game.preload(_loadArr);
133         var MapGroup = enchant.Class.mixClasses(Map, Group,true);
134         var backgroundMap = new MapGroup(16, 16);
135         include("./class.js");
136         include("./ctrl.js");
137         ctl = new Ctrl();
138         ctl.init(game);
139         ctl.setBackgroundMap(backgroundMap);
140         var Action = enchant.Class.create({
141                 initialize: function (yukkuri){
142                         this.status = EAction.THINK;
143                         this.yukkuri = yukkuri;
144                         this.isMoving = false;
145                         this.targetNode = null;
146                 },
147                 getStatus: function(){
148                         return this.status;
149                 },
150                 setStatus: function(eaction){
151                         this.status = eaction;
152                 },
153                 observe: function(){
154                         if(this.yukkuri.isDead()){
155                                 this.status = EAction.DEAD;
156                         }
157                         // else if(this.yukkuri.isSleep()){
158                         //      this.status = EAction.SLEEP;
159                         // }
160
161                 },
162                 act : function(){
163                         this.observe();
164                         switch(this.status){
165                                 case EAction.WAIT:
166
167                                 break;
168                                 case EAction.THINK:
169                                         if(this.yukkuri.age%2 === 0){
170                                                 if(this.yukkuri.isSleep()){
171                                                         this.setStatus(EAction.SLEEP_START);
172                                                 }
173                                                 else if(this.yukkuri.getUnun() >= 80){
174                                                         this.setStatus(EAction.UNUN_START);
175                                                 }else{
176                                                         // this.yukkuri.param.yukkuri -= 1;
177                                                         this.yukkuri.changeFace();
178                                                         this.search();
179                                                 }
180
181                                         }
182                                 break;
183                                 case EAction.MOVE_TO_EAT_START:
184                                         this.move_to_eat_start();
185                                 break;
186                                 case EAction.MOVE_TO_EAT_UNDERWAY:
187                                 break;
188                                 //Random Walk
189                                 case EAction.WALK:
190                                         this.walk(0);
191                                 break;
192                                 case EAction.SLEEP_START:
193                                         this.sleep_start();
194                                 break;
195                                 case EAction.SLEEP_WAIT:
196                                 break;
197                                 case EAction.DEAD:
198                                         this.dead();
199                                 break;
200                                 case EAction.EAT_START:
201                                         this.eat_start();
202                                 break;
203                                 case EAction.EAT_WAIT:
204                                 break;
205                                 case EAction.UNUN_START:
206                                         this.unun_start();
207                                 break;
208                                 case EAction.UNUN_WAIT:
209                                 break;
210                                 case EAction.MOVE_TO_COMMAND:
211                                         this.move_to_command();
212                                 break;
213                                 case EAction.UNUN_SMELL_START:
214                                         this.unun_smell_start();
215                                 break;
216                         }
217                 },
218
219                 move_to_eat_start : function(){
220                         new MoveToEatEvent({
221                                 "type": 'food',
222                                 "targetNode": this.targetNode,
223                                 "action": this,
224                                 "myYukkuri": this.yukkuri
225                         });
226                 },
227                 walkNew: function(){
228
229                 },
230                 walk : function(retryCounter){
231                         if(retryCounter > 15){
232                                 retryCounter = 0;
233                                 this.status = EAction.NONE;
234                                 console.log("retryCount over");
235                                 return;
236                         }
237                         if(this.yukkuri.imgGroup.tl.queue.length === 0){
238                                 var frame = 200;
239                                 if(this.isMoving){
240                                         this.isMoving = false;
241                                         this.status = EAction.THINK;
242                                         this.yukkuri.vx = 0;
243                                         this.yukkuri.vy = 0;
244                                 }else{
245                                         var xpos = 150 + rand(40) - (retryCounter * 10);
246                                         var ypos = 150 + rand(40) - (retryCounter * 10);
247                                         if(rand(8) === 0){
248                                                 this.yukkuri.vx = 0;
249                                                 this.yukkuri.vy = -ypos;
250                                         }
251                                         else if(rand(8) == 1){
252                                                 this.yukkuri.vx = xpos;
253                                                 this.yukkuri.vy = -ypos;
254                                                 this.yukkuri.direction = EDirection.RIGHT;
255                                         }
256                                         else if(rand(8) == 2){
257                                                 this.yukkuri.vx = xpos;
258                                                 this.yukkuri.vy = 0;
259                                                 this.yukkuri.direction = EDirection.RIGHT;
260                                         }
261                                         else if(rand(8) == 3){
262                                                 this.yukkuri.vx = xpos;
263                                                 this.yukkuri.vy = ypos;
264                                                 this.yukkuri.direction = EDirection.RIGHT;
265                                         }
266                                         else if(rand(8) == 4){
267                                                 this.yukkuri.vx = 0;
268                                                 this.yukkuri.vy = ypos;
269                                         }
270                                         else if(rand(8) == 5){
271                                                 this.yukkuri.vx = -xpos;
272                                                 this.yukkuri.vy = ypos;
273                                                 this.yukkuri.direction = EDirection.LEFT;
274                                         }
275                                         else if(rand(8) == 6){
276                                                 this.yukkuri.vx = -xpos;
277                                                 this.yukkuri.vy = 0;
278                                                 this.yukkuri.direction = EDirection.LEFT;
279                                         }
280                                         else if(rand(8) == 7){
281                                                 this.yukkuri.vx = -xpos;
282                                                 this.yukkuri.vy = -ypos;
283                                                 this.yukkuri.direction = EDirection.LEFT;
284                                         }
285                                         if (this.yukkuri.vx || this.yukkuri.vy) {
286                                                 var map = ctl.backgroundMap;
287                                                 // var x = this.yukkuri.x + (this.yukkuri.moveX ? this.yukkuri.moveX / Math.abs(this.yukkuri.moveX) * 16 : 0) + 16;
288                                                 // var y = this.yukkuri.y + (this.yukkuri.moveY ? this.yukkuri.moveY / Math.abs(this.yukkuri.moveY) * 16 : 0) + 16;
289                                                 var x = this.yukkuri.imgGroup.x + this.yukkuri.vx;
290                                                 var y = this.yukkuri.imgGroup.y + this.yukkuri.vy + this.yukkuri.height / 2;
291                                                 if (0 <= x && x < map.width && 0 <= y && y < map.height && !map.hitTest(x, y)) {
292                                                         // console.log("あたってないよ:"+ this.yukkuri.imgGroup.x + ":" + this.yukkuri.imgGroup.y);
293                                                         // console.log("X:" + this.yukkuri.moveX);
294                                                         // console.log("Y:" + this.yukkuri.moveY);
295                                                         this.isMoving = true;
296                                                         this.yukkuri.reverse();
297                                                         this.yukkuri.moveBy(this.yukkuri.vx, this.yukkuri.vy, frame);
298                                                         mangMsg.output(this.yukkuri,EMsg.WALK);
299                                                         //うんうんくさい対策
300                                                         this.targetNode = null;
301                                                 }else{
302                                                         // console.log("HIT:"+ this.yukkuri.imgGroup.x + ":" + this.yukkuri.imgGroup.y);
303                                                         this.walk(retryCounter+1);
304                                                 }
305                                         }
306                                 }
307                         }
308                 },
309                 sleep_start: function(){
310                         new SleepEvent({
311                                 "action": this,
312                                 "myYukkuri": this.yukkuri
313                         });
314                 },
315                 dead : function(){
316                         console.log("dead");
317                         mangMsg.output(this.yukkuri, EMsg.DEAD);
318                         this.yukkuri.imgBody.tl.clear();
319                         this.yukkuri.imgBody.tl.pause();
320                         this.yukkuri.imgGroup.tl.clear();
321                         this.yukkuri.imgGroup.tl.pause();
322                         this.yukkuri.setBodyImage(EBody.DEAD);
323                 },
324                 eat_start: function(){
325                         new EatEvent({
326                                 "type": 'eat',
327                                 "targetNode": this.targetNode,
328                                 "action": this,
329                                 "myYukkuri": this.yukkuri
330                         });
331
332                 },
333                 unun_start: function(){
334                         new UnunEvent({
335                                 "action": this,
336                                 "myYukkuri": this.yukkuri
337                         });
338                 },
339                 unun_smell_start: function(){
340                         new UnunSmellEvent({
341                                 "action": this,
342                                 "myYukkuri": this.yukkuri
343                         });
344                 },
345                 move_to_command: function(){
346
347                 },
348                 search : function(){
349                         var nodes = ctl.getObjs();
350                         l = nodes.length;
351                         var ununFlg = false;
352
353                         for (var key in nodes) {
354                                 var node = nodes[key];
355                                 if (!ununFlg
356                                         && node instanceof Unun
357                                         && !(this.targetNode instanceof Unun)
358                                         && this.yukkuri.within(node, this.yukkuri.getRange() / 2)) {
359                                         ununFlg = true;
360                                         this.targetNode = node;
361                                         this.setStatus(EAction.UNUN_SMELL_START);
362                                         return;
363                                 }
364                                 else if (node instanceof Food) {
365                                         if(this.yukkuri.isKuhuku() && this.yukkuri.within(node, this.yukkuri.getRange())){
366
367                                                 //A yukkuri to go to the food area
368                                                 this.targetNode = node;
369                                                 this.setStatus(EAction.MOVE_TO_EAT_START);
370
371                                                 return;
372                                         }else{
373                                                 //not hunbry or not food.
374                                         }
375                                 }
376                         }
377                         this.status =  EAction.WALK;
378                 }
379         });
380         var Event = enchant.Class.create({
381                 initialize: function (_data){
382                 },
383                 onactionstart:function(self){
384                         return function(e){
385                                 if(typeof e === "undefined")return;
386                         };
387                 },
388                 onactiontick:function(self){
389                         return function(e){
390                                 if(typeof e === "undefined")return;
391                         };
392                 },
393                 onactionend:function(self){
394                         return function(e){
395                                 if(typeof e === "undefined")return;
396                         };
397                 }
398         });
399         var WalkEvent = enchant.Class.create(Event,{
400                 initialize: function (_data){
401                         this.data = _data;
402                         this.yukkuri = _data.myYukkuri;
403                         this.action = _data.action;
404
405                         mangMsg.output(this.yukkuri, EMsg.SLEEP);
406                         this.action.setStatus(EAction.SLEEP_WAIT);
407                         this.yukkuri.setFaceImage(EFace.SLEEP);
408                         this.yukkuri.tlPause();
409                         var self = this;
410                         this.yukkuri.addEventListener('enterframe', function() {
411                                 var yukkuri = self.yukkuri;
412                                 self.run();
413                         });
414                 },
415                 run : function(){
416
417                 }
418         });
419         var SleepEvent = enchant.Class.create(Event,{
420                 initialize: function (_data){
421                         this.data = _data;
422                         this.yukkuri = _data.myYukkuri;
423                         this.action = _data.action;
424
425                         mangMsg.output(this.yukkuri, EMsg.SLEEP);
426                         this.action.setStatus(EAction.SLEEP_WAIT);
427                         this.yukkuri.setFaceImage(EFace.SLEEP);
428                         this.yukkuri.tlPause();
429                         var sec = FPS * 3;
430                         var self = this;
431                         this.yukkuri.addEventListener('enterframe', function() {
432                                 var yukkuri = self.yukkuri;
433                                 if(yukkuri.age%2 === 0 && yukkuri.age !== 0)yukkuri.param.sleep--;
434                                 if(yukkuri.param.sleep <= 0){
435                                         yukkuri.param.sleep = 0;
436                                         this.removeEventListener("enterframe",arguments.callee);
437                                         mangMsg.output(self.yukkuri, EMsg.GET_UP);
438                                         yukkuri.setFaceImage(EFace.NORMAL);
439                                         yukkuri.tlResume();
440                                         // self.action.setStatus(EAction.WAIT);
441                                         self.action.setStatus(EAction.THINK);
442                                 }
443                         });
444                 }
445         });
446
447         var UnunEvent = enchant.Class.create(Event,{
448                 initialize: function (_data){
449                         this.data = _data;
450                         this.yukkuri = _data.myYukkuri;
451                         this.action = _data.action;
452                         this.action.setStatus(EAction.UNUN_WAIT);
453                         mangMsg.output(this.yukkuri, EMsg.UNUN);
454                         this.yukkuri.setFaceImage(EFace.HAPPY2);
455                         var sec = FPS * 3;
456
457                         this.yukkuri.wait(sec, {
458                                 "onactionstart": this.onactionstart(this),
459                                 "onactiontick": this.onactiontick(this),
460                                 "onactionend": this.onactionend(this)
461                         });
462                 },
463                 onactionstart:function(self){
464                         return function(e){
465                                 if(typeof e === "undefined")return;
466                         };
467                 },
468                 onactiontick:function(self){
469                         return function(e){
470                                 if(typeof e === "undefined")return;
471                         };
472                 },
473                 onactionend:function(self){
474                         return function(e){
475                                 if(typeof e === "undefined")return;
476                                 self.yukkuri.unun();
477                                 self.action.setStatus(EAction.WAIT);
478                                 mangMsg.output(self.yukkuri, EMsg.UNUN_END);
479                                 new WaitEvent({
480                                         "waitframe": FPS * 1.5,
481                                         "action": self.action,
482                                         "myYukkuri": self.yukkuri
483                                 });
484                         };
485                 }
486         });
487         var WaitEvent = enchant.Class.create(Event,{
488                 initialize: function (_data){
489                         this.data = _data;
490                         this.yukkuri = _data.myYukkuri;
491                         this.action = _data.action;
492                         this.waitframe = _data.waitframe;
493                         this.yukkuri.wait(this.waitframe, {
494                                 "onactionstart": this.onactionstart(this),
495                                 "onactiontick": this.onactiontick(this),
496                                 "onactionend": this.onactionend(this)
497                         });
498                 },
499                 onactionend:function(self){
500                         return function(e){
501                                 if(typeof e === "undefined")return;
502                                 self.action.setStatus(EAction.THINK);
503                         };
504                 }
505         });
506         var UnunSmellEvent = enchant.Class.create(Event,{
507                 initialize: function (_data){
508                         this.data = _data;
509                         this.yukkuri = _data.myYukkuri;
510                         this.action = _data.action;
511                         this.action.setStatus(EAction.UNUN_SMELL_WAIT);
512                         mangMsg.output(this.yukkuri, EMsg.UNUN_SMELL);
513                         this.yukkuri.setFaceImage(EFace.CRY1);
514                         var sec = FPS * 3;
515                         this.yukkuri.setYukkuri(this.yukkuri.getYukkuri() - 3);
516                         this.yukkuri.wait(sec, {
517                                 "onactionstart": this.onactionstart(this),
518                                 "onactiontick": this.onactiontick(this),
519                                 "onactionend": this.onactionend(this)
520                         });
521                 },
522                 onactionend:function(self){
523                         return function(e){
524                                 if(typeof e === "undefined")return;
525                                 self.action.setStatus(EAction.THINK);
526                         };
527                 }
528         });
529
530         var EatEvent = enchant.Class.create(Event,{
531                 initialize: function (_data){
532                         this.data = _data;
533                         this.yukkuri = _data.myYukkuri;
534                         this.food = _data.targetNode;
535                         this.action = _data.action;
536                         this.action.setStatus(EAction.EAT_WAIT);
537                         mangMsg.output(this.yukkuri, EMsg.EAT);
538                         this.yukkuri.setFaceImage(EFace.EAT2);
539
540                         // var sec = FPS * (this.yukkuri.param.hungry/10 + 3);
541                         var sec = FPS * 3;
542
543                         this.yukkuri.wait(sec, {
544                                 "onactionstart": this.onactionstart(this),
545                                 "onactiontick": this.onactiontick(this),
546                                 "onactionend": this.onactionend(this)
547                         });
548                 },
549                 onactionstart:function(self){
550                         return function(e){
551                                 if(typeof e === "undefined")return;
552                                 self.yukkuri.eat(self.food);
553                         };
554                 },
555                 onactiontick:function(self){
556                         return function(e){
557                                 if(typeof e === "undefined")return;
558                         };
559                 },
560                 onactionend:function(self){
561                         return function(e){
562                                 if(typeof e === "undefined")return;
563                                 if(self.food.getAmount() <= 0 || self.yukkuri.isManpuku()){
564                                         self.action.setStatus(EAction.THINK);
565                                         self.yukkuri.setFaceImage(EFace.NORMAL);
566                                 }else{
567                                         self.action.setStatus(EAction.EAT_START);
568                                 }
569                         };
570                 }
571         });
572         /**
573          * Move Event
574          * -When yukkuri find Food.
575          * @param  _data
576          * type: "food"
577          * targetNode: enchant.Node
578          * action:Action
579          * myYukkuri:Yukkuri
580          */
581         var MoveToEatEvent = enchant.Class.create(Event,{
582                 initialize: function (_data){
583                         this.data = _data;
584                         this.yukkuri = this.data.myYukkuri;
585                         this.action = this.data.action;
586
587                         var yukkuri = this.yukkuri;
588                         var node = this.data.targetNode;
589                         //food distance
590                         if(this.data.type == "food"){
591                                 this.action.status = EAction.MOVE_TO_EAT_UNDERWAY;
592                                 yukkuri.vx = node.x - yukkuri.getX();
593                                 yukkuri.vy = node.y - yukkuri.getY();
594                                 var distance = (Math.abs(yukkuri.vx) + Math.abs(yukkuri.vy)) / 2;
595                                 var frame = distance + distance/5 + 1;
596                                 yukkuri.direction = yukkuri.vx > 0 ? EDirection.RIGHT : EDirection.LEFT;
597
598                                 yukkuri.moveBy(yukkuri.vx, yukkuri.vy, frame, {
599                                         "onactionstart": this.onactionstart(this),
600                                         "onactiontick": this.onactiontick(this),
601                                         "onactionend": this.onactionend(this)
602                                 });
603                         }
604                 },
605                 onactionstart:function(self){
606                         return function(e){
607                                 if(typeof e === "undefined")return;
608                                 self.yukkuri.tweet("ゆゆ??\nたべものさん\nはっけんなのぜ!");
609                         };
610                 },
611                 onactiontick:function(self){
612                         return function(e){
613                                 if(typeof e === "undefined")return;
614                         };
615                 },
616                 onactionend:function(self){
617                         return function(e){
618                                 if(typeof e === "undefined")return;
619                                 self.action.setStatus(EAction.EAT_START);
620                         };
621                 }
622         });
623         var MoveCommandEvent = enchant.Class.create(Event,{
624                 initialize: function (_data){
625                         this.data = _data;
626                         this.yukkuri = this.data.myYukkuri;
627                         this.action = this.data.action;
628                         this.vx = this.data.vx;
629                         this.vy = this.data.vy;
630
631                         var yukkuri = this.yukkuri;
632                         this.action.status = EAction.MOVE_TO_EAT_UNDERWAY;
633                         yukkuri.vx = node.x - yukkuri.getX();
634                         yukkuri.vy = node.y - yukkuri.getY();
635                         var distance = (Math.abs(yukkuri.vx) + Math.abs(yukkuri.vy)) / 2;
636                         var frame = distance + 1;
637                         yukkuri.moveBy(yukkuri.vx, yukkuri.vy, frame, {
638                                 "onactionstart": this.onactionstart(this),
639                                 "onactiontick": this.onactiontick(this),
640                                 "onactionend": this.onactionend(this)
641                         });
642                 },
643                 onactionstart:function(self){
644                         return function(e){
645                                 if(typeof e === "undefined")return;
646                         };
647                 },
648                 onactiontick:function(self){
649                         return function(e){
650                                 if(typeof e === "undefined")return;
651                         };
652                 },
653                 onactionend:function(self){
654                         return function(e){
655                                 if(typeof e === "undefined")return;
656                                 self.action.setStatus(EAction.THINK);
657                         };
658                 }
659         });
660
661         var ObjSprite = enchant.Class.create(enchant.Sprite,{
662                 initialize: function (w, h){
663                         enchant.Sprite.call(this, w, h);
664                         this.id = guid();
665                         ctl.addObj(this);
666                 },
667                 removeAll: function(){
668                         this.remove();
669                         ctl.removeObj(this);
670                 }
671         });
672
673         var Food = enchant.Class.create(ObjSprite,{
674                 initialize: function (type, x, y){
675                         this.classname = "Food";
676                         ObjSprite.call(this,16,16);
677                         this.image = game.assets[EResPath.OBJECT];
678                         this.frame = 15;
679                         this.x = x;
680                         this.y = y;
681                         //一つにつきgiveの値分、hunguryを減少させられる
682                         this.give = 40;
683                         this.amount = 3;
684                         foodGroup.addChild(this);
685                         this.addEventListener('enterframe', function(){
686                                 if(this.amount <= 0){
687                                         this.removeAll();
688                                 }
689                         });
690                 },
691                 getAmount: function(){
692                         return this.amount;
693                 },
694                 getGive: function(){
695                         return this.give;
696                 }
697         });
698         var Unun = enchant.Class.create(ObjSprite,{
699                 initialize: function (x, y){
700                         this.classname = "Unun";
701                         ObjSprite.call(this,32,32);
702                         this.image = game.assets[EResPath.YUKKURI_UNUN];
703                         this.x = x;
704                         this.y = y;
705                         backgroundMap.addChild(this);
706                 }
707         });
708         var Okazari = enchant.Class.create(enchant.Sprite,{
709                 initialize: function(){
710                         this.classname = "Okazari";
711                         enchant.Sprite.call(this, 64, 64);
712                         this.image = game.assets[EResPath.OKAZARI];
713                         this.x = -CHARA_WIDTH / 2;
714                         this.y = -12 - CHARA_HEIGHT / 2;
715                 }
716         });
717         var Yukkuri = enchant.Class.create(ObjSprite,{
718                 initialize: function(x, y){
719                         ObjSprite.call(this, 64, 64);
720                         this.classname = "Yukkuri";
721                         this.imgGroup = new SpriteGroup();
722                         this.imgBody = new SpriteGroup();
723                         this.imgGroup.id = guid();
724                         this.imgBody.id = guid();
725                         this.x = -CHARA_WIDTH / 2;
726                         this.y = -CHARA_HEIGHT / 2;
727                         this.vx = 0;
728                         this.vy = 0;
729                         this.image = game.assets[EResPath.YUKKURI_BASE];
730                         this.direction = EDirection.RIGHT;
731                         this.addEventListener('enterframe', this.runEnterframe);
732                         this.bodyStatus ={};
733                         this.bodyStatus[EBody.NORMAL] = EResPath.YUKKURI_BASE;
734                         this.bodyStatus[EBody.DEAD] = EResPath.YUKKURI_BODY_DEAD;
735                 },
736                 runEnterframe:function(){
737                         this.act();
738                         if(this.isDead())return;
739                         this.runYukkuri();
740                         this.runHungry();
741                         this.runUnun();
742                         this.runSleep();
743                 },
744                 reverse:function(){
745                         if(this.direction == EDirection.RIGHT){
746                                 this.imgBody.scaleX = 1;
747                         }
748                         else if(this.direction == EDirection.LEFT){
749                                 this.imgBody.scaleX = -1;
750                         }
751                 },
752                 tweet:function(text){
753                         this._tweet.text(text, this.x - this._tweet.width/4, this.y - this._tweet.height);
754                 },
755                 moveTo:function(x, y, time){
756                         this.imgGroup.tl.moveTo(x, y, time, enchant.Easing.SIN_EASEINOUT);
757                 },
758                 moveBy:function(x, y, time, eventFunctions){
759                         var self = this;
760                         var params = {
761                                 x: function() {
762                                         return self.imgGroup.x + x;
763                                 },
764                                 y: function() {
765                                         return self.imgGroup.y + y;
766                                 },
767                                 time: time,
768                                 easing: enchant.Easing.SIN_EASEINOUT
769                         };
770                         //-Event register [onactionstart,onactiontick,onactionend]
771                         if(eventFunctions !== undefined){
772                                 for(var key in eventFunctions){
773                                         params[key] = eventFunctions[key];
774                                 }
775                         }
776                         this.imgGroup.tl.tween(params);
777
778                 },
779                 wait:function(frame, eventFunctions){
780                         this.moveBy(0,1,frame,eventFunctions);
781                 },
782                 act: function(){
783                         this.action.act();
784                 },
785                 animation: function(){
786                         this.imgBody.tl.moveBy(0, -5, 10, enchant.Easing.SWING).moveBy(0, 5, 10, enchant.Easing.SWING).loop();
787                         // this.tl.moveBy(0, -5, 10, enchant.Easing.SWING).moveBy(0, 5, 10, enchant.Easing.SWING).loop();
788                         // this.okazari.tl.moveBy(0, -5, 10, enchant.Easing.SWING).moveBy(0, 5, 10, enchant.Easing.SWING).loop();
789                         // this.face.tl.moveBy(0, -5, 10, enchant.Easing.SWING).moveBy(0, 5, 10, enchant.Easing.SWING).loop();
790                         // this.hear.tl.moveBy(0, -5, 10, enchant.Easing.SWING).moveBy(0, 5, 10, enchant.Easing.SWING).loop();
791                 },
792                 getWidth: function(){
793                         return this.width;
794                 },
795                 getHeight: function(){
796                         return this.height;
797                 },
798                 getX: function(){
799                         return this.imgGroup.x;
800                 },
801                 getY: function(){
802                         return this.imgGroup.y;
803                 },
804                 moveX: function(x){
805                         this.imgGroup.x += x;
806                         // this.x += x;
807                         // this.shadow.x += x;
808                         // this._tweet.x += x;
809                 },
810                 moveY: function(y){
811                         this.imgGroup.y += y;
812                         // this.y += y;
813                         // this.shadow.y += y;
814                         // this._tweet.y += y;
815                 },
816                 // changeFace: function(erespath){
817                 //      this.face.image = game.assets[erespath];
818                 // },
819                 loadParamsXML: function(url){
820                         var http = new JKL.ParseXML( url );
821                         return http.parse();
822                 },
823                 runYukkuri: function(){
824                         if(this.param.hungry > 70){
825                                 if(this.age%(50 - this.param.hungry - 70) === 0 && this.age !== 0){
826                                         this.param.yukkuri -= 1;
827                                 }
828                         }
829                         else if(this.param.hungry < 10){
830                                 if(this.age%50 === 0 && this.age !== 0) this.param.yukkuri += 1;
831                         }
832
833                         if(this.param.yukkuri <= 0)this.param.yukkuri = 0;
834                         else if(this.param.yukkuri >= this.param.maxYukkuri)this.param.yukkuri = this.param.maxYukkuri;
835                 },
836                 runHungry: function(){
837                         if(this.age%50 === 0 && this.age !== 0)this.param.hungry++;
838                         if(this.param.hungry >= 100)this.param.hungry = 100;
839                 },
840                 runUnun: function(){
841                         if(this.age%50 === 0 && this.age !== 0)this.param.unun++;
842                         if(this.param.unun >= 100)this.param.unun = 100;
843                 },
844                 runSleep: function(){
845                         if(this.action.getStatus() != EAction.SLEEP_START && this.action.getStatus() != EAction.SLEEP_WAIT){
846                                 if(this.age%80 === 0 && this.age !== 0)this.param.sleep++;
847                                 if(this.param.sleep >= 100){
848                                         this.param.sleep = 100;
849                                 }
850                         }
851                 },
852                 changeFace: function(){
853                         if(this.param.yukkuri >= 80){
854                                 this.setFaceImage(EFace.HAPPY1);
855                         }
856                         else if(this.param.yukkuri >= 50){
857                                 this.setFaceImage(EFace.NORMAL);
858                         }
859                         else if(this.param.yukkuri >= 30){
860                                 this.setFaceImage(EFace.TIRED);
861                         }
862                         else if(this.param.yukkuri >= 10){
863                                 this.setFaceImage(EFace.CRY1);
864                         }
865                         else if(this.param.yukkuri >= 1){
866                                 this.setFaceImage(EFace.CRY2);
867                         }
868                 },
869                 getRange: function(){
870                         return this.param.range;
871                 },
872                 isSleep: function(){
873                         return this.param.sleep >= 100;
874                 },
875                 isDead: function(){
876                         return this.param.yukkuri <= 0;
877                 },
878                 isManpuku: function(){
879                         return this.param.hungry <= 20;
880                 },
881                 isKuhuku: function(){
882                         return this.param.hungry >= 40;
883                 },
884                 getYukkuri: function(){
885                         return this.param.yukkuri;
886                 },
887                 setYukkuri: function(yukkuri){
888                         this.param.yukkuri = yukkuri;
889                         if(this.param.yukkuri < 0)this.param.yukkuri = 0;
890                 },
891                 getHungry: function(){
892                         return this.param.hungry;
893                 },
894                 setHungry: function(hungry){
895                         this.param.hungry = hungry;
896                         if(this.param.hungry < 0)this.param.hungry = 0;
897                 },
898                 getUnun: function(){
899                         return this.param.unun;
900                 },
901                 setUnun: function(unun){
902                         this.param.unun = unun;
903                         if(this.param.unun < 0)this.param.unun = 0;
904                 },
905
906                 eat:function(food){
907                         food.amount--;
908                         this.setHungry(this.param.hungry - food.getGive());
909                         this.setUnun(this.getUnun() + food.getGive() / 4);
910                         this.setYukkuri(this.getYukkuri() + 5);
911                 },
912                 unun:function(){
913                         if(this.direction == EDirection.RIGHT){
914                                 new Unun(this.getX(), this.getY() + this.getHeight()/5 );
915                         }else{
916                                 new Unun(this.getX() -  this.getWidth()/5, this.getY() + this.getHeight()/5 );
917                         }
918                         this.setUnun(0);
919                 },
920                 setBodyImage: function(ebody){
921                         var path = this.bodyStatus[ebody];
922                         this.image = game.assets[path];
923                 },
924                 tlPause:function(){
925                         this.imgBody.tl.pause();
926                         this.imgGroup.tl.pause();
927                         this.imgBody.tl.clear();
928                         this.imgGroup.tl.clear();
929                 },
930                 tlResume: function(){
931                         this.imgBody.tl.resume();
932                         this.imgGroup.tl.resume();
933                         this.animation();
934                 },
935                 destruct: function(){
936
937                 }
938         });
939         var Marisa = enchant.Class.create(Yukkuri,{
940                 initialize: function(x, y){
941                         Yukkuri.call(this,x,y);
942                         this.classname = "Marisa";
943
944
945                         // var xml = this.loadParamsXML("./data/marisa/params.xml");
946                         var json = net.load("./data/marisa/params.json");
947                         this.param = json.root.param;
948                         this.shadow = new enchant.Sprite(64, 64);
949                         this.shadow.image = game.assets[EResPath.YUKKURI_SHADOW];
950                         this.shadow.x = 0 + this.x;
951                         this.shadow.y = CHARA_HEIGHT / 16 + this.x;
952                         this.shadow.image._element.style.zIndex = 2;
953
954                         this._style.zIndex = 5;
955
956                         this.face = new enchant.Sprite(64, 64);
957                         this.face.image = game.assets[EResPath.MARISA_FACE_NORMAL];
958                         this.face.x = -CHARA_WIDTH / 2;
959                         this.face.y = -CHARA_HEIGHT / 2;
960                         this.face._style.zIndex = 0;
961
962                         this.faceStatus ={};
963                         this.faceStatus[EFace.NORMAL] = EResPath.MARISA_FACE_NORMAL;
964                         this.faceStatus[EFace.CRY1] = EResPath.MARISA_FACE_CRY1;
965                         this.faceStatus[EFace.CRY2] = EResPath.MARISA_FACE_CRY2;
966                         this.faceStatus[EFace.ANGRY] = EResPath.MARISA_FACE_ANGRY;
967                         this.faceStatus[EFace.HAPPY1] = EResPath.MARISA_FACE_HAPPY1;
968                         this.faceStatus[EFace.HAPPY2] = EResPath.MARISA_FACE_HAPPY2;
969                         this.faceStatus[EFace.EAT1] = EResPath.MARISA_FACE_EAT1;
970                         this.faceStatus[EFace.EAT2] = EResPath.MARISA_FACE_EAT2;
971                         this.faceStatus[EFace.TIRED] = EResPath.MARISA_FACE_TIRED;
972                         this.faceStatus[EFace.SLEEP] = EResPath.MARISA_FACE_SLEEP;
973
974
975                         this.hear = new enchant.Sprite(64, 64);
976                         this.hear.image = game.assets[EResPath.MARISA_HEAR];
977                         this.hear.x = -CHARA_WIDTH / 2;
978                         this.hear.y = -CHARA_HEIGHT / 2;
979                         this.hear._style.zIndex = 0;
980
981                         this.okazari = new Okazari();
982                         this.okazari.image._element.style.zIndex = 1;
983
984                         // this.imgGroup._style.zIndex = 1;
985
986                         this.imgGroup.addChild(this.shadow);
987                         this.imgBody.addChild(this);
988                         this.imgBody.addChild(this.face);
989                         this.imgBody.addChild(this.hear);
990                         this.imgBody.addChild(this.okazari);
991                         this.imgGroup.addChild(this.imgBody);
992                         backgroundMap.addChild(this.imgGroup);
993                         this._tweet = new TTweet(148, 64);
994                         this._tweet.image._element.style.zIndex = 20;
995
996                         this.imgGroup.addChild(this._tweet);
997                         this.imgGroup.x = x;
998                         this.imgGroup.y = y;
999                         this.animation();
1000                         this.action = new Action(this);
1001                         this.id = guid();
1002                         ctl.addObj(this);
1003                 },
1004                 setFaceImage: function(eface){
1005                         var path = this.faceStatus[eface];
1006                         this.face.image = game.assets[path];
1007                 }
1008         });
1009         var Player = enchant.Class.create(Marisa,{
1010                 initialize: function(x, y){
1011                         // this.runEnterframe = function(){
1012                         // },
1013                         Marisa.call(this, x, y);
1014                         this.classname = "Player";
1015                         ctl.setPlayer(this);
1016                         // this.removeEventListener('enterframe',this.runEnterframe);
1017                         this.addEventListener('enterframe', function(){
1018                                 if(this.age%10 === 0 && this.age !== 0){
1019                                         // console.log("palyer:" + this.age);
1020                                 }
1021                                 this.act();
1022                                 ///////////////////////////////////////////////
1023                                 //Action pattern for debug
1024                                 if(game.input.left){
1025                                         // this.changeFace(EResPath.MARISA_FACE_TIRED);
1026                                         this.moveX(-10);
1027                                         this.direction = EDirection.LEFT;
1028                                 }
1029                                 if(game.input.right){
1030                                         this.moveX(10);
1031                                         this.direction = EDirection.RIGHT;
1032                                 }
1033                                 if(game.input.up){
1034                                         this.moveY(-10);
1035                                         this.tweet("ゆっくりしていってね!");
1036
1037                                 }
1038                                 if(game.input.down){
1039                                         this.moveY(10);
1040                                 }
1041                                 ///////////////////////////////////////////////
1042                                 this.reverse();
1043                                 // if(ctl.backgroundMap.hitTest(this.imgGroup.x, this.imgGroup.y + this.height / 2)){
1044                                 //      console.log("hit:" + this.imgGroup.x + ":" +  (this.imgGroup.y + this.height/2) );
1045                                 // }else{
1046                                 //      console.log("not:" + this.imgGroup.x + ":" +  (this.imgGroup.y + this.image.height/2));
1047                                 // }
1048                                 //- Display the circle of search range.
1049                                 // fieldBg.image.clear();
1050                                 // fieldBg.image.context.beginPath();
1051                                 // fieldBg.image.context.fillStyle = '#ff0000';
1052                                 // fieldBg.image.context.arc(this.imgGroup.x + this.width/2, this.imgGroup.y + this.height/2, this.range, Math.PI * 2, false);
1053                                 // fieldBg.image.context.fill();
1054                         });
1055                 }
1056         });
1057         game.onload = function(){
1058                 def.Food = Food;
1059                 mangTouch = new MangTouch(ctl);
1060                 mangMsg = new MangMsg(ctl);
1061                 ctl.setDefined(def);
1062                 backgroundMap.image = game.assets[EResPath.MAP0];
1063                 backgroundMap.loadData(_mapData);
1064                 backgroundMap.collisionData = _collisionData;
1065
1066                 var menuSurface = new enchant.Surface(EMenuPos.WIDTH, EMenuPos.HEIGHT);
1067                 var fieldSurface = new enchant.Surface(EFieldPos.WIDTH, EFieldPos.HEIGHT);
1068                 var windowSurface = new enchant.Surface(EFieldPos.WIDTH, EFieldPos.HEIGHT);
1069                 fieldBg.image = fieldSurface;
1070                 fieldBg.x = 0;
1071                 fieldBg.y = 0;
1072
1073                 windowFront.image = windowSurface;
1074                 windowFront.x = 0;
1075                 windowFront.y = 0;
1076                 windowFront.opacity = 0.5;
1077
1078                 windowSurface.context.fillStyle = '#000';
1079                 windowSurface.context.fillRect(0 + 20, EFieldPos.HEIGHT - 60, EFieldPos.WIDTH - 40, EFieldPos.HEIGHT);
1080
1081
1082                 menuSurface.context.fillStyle = '#000';
1083                 menuSurface.context.fillRect(0, 0, EMenuPos.WIDTH, EMenuPos.HEIGHT);
1084                 menuBg.image = menuSurface;
1085                 menuBg.x = EMenuPos.X;
1086                 menuBg.y = EMenuPos.Y;
1087                 backgroundMap.addChild(fieldBg);
1088                 mangIcon = new MangIcon(ctl, menuBg);
1089
1090                 game.rootScene.addChild(backgroundMap);
1091                 game.rootScene.addChild(windowFront);
1092                 game.rootScene.addChild(menuBg);
1093
1094                 // var labelGroup = new LabelGroup();
1095                 mangLabel = new MangLabel(ctl, menuBg);
1096                 // var info = new Label("ゆっくり");
1097                 // info.color = "#ffffff";
1098                 // info.font = "14px 'Times New Roman'";
1099                 // info.x = 4;
1100                 // info.y = GAME_HEIGHT / 2;
1101                 // labelGroup.addChild(info);
1102                 // menuBg.addChild(labelGroup);
1103
1104
1105                 // var food = new def.Food("apple", 200, 250);
1106                 backgroundMap.addChild(foodGroup);
1107                 var player = new Player(PALYER_INIT_X, PALYER_INIT_Y);
1108                 new Marisa(PALYER_INIT_X + 200, PALYER_INIT_Y);
1109                 var touchX = 0;
1110
1111                 game.rootScene.addEventListener('touchstart', function (e) {
1112                         game.touched = true;
1113                         var mang = mangTouch.get(ctl.getCurrentCommand());
1114                         mang.touchstart(e);
1115                 });
1116                 game.rootScene.addEventListener('touchmove', function (e) {
1117                         var mang = mangTouch.get(ctl.getCurrentCommand());
1118                         mang.touchmove(e);
1119                 });
1120                 game.rootScene.addEventListener('touchend', function (e) {
1121                         var mang = mangTouch.get(ctl.getCurrentCommand());
1122                         mang.touchend(e);
1123                         game.touched = false;
1124                 });
1125
1126
1127                 game.rootScene.addEventListener('enterframe', function(){
1128                 //main frame
1129                         mangLabel.draw(player);
1130                 });
1131
1132                 this.addEventListener('enterframe', function(){
1133                         //The priority processing of display instead of z-index
1134                         backgroundMap.childNodes.sort(
1135                                 function(a,b){
1136                                         if(typeof a.id === "undefined" && typeof b.id === "undefined"){
1137                                                 return 0;
1138                                         }
1139                                         else if(typeof a.id === "undefined"){
1140                                                 return -1;
1141                                         }
1142                                         else if(typeof b.id === "undefined"){
1143                                                 return 1;
1144                                         }
1145                                         if(a.y < b.y)return -1;
1146                                         if(a.y > b.y)return 1;
1147                                         return 0;
1148                                 }
1149                         );
1150                 });
1151
1152         };
1153         game.start();
1154 };