79 lines
2.0 KiB
C#
79 lines
2.0 KiB
C#
using Microsoft.Xna.Framework;
|
|
|
|
namespace Barotrauma
|
|
{
|
|
class Skill
|
|
{
|
|
private float level;
|
|
|
|
public string Identifier { get; }
|
|
|
|
public const float MaximumSkill = 100.0f;
|
|
|
|
public float Level
|
|
{
|
|
get { return level; }
|
|
set { level = value; }
|
|
}
|
|
|
|
public void IncreaseSkill(float value, bool increasePastMax)
|
|
{
|
|
level = MathHelper.Clamp(level + value, 0.0f, increasePastMax ? float.MaxValue : MaximumSkill);
|
|
}
|
|
|
|
private Sprite icon;
|
|
public Sprite Icon
|
|
{
|
|
get
|
|
{
|
|
if (icon == null)
|
|
{
|
|
icon = GetIcon();
|
|
}
|
|
return icon;
|
|
}
|
|
}
|
|
|
|
internal SkillPrefab Prefab { get; private set; }
|
|
|
|
public Skill(SkillPrefab prefab)
|
|
{
|
|
this.Prefab = prefab;
|
|
Identifier = prefab.Identifier;
|
|
level = Rand.Range(prefab.LevelRange.X, prefab.LevelRange.Y, Rand.RandSync.Server);
|
|
icon = GetIcon();
|
|
}
|
|
|
|
public Skill(string identifier, float level)
|
|
{
|
|
Identifier = identifier;
|
|
this.level = level;
|
|
icon = GetIcon();
|
|
}
|
|
|
|
private Sprite GetIcon()
|
|
{
|
|
string jobId = null;
|
|
switch (Identifier.ToLowerInvariant())
|
|
{
|
|
case "electrical":
|
|
jobId = "engineer";
|
|
break;
|
|
case "helm":
|
|
jobId = "captain";
|
|
break;
|
|
case "mechanical":
|
|
jobId = "mechanic";
|
|
break;
|
|
case "medical":
|
|
jobId = "medicaldoctor";
|
|
break;
|
|
case "weapons":
|
|
jobId = "securityofficer";
|
|
break;
|
|
}
|
|
return jobId != null && JobPrefab.Prefabs.ContainsKey(jobId) ? JobPrefab.Prefabs[jobId].IconSmall : null;
|
|
}
|
|
}
|
|
}
|