//TODO: REWRITE ASAP public static Ship.GenericShip SpawnShip(ShipConfiguration shipConfig) { //temporary int id = 1; Vector3 position = Vector3.zero; Ship.GenericShip newShipContainer = (Ship.GenericShip)System.Activator.CreateInstance(System.Type.GetType(shipConfig.PilotName)); newShipContainer.InitializeGenericShip(shipConfig.PlayerNo, id, position); foreach (var upgrade in shipConfig.Upgrades) { newShipContainer.InstallUpgrade(upgrade); } Roster.SubscribeActions(newShipContainer.InfoPanel.transform.Find("ShipInfo").gameObject); Roster.SubscribeUpgradesPanel(newShipContainer, newShipContainer.InfoPanel); //TODO: Rework this newShipContainer.AfterGotNumberOfPrimaryWeaponAttackDices += Rules.DistanceBonus.CheckAttackDistanceBonus; newShipContainer.AfterGotNumberOfPrimaryWeaponDefenceDices += Rules.DistanceBonus.CheckDefenceDistanceBonus; newShipContainer.AfterGotNumberOfPrimaryWeaponDefenceDices += Rules.AsteroidObstruction.CheckDefenceDistanceBonus; newShipContainer.OnTryAddAvailableAction += Rules.Stress.CanPerformActions; newShipContainer.OnTryAddAvailableAction += Rules.DuplicatedActions.CanPerformActions; newShipContainer.OnMovementStart += Rules.Collision.ClearBumps; newShipContainer.OnMovementStart += MovementTemplates.ApplyMovementRuler; newShipContainer.OnMovementStart += MovementTemplates.CallReturnRangeRuler; newShipContainer.OnPositionFinish += Rules.OffTheBoard.CheckOffTheBoard; newShipContainer.OnMovementExecuted += Rules.Stress.CheckStress; newShipContainer.OnMovementFinish += Rules.AsteroidHit.CheckDamage; newShipContainer.AfterGetManeuverAvailablity += Rules.Stress.CannotPerformRedManeuversWhileStressed; newShipContainer.AfterTokenIsAssigned += Roster.UpdateTokensIndicator; newShipContainer.AfterTokenIsRemoved += Roster.UpdateTokensIndicator; newShipContainer.AfterAssignedDamageIsChanged += Roster.UpdateRosterHullDamageIndicators; newShipContainer.AfterAssignedDamageIsChanged += Roster.UpdateRosterShieldsDamageIndicators; newShipContainer.AfterStatsAreChanged += Roster.UpdateShipStats; newShipContainer.Owner.SquadCost += shipConfig.ShipCost; return(newShipContainer); }