01647

ustreamer-01647

スキルポイントとレベル

f:id:paulga:20140325194955p:plain

TotalSkillPointというクラスを作った.Skill#changeLevel()の終わり際で使用する.今日のキーワードはparseIntとfall throughだった.

// レベルポイントガイド
var spent = tspoint.get();
$("#tspointmarkbox>span.mark").html(tspoint.getMark(spent));
$("input#levelpoint").val(tspoint.getText(spent));
<input type="text" id="levelpoint" />
<input type="button" value="リセット" id="reset"/>
<div id="tspointmarkbox">SP: <span class="mark"></span></div>
/**
 * 総合スキルポイント
 * @returns {TotalSkillPoint}
 */
function TotalSkillPoint() {
}

TotalSkillPoint.prototype = {
	/**
	 * 消費したスキルポイント
	 * @returns {Number}
	 */
	get: function() {
		var totalspent = 0;
		for (var i in skills) {
			// level0なら消費スキルポイントなし.次へ
			if (skills[i].level === 0) {
				continue;
			}

			switch (skills[i].level) {
				// fall through
				case 3:
					totalspent += skills[i].level3;
				case 2:
					totalspent += skills[i].level2;
				case 1:
					totalspent += skills[i].level1;
			}
		}
		return totalspent;
	},
	/**
	 * 消費スキルポイントマーク
	 * @param {Number} point 消費したスキルポイント
	 * @returns {String}
	 */
	getMark: function(point) {
		var mark = "";
		if (point === undefined)
			point = this.get();
		var i;
		if (point > SKILLPOINT_LIMIT)
		{
			// 消費スキルポイントが取得上限より大きい場合
			for (i = 0; i < SKILLPOINT_LIMIT; i++) {
				mark += SKILLPOINT_MARKED;
			}
			mark += '<span class="overlimit">';
			for (; i < point; i++) {
				mark += SKILLPOINT_MARKED;
			}
			mark += "</span>";
		} else {
			// 消費スキルポイントが取得上限以内の場合
			for (i = 0; i < point; i++) {
				mark += SKILLPOINT_MARKED;
			}
			for (; i < 40; i++) {
				mark += SKILLPOINT_MARK;
			}
		}
		return mark;
	},
	/**
	 * レベルポイントガイドテキスト
	 * Lv. -- rest 40 Max. 40
	 * @param {type} point 消費したスキルポイント
	 * @returns {String}
	 */
	getText: function(point) {
		if (point === undefined)
			point = this.get();

		var levelguide = "Lv. 0";
		var rest = SKILLPOINT_LIMIT - point;
		if (point > SKILLPOINT_LIMIT) {
			levelguide = "Lv. --";
			$("input#levelpoint").addClass("overlimit");
		} else if (point > 10) {
			levelguide = "Lv. " + (SKILLPOINT_LIMIT - rest - 5);
			$("input#levelpoint").removeClass("overlimit");
		} else if (point > 0) {
			levelguide = "Lv. " + Math.ceil((SKILLPOINT_LIMIT - rest) / 2);
			$("input#levelpoint").removeClass("overlimit");
		}
		return levelguide + " rest " + rest + " Max. " + SKILLPOINT_LIMIT;
	}
};