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 ClassAttacks; // default for the class public List ClassSupports; // default public List ClassSkills; // default public PlayerClass(PlayerClassType type) { ClassType = type; ClassAttacks = new List(); ClassSupports = new List(); ClassSkills = new List(); 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); } } }