OSDN Git Service

update
[yukkurioverwint/YukkuriOverwinter.git] / lib / FormSprite.js
1 var FormSprite = enchant.Class.create({
2         initialize: function (){
3                 this.spriteArray = [];
4                 this.formSpriteArray = [];
5                 this.id = guid();
6                 this.mainIndex = 0;
7                 this.shadowIndex = 0;
8         },
9         addChild:function(sprite, index, attr){
10                 this.add(sprite, index, attr);
11                 sprite.baseX = sprite.x;
12                 sprite.baseY = sprite.y;
13                 sprite.anim = new Animation(sprite);
14                 sprite.id = guid();
15                 App.backgroundMap.addChild(sprite);
16         },
17         addYukkuri: function(formSprite){
18                 var addIndex = function (){
19                         var i = 0;
20                         return function(){
21                                 return i++;
22                         };
23                 }();
24                 var index = addIndex();
25                 this.formSpriteArray[index] = formSprite;
26         },
27         // addChildAll:function(){
28         //      for(var i=0;i<this.spriteArray.length;i++){
29         //              if(this.spriteArray[i] === undefined)continue;
30         //              this.spriteArray[i].baseX = this.spriteArray[i].x;
31         //              this.spriteArray[i].baseY = this.spriteArray[i].y;
32         //              this.spriteArray[i].anim = new Animation(this.spriteArray[i]);
33         //              this.spriteArray[i].id = guid();
34         //              App.backgroundMap.addChild(this.spriteArray[i]);
35         //      }
36         // },
37         /**
38         attr: 
39                 mainIndexFlg:true/false
40                 shadowIndexFlg:true/false
41                 type:body/tweet
42
43         */
44         add : function(sprite, index, attr){
45                 if(attr === undefined)attr = {};
46                 this.spriteArray[index] = sprite;
47                 this.spriteArray[index].type = attr.type;
48                 this.spriteArray[index].scaleValue = attr.scaleValue;
49                 this.spriteArray[index].spname = attr.spname;
50                 if(attr.mainIndexFlg){
51                         this.mainIndex = index;
52                 }
53                 if(attr.shadowIndexFlg){
54                         this.shadowIndex = index;
55                 }
56                 // this.spriteArray.push(sprite);
57         },
58         remove: function (sprite){
59                 this.spriteArray.remove(sprite);
60         },
61         addX: function(x){
62                 for(var i=0;i<this.spriteArray.length;i++){
63                         if(this.spriteArray[i] === undefined)continue;
64                         var spr = this.spriteArray[i];
65                         spr.x += x;
66                 }
67         },
68         addY: function(y){
69                 for(var i=0;i<this.spriteArray.length;i++){
70                         if(this.spriteArray[i] === undefined)continue;
71                         var spr = this.spriteArray[i];
72                         spr.y += y;
73                 }
74         },
75         /**
76         x
77         attr: targetTypes 許可するtypeを配列で指定する
78         */
79         addXAttr: function(x, attr){
80                 for(var i=0;i<this.spriteArray.length;i++){
81                         if(this.spriteArray[i] === undefined)continue;
82                         var spr = this.spriteArray[i];
83                         if(!attr || attr.targetTypes.indexOf(spr.type) >= 0){
84                                 spr.x += x;
85                         }
86                 }
87         },
88         addYAttr: function(y, attr){
89                 for(var i=0;i<this.spriteArray.length;i++){
90                         if(this.spriteArray[i] === undefined)continue;
91                         var spr = this.spriteArray[i];
92                         if(!attr || attr.targetTypes.indexOf(spr.type) >= 0){
93                                 spr.y += y;
94                         }
95                 }
96         },
97         setXAttr: function(x, attr){
98                 for(var i=0;i<this.spriteArray.length;i++){
99                         if(this.spriteArray[i] === undefined)continue;
100                         var spr = this.spriteArray[i];
101                         if(!attr || attr.targetTypes.indexOf(spr.type) >= 0){
102                                 spr.x = x;
103                         }
104                 }
105         },
106         setYAttr: function(y, attr){
107                 for(var i=0;i<this.spriteArray.length;i++){
108                         if(this.spriteArray[i] === undefined)continue;
109                         var spr = this.spriteArray[i];
110                         if(!attr || attr.targetTypes.indexOf(spr.type) >= 0){
111                                 spr.y = y;
112                         }
113                 }
114         },
115         calcField: function(field, value, attr){
116                 for(var i=0;i<this.spriteArray.length;i++){
117                         if(this.spriteArray[i] === undefined)continue;
118                         var spr = this.spriteArray[i];
119                         if(!attr || attr.types.indexOf(spr.type) >= 0){
120                                 if(attr.calc == "equal"){
121                                         spr[field] = value;
122                                 }
123                                 else if(attr.calc == "add"){
124                                         spr[field] -= value;
125                                 }
126                                 else{
127                                         spr[field] = value;
128                                 }
129                         }
130                 }
131         },
132         getMainSprite: function(){
133                 return this.spriteArray[this.mainIndex];
134         },
135         getShadowSprite: function(){
136                 return this.spriteArray[this.shadowIndex];
137         },
138         getMainShadowMarginY: function(){
139                 if(!this.getShadowSprite())return 0;
140                 return Math.round(this.getMainSprite().y - this.getShadowSprite().y);
141         },
142         getX: function(){
143                 return Math.round(this.spriteArray[this.mainIndex].x,2) - this.spriteArray[this.mainIndex].baseX;
144         },
145         getY: function(){
146                 return Math.round(this.spriteArray[this.mainIndex].y,2) - this.spriteArray[this.mainIndex].baseY;
147         },
148         setX: function(x){
149                 for(var i=0;i<this.spriteArray.length;i++){
150                         if(this.spriteArray[i] === undefined)continue;
151                         var spr = this.spriteArray[i];
152                         spr.x = x + spr.baseX;
153                 }
154         },
155         setY: function(y){
156                 for(var i=0;i<this.spriteArray.length;i++){
157                         if(this.spriteArray[i] === undefined)continue;
158                         var spr = this.spriteArray[i];
159                         spr.y = y + spr.baseY;
160                 }
161         },
162         addBodyY: function(y){
163                 for(var i=0;i<this.spriteArray.length;i++){
164                         if(this.spriteArray[i] === undefined)continue;
165                         var spr = this.spriteArray[i];
166                         if(spr.type == "body" || spr.type == "budge"){
167                                 this.spriteArray[i].y += y;
168                         }
169                 }
170         },
171         setFixBudgeLeft: function (index){
172                 this.spriteArray[index].x = this.spriteArray[this.mainIndex].x + this.spriteArray[this.mainIndex].width / 3 * 2;
173                 this.spriteArray[index].scaleX = 1;
174         },
175         setFixBudgeRight: function (index){
176                 this.spriteArray[index].x = this.spriteArray[this.mainIndex].x;
177         },
178         setFixKukiLeft: function (){
179                 this.calcField("x", this.getMainSprite().x - 30, {types:["kuki"],calc:"equal"});
180         },
181         setFixKukiRight: function (){
182                 this.calcField("x", this.getMainSprite().x + 30, {types:["kuki"],calc:"equal"});
183         },
184         formScaleX: function(x){
185                 for(var i=0;i<this.spriteArray.length;i++){
186                         if(this.spriteArray[i] === undefined)continue;
187                         var spr = this.spriteArray[i];
188                         if(spr.type == "tweet")continue;
189                         spr.scaleX = x;
190                 }
191         },
192         formScaleY: function(y){
193                 for(var i=0;i<this.spriteArray.length;i++){
194                         if(this.spriteArray[i] === undefined)continue;
195                         var spr = this.spriteArray[i];
196                         if(spr.type == "tweet")continue;
197                         spr.scaleY = y;
198                 }
199         },
200         // tlTween:function(params){
201         //      console.log("tlTween");
202         //      for(var i=0;i<this.spriteArray.length;i++){
203         //              var spr = this.spriteArray[i];
204         //              spr.tl.tween(params);
205         //      }
206         // },
207         tlMoveBy:function(x, y, time, eventFunctions){
208                 var self = this;
209                 for(var i=0;i<this.spriteArray.length;i++){
210                         if(this.spriteArray[i] === undefined)continue;
211                         var spr = this.spriteArray[i];
212                         if(spr.type == "tweet")continue;
213
214                         var addX = x;
215                         var addY = y;
216                         var params = {
217                                 x: this.paramX(spr.x, addX),
218                                 y: this.paramY(spr.y, addY),
219                                 time: time,
220                                 easing: enchant.Easing.SIN_EASEINOUT
221                         };
222                         if(eventFunctions !== undefined && i == this.mainIndex){
223                                 for(var key in eventFunctions){
224                                         params[key] = eventFunctions[key];
225                                 }
226                         }
227                         spr.tl.tween(params);
228                 }
229         },
230         paramX : function(x, addX){
231                 return x  + addX;
232         },
233         paramY : function(y, addY){
234                 return y + addY;
235         },
236         tlMoveTo:function(x, y, time, easing ){
237                 for(var i=0;i<this.spriteArray.length;i++){
238                         if(this.spriteArray[i] === undefined)continue;
239                         var spr = this.spriteArray[i];
240                         spr.tl.moveTo(x, y, time, easing);
241                 }
242         },
243         tlQueueLength:function(){
244                 return this.spriteArray[this.mainIndex].tl.queue.length;
245         },
246         formRunAnimation: function(){
247                 //影とボディの差異が強くなったら修正する
248                 if(this.getMainShadowMarginY() < -8)this.addBodyY(+1);
249                 else if(this.getMainShadowMarginY() > 0)this.addBodyY(-1);
250                 
251                 for(var i=0;i<this.spriteArray.length;i++){
252                         if(this.spriteArray[i] === undefined)continue;
253                         var spr = this.spriteArray[i];
254                         if(spr.type == "body" 
255                                 || spr.type == "budge"
256                                 || spr.type == "kuki"
257                                 ){
258                                 spr.anim.runAnim();
259                         }
260                 }
261         },
262         formStartAnimation: function(){
263                 for(var i=0;i<this.spriteArray.length;i++){
264                         if(this.spriteArray[i] === undefined)continue;
265                         var spr = this.spriteArray[i];
266                         if(spr.type == "body" || spr.type == "budge" || spr.type == "kuki"){
267                                 spr.anim.startAnim();
268                         }
269                 }
270         },
271         formStopAnimation: function(){
272                 for(var i=0;i<this.spriteArray.length;i++){
273                         if(this.spriteArray[i] === undefined)continue;
274                         var spr = this.spriteArray[i];
275                         if(spr.type == "body" || spr.type == "budge" || spr.type == "kuki"){
276                                 spr.anim.stopAnim();
277                         }
278                 }
279         },
280         scale: function(_scaleX,_scaleY){
281                 for(var i=0;i<this.spriteArray.length;i++){
282                         if(this.spriteArray[i] === undefined)continue;
283                         var spr = this.spriteArray[i];
284                         if(spr.type == "tweet")continue;
285                         spr.scale(_scaleX, _scaleY);
286                 }
287         },
288 });