View difference between Paste ID: eM2tvdaG and L8Aw0WYm
SHOW: | | - or go back to the newest paste.
1
/**
2
 * create a new snowball
3
 *
4
 * @param x - int
5
 * @param y - int
6
 */
7
xmas.Entity.Image.Snowball = function(x, y) {
8
    
9
    this.src          = 'snowball';
10
    
11
    // setting an offset to the image to have the ball spawn in the middle of the mouse click
12
    this.offsetX      = 0;
13
    this.offsetY      = 0;
14
    
15
    // use radius to check for collision later
16
    this.r            = 0;
17
    
18
    // actual draw points - should include some kind of offset calculation
19
    this.drawX        = 0;
20
    this.drawY        = 0;
21
    
22
    this.scaleX       = 1;
23
    this.scaleY       = 1;
24
    
25
    this.z            = 0;
26
    this.vx           = 0;
27
    this.vy           = 3;
28-
    this.vz           = 5;
28+
    this.vz           = 1;
29
    
30
    this.gravity      = - 0.097;
31
    
32
    this._constructor(this.src, x, y, 1);
33
    
34
    this.update = function() {
35
      
36
      this.x  += this.vx;
37
      this.y  += this.vy;
38
      this.z  += this.vz;
39
      
40
      this.vy -= this.gravity;
41
    
42
      // need to check if on the ground later
43
      // todo
44
      
45
      // did I hit something somewhere "back" in the environment..?
46
      // todo
47
      // this.r   = ?
48
    
49
//      this.vx *= 0.99;
50
//      this.vy *= 0.99;
51
//      this.vz *= 0.99;
52
53
    };
54
    
55
    
56
    this.onImgLoaded = function() {
57
      this.img.inViewport   = true;
58
      this.img.widthScaled  = this.img.width;
59
      this.img.heightScaled = this.img.height;
60
      
61
      // set radius for later collision detection because the image is a ball :)
62
      this.r                =   this.img.widthScaled/2;
63
      
64
      // update coords for the offset to have the ball spawn at the center of the mouse position
65
      this.offsetX          = - this.img.widthScaled/2;
66
      this.offsetY          = - this.img.heightScaled/2;
67
      this.x               +=   this.offsetX;
68
      this.y               +=   this.offsetY;
69
    };
70
    
71
    this.debug = function() {
72
      console.log("coord", this.x, this.y, this.z);
73
      console.log("pos  ", this.drawX, this.drawY);
74
      console.log("scale", this.scaleX, this.scaleY);
75
      console.log("imgO ", this.img.width, this.img.height)
76
      console.log("img  ", this.img.widthScaled, this.img.heightScaled);
77
      console.log("---------------------------------");
78
    };
79
    
80
    /**
81
     * renders the image
82
     */
83
    this.render = function() {
84
      if(this.isVisible() && this.img.isLoaded && this.img.inViewport) {
85
86
        
87
        this.drawX  = this.x / this.z;
88
        this.drawY  = this.y / this.z;
89
        // using this instead will simply drop the ball 
90
        //this.drawX  = this.x;
91
        //this.drawY  = this.y;
92
        
93
        // scaleX and scaleY becoming *very* low - about 10^(-100) - so no scaling is happening
94
        this.scaleX = this.scaleX / this.z;
95
        this.scaleY = this.scaleY / this.z;
96
        
97-
        this.img.widthScaled  = this.img.width - this.img.width * this.scaleX;
97+
        this.img.widthScaled  = this.img.width * this.scaleX;
98-
        this.img.heightScaled = this.img.width - this.img.width * this.scaleY;
98+
        this.img.heightScaled = this.img.width * this.scaleY;
99
100
        //this.debug();
101
102
//        xmas.Draw.image(this.img, this.drawX, this.drawY, this.img.widthScaled, this.img.heightScaled);
103
104
        xmas.ctxPreRender.drawImage(this.img, this.drawX, this.drawY, this.img.widthScaled, this.img.heightScaled);
105
106
      }
107
    };    
108
        
109
    
110
}
111
112
113
114
/**
115
 * create a new image
116
 * 
117
 * @param src - string
118
 * @param x - int
119
 * @param y - int
120
 * @param opacity - float
121
 */
