StrategyRPG/Johnmagotchi/GameContent/Objects/UglyUnits/Loadouts/PlayerClasses/PlayerClass.cs
2026-09-25 02:33:04 -05:00

254 lines
9.4 KiB
C#

using Johnmagotchi.Core.tools;
using Johnmagotchi.GameContent.Objects.Units.BattleObjects;
using Johnmagotchi.GameContent.Objects.Units.Loadouts;
using System.Collections.Generic;
using System.Linq;
namespace Johnmagotchi.GameContent.Objects.Units.Loadouts.PlayerClasses
{
public class PlayerClass
{
// Class contains a loadout, and default attacks/supports/skills
enum ModuleColor
{
RED,
BLUE,
YELLOW,
GREEN,
PURPLE,
COLORLESS
}
public enum PlayerClassType
{
CL_COMMONER = 0,
RR_KNIGHT, //Red 1
RB_MERC,
RY_GRAPPLER,
RG_SHIELD,
RP_PYRO,
BB_HECK_DIVER, //Blue 6
BY_SPECIALIST,
BG_ORORO_MUNROE,
BP_GRENADIER,
YY_ASSASSIN, //Yellow 10
YG_SPY,
YP_SURVIVALIST,
GG_HEALER, //Green 13
GP_MOIRAINE_HERSELF,
PP_ELEMENTALIST, //Purple 15
}
UnitLoadout UnitLoadout { get; set; }
PlayerClassType ClassType { get; set; }
ModuleColor PrimaryColor;
ModuleColor SecondaryColor;
public List<AttackObj> ClassAttacks; // default for the class
public List<SupportObj> ClassSupports; // default
public List<SkillObj> ClassSkills; // default
public PlayerClass(PlayerClassType type) {
ClassType = type;
ClassAttacks = new List<AttackObj>();
ClassSupports = new List<SupportObj>();
ClassSkills = new List<SkillObj>();
InitClassSpecificFields();
InitClassDefaultAttacks();
}
public void SetAndInitLoadout( UnitLoadout loadout) {
UnitLoadout = loadout;
ClassAttacks.Clear();
ClassSupports.Clear();
ClassSkills.Clear();
InitClassSpecificFields(); // grab attacks again
ClassAttacks = ClassAttacks.Concat(loadout.AvailableAttacks).ToList();
ClassSupports = ClassSupports.Concat(loadout.AvailableSupports).ToList();
ClassSkills = ClassSkills.Concat(loadout.ActiveSkills).ToList();
}
private void InitClassSpecificFields() {
switch (ClassType) {
case PlayerClassType.RR_KNIGHT:
PrimaryColor = ModuleColor.RED;
SecondaryColor = ModuleColor.RED;
break;
case PlayerClassType.RB_MERC:
PrimaryColor = ModuleColor.RED;
SecondaryColor = ModuleColor.BLUE;
break;
case PlayerClassType.RY_GRAPPLER:
PrimaryColor = ModuleColor.RED;
SecondaryColor = ModuleColor.YELLOW;
break;
case PlayerClassType.RG_SHIELD:
PrimaryColor = ModuleColor.RED;
SecondaryColor = ModuleColor.GREEN;
break;
case PlayerClassType.RP_PYRO:
PrimaryColor = ModuleColor.RED;
SecondaryColor = ModuleColor.PURPLE;
break;
case PlayerClassType.BB_HECK_DIVER:
PrimaryColor = ModuleColor.BLUE;
SecondaryColor = ModuleColor.BLUE;
break;
case PlayerClassType.BY_SPECIALIST:
PrimaryColor = ModuleColor.BLUE;
SecondaryColor = ModuleColor.YELLOW;
break;
case PlayerClassType.BG_ORORO_MUNROE:
PrimaryColor = ModuleColor.BLUE;
SecondaryColor = ModuleColor.GREEN;
break;
case PlayerClassType.BP_GRENADIER:
PrimaryColor = ModuleColor.BLUE;
SecondaryColor = ModuleColor.PURPLE;
break;
case PlayerClassType.YY_ASSASSIN:
PrimaryColor = ModuleColor.YELLOW;
SecondaryColor = ModuleColor.YELLOW;
break;
case PlayerClassType.YG_SPY:
PrimaryColor = ModuleColor.YELLOW;
SecondaryColor = ModuleColor.GREEN;
break;
case PlayerClassType.YP_SURVIVALIST:
PrimaryColor = ModuleColor.YELLOW;
SecondaryColor = ModuleColor.PURPLE;
break;
case PlayerClassType.GG_HEALER:
PrimaryColor = ModuleColor.GREEN;
SecondaryColor = ModuleColor.GREEN;
break;
case PlayerClassType.GP_MOIRAINE_HERSELF:
PrimaryColor = ModuleColor.GREEN;
SecondaryColor = ModuleColor.PURPLE;
break;
case PlayerClassType.PP_ELEMENTALIST:
PrimaryColor = ModuleColor.PURPLE;
SecondaryColor = ModuleColor.PURPLE;
break;
case PlayerClassType.CL_COMMONER:
TibzLog.Debug("Commoner built");
PrimaryColor = ModuleColor.COLORLESS;
SecondaryColor = ModuleColor.COLORLESS;
break;
}
}
public static PlayerClassType GetClassFromShortHand(string shorthand) {
shorthand = shorthand.ToLower();
switch (shorthand) {
case "rr":
return PlayerClassType.RR_KNIGHT;
case "rb":
return PlayerClassType.RB_MERC;
case "ry":
return PlayerClassType.RY_GRAPPLER;
case "rg":
return PlayerClassType.RG_SHIELD;
case "rp":
return PlayerClassType.RP_PYRO;
case "bb":
return PlayerClassType.BB_HECK_DIVER;
case "by":
return PlayerClassType.BY_SPECIALIST;
case "bg":
return PlayerClassType.BG_ORORO_MUNROE;
case "bp":
return PlayerClassType.BP_GRENADIER;
case "yy":
return PlayerClassType.YY_ASSASSIN;
case "yg":
return PlayerClassType.YG_SPY;
case "yp":
return PlayerClassType.YP_SURVIVALIST;
case "gg":
return PlayerClassType.GG_HEALER;
case "gp":
return PlayerClassType.GP_MOIRAINE_HERSELF;
case "pp":
return PlayerClassType.PP_ELEMENTALIST;
default:
return PlayerClassType.CL_COMMONER;
}
}
private void InitClassDefaultAttacks()
{
AttackObj attack = null;
switch (ClassType)
{
case PlayerClassType.RR_KNIGHT:
attack = BattleObjectManager.AllAttacks.Find(a => a.ID == 1);
break;
case PlayerClassType.RB_MERC:
attack = BattleObjectManager.AllAttacks.Find(a => a.ID == 1);
break;
case PlayerClassType.RY_GRAPPLER:
attack = BattleObjectManager.AllAttacks.Find(a => a.ID == 1);
break;
case PlayerClassType.RG_SHIELD:
attack = BattleObjectManager.AllAttacks.Find(a => a.ID == 1);
break;
case PlayerClassType.RP_PYRO:
attack = BattleObjectManager.AllAttacks.Find(a => a.ID == 1);
break;
case PlayerClassType.BB_HECK_DIVER:
attack = BattleObjectManager.AllAttacks.Find(a => a.ID == 2);
break;
case PlayerClassType.BY_SPECIALIST:
attack = BattleObjectManager.AllAttacks.Find(a => a.ID == 2);
break;
case PlayerClassType.BG_ORORO_MUNROE:
attack = BattleObjectManager.AllAttacks.Find(a => a.ID == 2);
break;
case PlayerClassType.BP_GRENADIER:
attack = BattleObjectManager.AllAttacks.Find(a => a.ID == 2);
break;
case PlayerClassType.YY_ASSASSIN:
attack = BattleObjectManager.AllAttacks.Find(a => a.ID == 2);
break;
case PlayerClassType.YG_SPY:
attack = BattleObjectManager.AllAttacks.Find(a => a.ID == 2);
break;
case PlayerClassType.YP_SURVIVALIST:
attack = BattleObjectManager.AllAttacks.Find(a => a.ID == 2);
break;
case PlayerClassType.GG_HEALER:
break;
case PlayerClassType.GP_MOIRAINE_HERSELF:
break;
case PlayerClassType.PP_ELEMENTALIST:
break;
case PlayerClassType.CL_COMMONER:
attack = BattleObjectManager.AllAttacks.Find(a => a.ID == 1);
break;
}
if (attack != null)
this.ClassAttacks.Add(attack);
}
}
}