88 lines
2.4 KiB
TypeScript
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;
|
|
}
|
|
}
|
|
}
|