EVR.include("animation/ending/family/Member.js");
EVR.Animation.Ending.Family = function(ending)
{
   this.ending = ending;
   this.tombstone = ending.tombstone;
   this.container = ending.container;
   this.add_members();
}
EVR.Animation.Ending.Family.prototype.add_members = function()
{
   var attributes = FAMILY_ATTRIBUTES;
   var members = [];
   for (var ii = 0; ii < attributes.length; ii++)
   {
      members.push(
	 new EVR.Animation.Ending.Family.Member(this, attributes[ii]));
   }
   this.members = members;
}
EVR.Animation.Ending.Family.prototype.append = function()
{
   this.apply_to_members("append");
}
EVR.Animation.Ending.Family.prototype.apply_to_members = function(method)
{
   var member, members = this.members;
   var args = Array.prototype.slice.call(arguments);
   for (var ii = 0; ii < members.length; ii++)
   {
      member = members[ii];
      member[method].apply(member, args.slice(1));
   }
}
EVR.Animation.Ending.Family.prototype.play = function(name, delay)
{
   this.apply_to_members("play", name, delay);
}
EVR.Animation.Ending.Family.prototype.stop = function()
{
   this.apply_to_members("stop");
}
EVR.Animation.Ending.Family.prototype.reset = function()
{
   this.apply_to_members("reset");
}
EVR.Animation.Ending.Family.prototype.draw = function()
{
   this.apply_to_members("draw");
}
EVR.Animation.Ending.Family.prototype.remove = function()
{
   this.apply_to_members("remove");
}
EVR.Animation.Ending.Family.prototype.toString = function()
{
   return "[object EVR.Animation.Ending.Family]";
}
EVR.Animation.Ending.Family.Member = function(family, attributes)
{
   EVR.Animation.call(this, FAMILY_FRAME_RATE);
   this.attributes = attributes;
   this.step = FAMILY_STEP;
   this.jump_step = FAMILY_JUMP_STEP;
   this.shifted = false;
   this.avatar = new EVR.Emoticon(family.container, family.tombstone);
   this.set_attributes();
   this.remove();
}
EVR.Animation.Ending.Family.Member.prototype = new EVR.Animation;
EVR.Animation.Ending.Family.Member.prototype.set_attributes = function()
{
   var attributes = this.attributes;
   var size = attributes[0];
   var offset = attributes[1];
   var color = attributes[2];
   var avatar = this.avatar;
   avatar.set_proportions(1, size);
   avatar.place(offset, 0);
   avatar.set_color(color);
}
EVR.Animation.Ending.Family.Member.prototype.remove = function()
{
   this.avatar.remove();
}
EVR.Animation.Ending.Family.Member.prototype.append = function()
{
   this.avatar.append();
}
EVR.Animation.Ending.Family.Member.prototype.sequence = function()
{
   var avatar = this.avatar;
   if (this.shifted)
   {
      avatar.move(-this.step);
      this.shifted = false;
   }
   if (Math.random() < FAMILY_SHIFT_PROBABILITY)
   {
      avatar.move(this.step);
      this.shifted = true;
   }
}
EVR.Animation.Ending.Family.Member.prototype.jump = function()
{
   var avatar = this.avatar;
   var returned = false;
   if (this.jumped)
   {
      avatar.move(null, -this.jump_step);
      this.jumped = false;
      returned = true;
   }
   if (!returned && Math.random() < FAMILY_JUMP_PROBABILITY)
   {
      avatar.move(null, this.jump_step);
      this.jumped = true;
   }
}
EVR.Animation.Ending.Family.Member.prototype.reset = function()
{
   var avatar = this.avatar;
   if (this.jumped)
   {
      avatar.move(null, -this.jump_step);
      this.jumped = false;
   }
   if (this.shifted)
   {
      avatar.move(-this.step);
      this.shifted = false;
   }
}   
EVR.Animation.Ending.Family.Member.prototype.draw = function()
{
   this.avatar.draw();
}
EVR.Animation.Ending.Family.Member.prototype.toString = function()
{
   return "[object EVR.Animation.Ending.Family.Member]";
}
EVR.include("animation/ending/corpse/Soul.js");
EVR.Animation.Ending.Corpse = function(ending)
{
   EVR.Animation.call(this, CORPSE_FRAME_RATE);
   this.ending = ending;
   this.container = ending.container;
   this.add_children();
   this.set_attributes();
   this.place_offscreen();
}
EVR.Animation.Ending.Corpse.prototype = new EVR.Animation;
EVR.Animation.Ending.Corpse.prototype.add_children = function()
{
   this.soul = new EVR.Animation.Ending.Corpse.Soul(this);
   this.add_avatar();
}
EVR.Animation.Ending.Corpse.prototype.add_avatar = function()
{
   var ending = this.ending;
   var avatar = new EVR.Emoticon(ending.container, ending.tombstone, ALIGN_TOP);
//    avatar.ratio_type = RATIO_WIDTH;
   avatar.remove();
   this.avatar = avatar;
}
EVR.Animation.Ending.Corpse.prototype.set_attributes = function()
{
   var avatar = this.avatar;
   avatar.set_proportions(1, CORPSE_HEIGHT);
   avatar.set_z(CORPSE_Z_INDEX);
}
EVR.Animation.Ending.Corpse.prototype.reset = function()
{
   var avatar = this.avatar;
   avatar.set_proportions(1, CORPSE_HEIGHT);
   avatar.set_z(CORPSE_Z_INDEX);
   this.place_offscreen();
   this.soul.reset();
}
EVR.Animation.Ending.Corpse.prototype.place_offscreen = function()
{
   this.avatar.place(0, .1);
}
EVR.Animation.Ending.Corpse.prototype.append = function()
{
   this.avatar.append();
   this.soul.append();
}
EVR.Animation.Ending.Corpse.prototype.sequence = function()
{
   var avatar = this.avatar;
   avatar.move(null, CORPSE_STEP);
   var y = avatar.get_coordinates(true)[1] + avatar.get_dimensions(true)[1];
   if (y < 0)
   {
      this.stop();
      avatar.set_z(CORPSE_ZOOM_Z_INDEX);
      this.play("zoom", CORPSE_ZOOM_DELAY);
   }
}
EVR.Animation.Ending.Corpse.prototype.zoom = function()
{
   var avatar = this.avatar;
   avatar.grow(avatar.get_dimensions(true)[1] * CORPSE_ZOOM_RATE);
   var coordinates = avatar.get_coordinates(true);
   var size = avatar.get_dimensions(true);
   if (size[1] > .8 && !this.soul.playing)
   {
      this.soul.play();
   }
   if (size[1] > 1000)
   {
      this.stop();
   }
   var eye_offset = CORPSE_EYE_OFFSET;
   var offset = [size[0] * eye_offset[0], size[1] * eye_offset[1]];
   var eye_coordinates = 
      [coordinates[0] + offset[0], coordinates[1] + offset[1]];
   var endpoint = CORPSE_ZOOM_ENDPOINT;
   var step = CORPSE_ZOOM_STEP;
   var x = (endpoint[0] - eye_coordinates[0]) * step;
   var y = (endpoint[1] - eye_coordinates[1]) * step;
   avatar.move(x, y);
}
EVR.Animation.Ending.Corpse.prototype.draw = function()
{
   this.avatar.draw();
   this.soul.draw();
}
EVR.Animation.Ending.Corpse.prototype.remove = function()
{
   this.avatar.remove();
   this.soul.remove();
}
EVR.Animation.Ending.Corpse.prototype.toString = function()
{
   return "[object EVR.Animation.Ending.Corpse]";
}
3.235.65.220
3.235.65.220
3.235.65.220
 
June 7, 2018