1
0
Fork 0
spacetac/src/scripts/game/LootTemplate.ts

88 lines
2.4 KiB
TypeScript

module SpaceTac.Game {
"use strict";
// Range of values
export class Range {
// Minimal value
private min: number;
// Maximal value
private max: number;
// Create a range of values
constructor(min: number, max: number) {
this.min = min;
this.max = max;
}
// Get a proportional value (give 0.0-1.0 value to obtain a value in range)
getProportional(cursor: number) :number {
return (this.max - this.min) * cursor + this.min;
}
}
// Template used to generate a loot equipment
export class LootTemplate {
// Type of slot this equipment will fit in
slot: SlotType;
// Base name, lower cased
name: string;
// Ability requirement ranges
// Targetting flags
// Distance to target
distance: Range;
// Effect area's radius
blast: Range;
// Duration
duration: Range;
// Effects
// Action Points usage
ap_usage: Range;
// Level requirement
min_level: Range;
// Create a loot template
constructor(slot: SlotType, name: string) {
this.slot = slot;
this.name = name;
this.distance = new Range(0, 0);
this.blast = new Range(0, 0);
this.duration = new Range(0, 0);
this.ap_usage = new Range(0, 0);
this.min_level = new Range(0, 0);
}
// Generate a random equipment with this template
generate(): Equipment {
var random = new RandomGenerator();
var power = random.throw();
return this.generateFixed(power);
}
// Generate a fixed-power equipment with this template
generateFixed(power: number): Equipment {
var result = new Equipment();
result.slot = this.slot;
result.name = this.name;
result.distance = Math.floor(this.distance.getProportional(power));
result.blast = Math.floor(this.blast.getProportional(power));
result.duration = Math.floor(this.duration.getProportional(power));
result.ap_usage = Math.floor(this.ap_usage.getProportional(power));
result.min_level = Math.floor(this.min_level.getProportional(power));
return result;
}
}
}