122
xmas.Entity.Image = function(src, x, y, opacity) {
123
  
124
    this.type         = 'image';   
125
    this.group        = null;
126
    this.isLoaded     = false;
127
    this.img          = null;
128
    
129
    var self          = this;
130
    
131
    this._constructor  = function(src, x, y, opacity) {
132
      
133
      this.x            = x;              // the x coordinate
134
      this.y            = y;              // the y coordinate
135
      this.opacity      = opacity || 1;   // initial opacity; the dot will fade out
136
      // create image
137
      this.img          = new Image();
138
      this.img.opacity  = this.opacity;
139
      
140
      this.loadImage(src);
141
      
142
    };
143
    
144
    this.setOpacity  = function(opacity) {
145
      this.opacity     = opacity;
146
      this.img.opacity = opacity;
147
    };
148
    
149
    /**
150
     * loads an image
151
     *
152
     * @param src - string
153
     */
154
    this.loadImage = function(src) {
155
      
156
      var self            = this;
157
      this.img.isLoaded   = false;
158
      this.img.inViewport = false;
159
      
160
      this.img.onload   = function() {
161
        this.isLoaded   = true;
162
        this.calculateCenter();
163
        self.isLoaded   = true;
164
        self.onImgLoaded();
165
      }
166
      
167
      var source        = xmas.Resources.get(this.type, src);
168
      
169
      if(source) {
170
        this.img.src      = source;
171
      }
172
    };
173
    
174
    this.init   = function() {
175
      // nothing to do here
176
    };
177
178
    this.update = function() {
179
      // nothing to do here
180
    };
181
    
182
    this.onImgLoaded = function() {
183
      // do when image is loaded, nothing to do here
184
    }
185
186
    /**
187
     * when changing condition
188
     */
189
    this.onChangeCondition = function() {
190
      this.setImageSpriteByCondition(this.getCondition());
191
    }; 
192
193
    /**
194
     * set the image sprite by status, assuming all sprites have equal withs
195
     * and are set in one row
196
     * 
197
     * sx = 0      sx = w      sx = w*2    sx = w*3
198
     * |-----------|-----------|-----------|-----------|
199
     * |  Default  |   Hover   |  Active   | InActive  |
200
     * |-----------|-----------|-----------|-----------|
201
     * 
202
     * @param condition - int
203
     */
204
    this.setImageSpriteByCondition = function(condition) {
205
      if(this.img && this.img.isLoaded) {
206
        
207
        this.sy = 0;
208
        this.sw = this.w;
209
        this.sh = this.h;
210
211
        switch(condition) {
212
          case xmas.Entity.CONDITION._default: 
213
            this.sx = 0;
214
          break;
215
          case xmas.Entity.CONDITION._hover: 
216
            this.sx = this.w;
217
          break;
218
          case xmas.Entity.CONDITION._active: 
219
            this.sx = this.w * 2;
220
          break;
221
          case xmas.Entity.CONDITION._inactive: 
222
            this.sx = this.w * 3;
223
          break;
224
        }
225
226
      }
227
    };  
228
229
    /**
230
     * renders the image
231
     * @param dw - int new width (optional)
232
     * @param dh - int new height (optional)
233
     */
234
    this.render = function(dw, dh) {
235
      if(this.isVisible() && this.img.isLoaded && this.img.inViewport) {
236
        xmas.Draw.image(this.img, this.x, this.y, dw, dh);
237
      }
238
    };
239
240
    this._constructor(src, x, y, opacity);
241
242
}
243
244
245
// inheritance
246
xmas.Entity.Image.prototype   = new xmas.Entity();
247
xmas.Entity.Image.constructor = xmas.Entity.Image;
248
xmas.Entity.Image.Snowball.prototype   = new xmas.Entity.Image();
249
xmas.Entity.Image.Snowball.constructor = xmas.Entity.Image.Snowball;