OSDN Git Service

辛夷祭初日の緊急修正多数。
[h58pcdgame/GameScriptCoreLibrary.git] / www / corelib / classes / CharacterClass.js
1 var CharacterClass = function(ownerStage, args)\r
2 {\r
3         //args[imgAry0, ...]初期状態で描画したい画像のファイル名の配列(アニメーションさせる)を指定\r
4         CharacterClass.base.apply(this, arguments);\r
5         //キャラ独自の機能(たとえば攻撃や相手が当たってきたときのあたり判定など)\r
6                 \r
7         this.interval = 15;\r
8         this.imageState = -1;\r
9         //-1:画像は無効\r
10         // 0:左右歩行中または左右方向に向いて停止中(方向に関係なし。画像はすべて左向きで用意する。)\r
11         // 1:攻撃アニメーション(一周分表示したら0に戻る)\r
12         this.imageIndex = 0;\r
13         this.imageList = [];\r
14         this.lastImage = null;\r
15         //キャラが向いている向き(0:Left,1:Right,[2:Up,3:Down])\r
16         this.direction = 0;\r
17         \r
18         this.isItemCollector = true;\r
19         this.lastFireTick = 0;\r
20         this.fireTickInterval = 60;\r
21         \r
22         for(var k in args){\r
23                 var a = [];\r
24                 for(var f in args[k]){\r
25                         var img = document.createElement('img');\r
26                         img.src = "images/" + args[k][f];\r
27                         a.push(img);\r
28                 }\r
29                 this.imageList.push(a);\r
30         }\r
31         if(this.imageList.length > 0){\r
32                 this.imageState = 0;\r
33         }\r
34         \r
35         //初期画像の設定\r
36         if(this.imageList[0] && this.imageList[0].length > 0){\r
37                 this.lastImage = this.imageList[0][0];\r
38         }\r
39 }.extend(MovableStageObjectClass, {\r
40         className: "CharacterClass",\r
41         draw: function(x, y){\r
42                 MovableStageObjectClass.prototype.draw.apply(this, arguments);\r
43                 if(this.lastImage){\r
44                         //コンテキスト変換行列を保存\r
45                         this.ownerStage.mainContext.save();\r
46                         //コンテキスト変換行列を設定\r
47                         switch(this.direction){\r
48                                 case 1:\r
49                                         //Right\r
50                                         this.ownerStage.mainContext.transform(-1, 0, 0, 1, x + this.size.x, y);\r
51                                         break;\r
52                                 default:\r
53                                         //Left, Up, Down, OtherState\r
54                                         this.ownerStage.mainContext.transform(1, 0, 0, 1, x, y);\r
55                                         break;\r
56                         }\r
57                         //描画\r
58                         this.ownerStage.mainContext.globalAlpha = this.opacity;\r
59                         this.ownerStage.mainContext.drawImage(this.lastImage, 0, 0, this.size.x, this.size.y);\r
60                         this.ownerStage.mainContext.globalAlpha = 1.0;\r
61                         //コンテキスト変換行列を復帰\r
62                         this.ownerStage.mainContext.restore();\r
63                 }\r
64         },\r
65         tick: function(){\r
66                 MovableStageObjectClass.prototype.tick.apply(this, []);\r
67                 \r
68                 if(this.ownerStage.manager.tickCount % this.interval == 0){\r
69                         //インターバル時刻になった\r
70                         if(this.imageState != -1){\r
71                                 if(this.imageList[this.imageState]){\r
72                                         if(this.imageList[this.imageState].length > 0){\r
73                                                 if(this.imageIndex >= this.imageList[this.imageState].length){\r
74                                                         this.imageIndex = 0;\r
75                                                         if(this.imageState == 1){\r
76                                                                 this.imageState = 0;\r
77                                                         }\r
78                                                 }\r
79                                                 this.lastImage = this.imageList[this.imageState][this.imageIndex];\r
80                                                 if(!(this.imageState == 0 && this.movingSpeed.x == 0)){\r
81                                                         //imageState:0の時にspeed == 0のときは画像をアニメしない。それ以外の時はインデックスを進める。\r
82                                                         this.imageIndex ++;\r
83                                                 }\r
84                                         } else{\r
85                                                 this.lastImage = null;\r
86                                         }\r
87                                 } else{\r
88                                         this.lastImage = null;\r
89                                 }\r
90                         } else{\r
91                                 this.lastImage = null;\r
92                         }\r
93                 }\r
94                 if(this.movingSpeed.x < 0){\r
95                         this.direction = 0;\r
96                 } else if(this.movingSpeed.x > 0){\r
97                         this.direction = 1;\r
98                 }\r
99         },\r
100         fire: function()\r
101         {\r
102                 if(this.lastFireTick < this.ownerStage.manager.tickCount - this.fireTickInterval){\r
103                         var f = new FireObjectClass(this.ownerStage, [["breadball1.png","breadball2.png","breadball3.png"]]);\r
104                         if(this.ownerStage.manager.breadItemWidget)\r
105                         {\r
106                                 var score = this.ownerStage.manager.breadItemWidget.getLastSelectedBreadIndex();\r
107                                 if(score != -1)\r
108                                 {\r
109                                         if(score > 50) score = 50;\r
110                                         this.touchDamage *= (score / 50);\r
111                                         f.fire(this);\r
112                                         this.lastFireTick = this.ownerStage.manager.tickCount;\r
113                                 }else\r
114                                 {\r
115                                         showAlert(this.ownerStage.manager, "武器が選択されていません");\r
116                                 }\r
117                         }\r
118                 }\r
119         }\r
120         \r
121 });\r
122 \r