You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

261 lines
6.5 KiB
JavaScript

// stores the currently selected element for each trait
var currentTraits = {might: 0, speed: 0, sanity: 0, knowledge: 0};
// list of all available characters and their information
var characters;
// the currently selected character
var curCharacter;
$(window).load(initContent);
function initContent()
{
$.getJSON('getCharacters.php', function(data)
{
characters = data.person;
var i;
var currentPerson;
var len = characters.length;
var selector= $("#characterSelector");
selector.append("<option class='specialOp' value='-1'>CHOOSE A CHARACTER</option>");
for(i = 0; i<len; i++)
{
currentPerson = characters[i];
selector.append("<option class='specialOp' value='" + i + "'>" + currentPerson.name + "</option>");
}
// reset select width
//selector.width($(".selectContainer").width());
selector.change(function()
{
localStorage.removeItem('characterIndex');
localStorage.removeItem('currentTraitValues');
loadCharacter();
});
// setup animation event triggers for our handles
$('.handle').each(function(index)
{
$(this).bind('webkitTransitionEnd', handleAnimationComplete);
$(this).bind('transitionend', handleAnimationComplete);
$(this).bind('oTransitionEnd', handleAnimationComplete);
});
// retrieve/reset any previous character information
// (used when a web app reloads automatically when opening)
if(localStorage.characterIndex)
{
selector.val( localStorage.characterIndex ).attr('selected',true);
loadCharacter();
}
// reset center positions for each trait if the window is resized
// and also re-center all handles
window.onresize = function(event)
{
setupTraitClicks();
//re-center handles
centerAllHandles();
}
});
}
function postCharacterLoadInit()
{
setupTraitClicks();
// initialize the default traits as selected
$('#default.trait').each(function(index)
{
var parentID = $(this).parent().attr('id');
currentTraits[parentID] = this;
$(this).click();
});
centerAllHandles();
}
function loadCharacter()
{
// clear the defaults from the last character
$('.trait').each(function(index)
{
$(this).removeAttr("id");
});
var index = $("#characterSelector option:selected").val();
curCharacter = characters[index];
// change character image
var charHead = $("#characterHeadshot");
charHead.attr("src", curCharacter.image);
// change character title
var charName = $("#characterTitle");
charName.html(curCharacter.name);
// reset select width
//$("#characterSelector").width($(".selectContainer").width());
// set default values for each trait category
// might
var defaultSelector = '#might >.trait:nth-child('+ (eval(curCharacter.might.default) + 1) + ')';
$(defaultSelector).attr('id', 'default');
// speed
defaultSelector = '#speed >.trait:nth-child('+ (eval(curCharacter.speed.default) + 1) + ')';
$(defaultSelector).attr('id', 'default');
// sanity
defaultSelector = '#sanity >.trait:nth-child('+ (eval(curCharacter.sanity.default) + 1) + ')';
$(defaultSelector).attr('id', 'default');
// knowledge
defaultSelector = '#knowledge >.trait:nth-child('+ (eval(curCharacter.knowledge.default) + 1) + ')';
$(defaultSelector).attr('id', 'default');
//change all trait values
// might
$('#might >.trait').each(function(index)
{
$(this).html(curCharacter.might.value[index]);
});
// speed
$('#speed >.trait').each(function(index)
{
$(this).html(curCharacter.speed.value[index]);
});
// sanity
$('#sanity >.trait').each(function(index)
{
$(this).html(curCharacter.sanity.value[index]);
});
// knowledge
$('#knowledge >.trait').each(function(index)
{
$(this).html(curCharacter.knowledge.value[index]);
});
setupTraitClicks();
// if we have previously stored values, select those
if(localStorage.currentTraitValues)
{
var parsedOb = JSON.parse(localStorage.currentTraitValues)
for(var key in parsedOb)
{
$('#' + key +' >.trait:nth-child('+ (eval(parsedOb[key]) + 1) + ')').click();
}
}
else
{
// otherwise, initialize the default traits as selected
$('#default.trait').each(function(index)
{
$(this).click();
});
}
centerAllHandles();
}
function setupTraitClicks()
{
$('.trait').each(function(index)
{
calculateCenter(this);
$(this).click(function()
{
var parentID = $(this).parent().attr('id');
var curTrait = currentTraits[parentID];
if(curTrait != this)
{
$(curTrait).removeClass("selected");
currentTraits[parentID] = this;
}
// save the new values to localStorage
localStorage.setItem('characterIndex', $("#characterSelector option:selected").val());
// store only the indices of our currentTraits
var storedTraits = {might: $('#might >.trait').index(currentTraits["might"]),
speed: $('#speed >.trait').index(currentTraits["speed"]),
sanity: $('#sanity >.trait').index(currentTraits["sanity"]),
knowledge: $('#knowledge >.trait').index(currentTraits["knowledge"])};
localStorage.setItem('currentTraitValues', JSON.stringify(storedTraits));
centerParentHandle(this);
});
});
}
function handleAnimationComplete(event)
{
$(event.target).css('visibility', 'visible');
$(currentTraits[$(event.target).attr('id')]).addClass("selected");
}
function centerAllHandles()
{
$('.trait.selected').each(function()
{
centerParentHandle(this);
});
}
function centerParentHandle(element)
{
element.handle.css('left', element.position.left);
element.handle.css('top', element.position.top);
}
function calculateCenter(element)
{
var parentID = $(element).parent().attr('id');
var handleSelector = "#"+parentID+".handle";
var handle = $(handleSelector);
var t_offset = $(element).offset();
var wDiff = ((handle.width()-$(element).width())/2) - 1;
var hDiff = ((handle.height()-$(element).height())/2) - 3;
element.position = { left: t_offset.left-wDiff, top: t_offset.top-hDiff };
element.handle = handle;
}