/** * If the component requires other custom components then do it here. * Read the comment on Components.MantaSeializationFixer if you wish to understand why this horrible system exists. */ public static void SetUpManta(GameObject submarine) { MantaSubmarine mantaSubmarine = submarine.GetComponent <MantaSubmarine>(); Transform applyForceLocation = submarine.FindChild("PointsOfInterest").FindChild("ForceAppliedLocation").transform; MovementController movementController = submarine.GetOrAddComponent <MovementController>(); movementController.ApplyForceLocation = applyForceLocation; GameObject doorLeft = submarine.FindChild("PointsOfInterest").FindChild("PlayerEntranceLeftFlap"); doorLeft.GetComponentInChildren <HingeJoint>().connectedBody = submarine.GetComponent <Rigidbody>(); HingeJointDoor hingeDoorLeft = doorLeft.GetOrAddComponent <HingeJointDoor>(); hingeDoorLeft.OverwriteTargetVelocity = true; hingeDoorLeft.TargetVelocity = 150f; hingeDoorLeft.TriggerToEverything = false; hingeDoorLeft.TriggerToPlayer = true; hingeDoorLeft.TriggerToVehicles = false; hingeDoorLeft.OpenSound = CyclopsDefaultAssets.PLAYER_HATCH_OPEN; hingeDoorLeft.CloseSound = CyclopsDefaultAssets.PLAYER_HATCH_CLOSE; GameObject doorRight = submarine.FindChild("PointsOfInterest").FindChild("PlayerEntranceRightFlap"); doorRight.GetComponentInChildren <HingeJoint>().connectedBody = submarine.GetComponent <Rigidbody>(); HingeJointDoor hingeDoorRight = doorRight.GetOrAddComponent <HingeJointDoor>(); hingeDoorRight.OverwriteTargetVelocity = true; hingeDoorRight.TargetVelocity = 150f; hingeDoorRight.TriggerToEverything = false; hingeDoorRight.TriggerToPlayer = true; hingeDoorRight.TriggerToVehicles = false; hingeDoorRight.OpenSound = CyclopsDefaultAssets.PLAYER_HATCH_OPEN; hingeDoorRight.CloseSound = CyclopsDefaultAssets.PLAYER_HATCH_CLOSE; GameObject vehicleDoorLeft = submarine.FindChild("PointsOfInterest").FindChild("VehicleEntranceLeftFlap"); vehicleDoorLeft.GetComponentInChildren <HingeJoint>().connectedBody = submarine.GetComponent <Rigidbody>(); HingeJointDoor hingeVehicleDoorLeft = vehicleDoorLeft.GetOrAddComponent <HingeJointDoor>(); hingeVehicleDoorLeft.OverwriteTargetVelocity = true; hingeVehicleDoorLeft.TargetVelocity = 150f; hingeVehicleDoorLeft.TriggerToEverything = false; hingeVehicleDoorLeft.TriggerToPlayer = false; hingeVehicleDoorLeft.TriggerToVehicles = true; hingeVehicleDoorLeft.OpenSound = CyclopsDefaultAssets.DOCKING_DOORS_OPEN; hingeVehicleDoorLeft.CloseSound = CyclopsDefaultAssets.DOCKING_DOORS_CLOSE; GameObject vehicleDoorRight = submarine.FindChild("PointsOfInterest").FindChild("VehicleEntranceRightFlap"); vehicleDoorRight.GetComponentInChildren <HingeJoint>().connectedBody = submarine.GetComponent <Rigidbody>(); HingeJointDoor hingeVehicleDoorRight = vehicleDoorRight.GetOrAddComponent <HingeJointDoor>(); hingeVehicleDoorRight.OverwriteTargetVelocity = true; hingeVehicleDoorRight.TargetVelocity = 150f; hingeVehicleDoorRight.TriggerToEverything = false; hingeVehicleDoorRight.TriggerToPlayer = false; hingeVehicleDoorRight.TriggerToVehicles = true; hingeVehicleDoorRight.OpenSound = CyclopsDefaultAssets.DOCKING_DOORS_OPEN; hingeVehicleDoorRight.CloseSound = CyclopsDefaultAssets.DOCKING_DOORS_CLOSE; GameObject entrancePosition = submarine.FindChild("PointsOfInterest").FindChild("EntranceTeleportSpot"); GameObject entranceHatch = submarine.FindChild("PointsOfInterest").FindChild("PlayerEntrance").FindChild("Base"); EntranceHatch entranceHatchTeleport = entranceHatch.GetOrAddComponent <EntranceHatch>(); entranceHatchTeleport.HoverText = "Board Manta"; entranceHatchTeleport.HoverHandReticle = HandReticle.IconType.Hand; entranceHatchTeleport.TeleportTarget = entrancePosition; entranceHatchTeleport.Submarine = mantaSubmarine; entranceHatchTeleport.EnteringSubmarine = true; GameObject leavePosition = submarine.FindChild("PointsOfInterest").FindChild("LeaveTeleportSpot"); GameObject leaveHatch = submarine.FindChild("PointsOfInterest").FindChild("PlayerEntrance").FindChild("Top"); EntranceHatch leaveHatchTeleport = leaveHatch.GetOrAddComponent <EntranceHatch>(); leaveHatchTeleport.HoverText = "Disembark Manta"; leaveHatchTeleport.HoverHandReticle = HandReticle.IconType.Hand; leaveHatchTeleport.TeleportTarget = leavePosition; leaveHatchTeleport.Submarine = mantaSubmarine; leaveHatchTeleport.EnteringSubmarine = false; GameObject steeringConsolePOI = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole"); GameObject steeringConsoleLeftHandTarget = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole").FindChild("LeftIKTarget"); GameObject steeringConsoleRightHandTarget = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole").FindChild("RightIKTarget"); GameObject playerParentWhilePiloting = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole").FindChild("PlayerLockedWhileSteeringPosition"); SteeringConsole steeringConsole = steeringConsolePOI.GetOrAddComponent <SteeringConsole>(); steeringConsole.MovementController = submarine.GetComponent <MovementController>(); steeringConsole.ParentWhilePilotingGO = playerParentWhilePiloting; steeringConsole.LeftHandIKTarget = steeringConsoleLeftHandTarget; steeringConsole.RightHandIKTarget = steeringConsoleRightHandTarget; steeringConsole.Submarine = mantaSubmarine; CyclopsCollisionSounds collisionSounds = submarine.GetOrAddComponent <CyclopsCollisionSounds>(); MovementData normalSpeedMovementData = new MovementData { ForwardAccelerationSpeed = 5f, BackwardsAccelerationSpeed = 3f, AscendDescendSpeed = 3f, RotationSpeed = 0.3f, StrafeSpeed = 2f }; EngineManager engineManager = submarine.GetOrAddComponent <EngineManager>(); engineManager.SetMovementDataForEngineState(EngineState.SLOW, normalSpeedMovementData); engineManager.SetMovementDataForEngineState(EngineState.NORMAL, normalSpeedMovementData); engineManager.SetMovementDataForEngineState(EngineState.FAST, normalSpeedMovementData); engineManager.SetMovementDataForEngineState(EngineState.SPECIAL, normalSpeedMovementData); CyclopsStartupPowerDownSequence cyclopsStartupPowerDownSequence = submarine.GetOrAddComponent <CyclopsStartupPowerDownSequence>(); CyclopsEngineStateChangedCallouts cyclopsEngineStateChangedCallouts = submarine.GetOrAddComponent <CyclopsEngineStateChangedCallouts>(); movementController.EngineManager = engineManager; CyclopsWelcomeCallout cyclopsWelcomeCallout = submarine.GetOrAddComponent <CyclopsWelcomeCallout>(); CyclopsEngineSound cyclopsEngineSound = submarine.GetOrAddComponent <CyclopsEngineSound>(); cyclopsEngineSound.RampUpSpeed = 0.2f; cyclopsEngineSound.RampDownSpeed = 0.2f; movementController.EngineSound = cyclopsEngineSound; OxygenReplenishment oxygenReplenishment = submarine.GetOrAddComponent <OxygenReplenishment>(); oxygenReplenishment.OxygenPerSecond = 15f; oxygenReplenishment.OxygenEnergyCost = 0.1f; LiveMixin liveMixin = submarine.GetOrAddComponent <LiveMixin>(); liveMixin.data = CyclopsLiveMixinData.Get(); // TO:DO Create a proper health system for the manta. liveMixin.data.knifeable = true; // TO:DO remove just here for testing purposes. liveMixin.data.maxHealth = 500; GameObject externalLights = submarine.FindChild("Lights").FindChild("Exterior"); GameObject internalLights = submarine.FindChild("Lights").FindChild("Interior"); LightsManager lightsManager = submarine.GetOrAddComponent <LightsManager>(); List <Light> internalLightsList = new List <Light>(); List <Light> externalLightsList = new List <Light>(); foreach (Light light in externalLights.GetComponentsInChildren <Light>()) { externalLightsList.Add(light); } foreach (Light light in internalLights.GetComponentsInChildren <Light>()) { internalLightsList.Add(light); } lightsManager.ExternalLights = externalLightsList; lightsManager.InternalLights = internalLightsList; lightsManager.ExternalLightsOnIntensity = 1.5f; lightsManager.ExternalLightsOffIntensity = 0f; lightsManager.InternalLightsOnIntensity = 1.5f; lightsManager.InternalLightsOffIntensity = 0f; lightsManager.EnableInternalLightsOnStart = true; lightsManager.EnableExternalLightsOnStart = true; CyclopsUnderAttackEmergencyLighting emergencyLighting = submarine.GetOrAddComponent <CyclopsUnderAttackEmergencyLighting>(); emergencyLighting.LightsAffected = internalLightsList; submarine.GetOrAddComponent <CyclopsUnderAttackCallout>(); ExternalDamageManager externalDamageManager = submarine.GetOrAddComponent <ExternalDamageManager>(); externalDamageManager.DamagePoints = submarine.FindChild("PointsOfInterest").FindChild("DamagePoints").transform; externalDamageManager.SubmarineLiveMixin = liveMixin; externalDamageManager.LiveMixinDataForExternalDamagePoints = CyclopsExternalDamagePointLiveMixinData.Get(); externalDamageManager.DamagePointParticleEffects = new List <GameObject>() { CyclopsDefaultAssets.EXTERNAL_DAMAGE_POINT_PARTICLES, }; externalDamageManager.DamagePointGameObjects = new List <GameObject>() { CyclopsDefaultAssets.EXTERNAL_DAMAGE_POINT, }; InternalFireManager internalFireManager = submarine.GetOrAddComponent <InternalFireManager>(); internalFireManager.SubmarineLiveMixin = liveMixin; internalFireManager.FirePoints = submarine.FindChild("PointsOfInterest").FindChild("FirePoints").transform; internalFireManager.FirePrefabs = new List <GameObject>() { CyclopsDefaultAssets.CYCLOPS_FIRE, }; internalFireManager.DamageDonePerFirePerSecond = 5f; internalFireManager.Submarine = mantaSubmarine; internalFireManager.ChancePerDamageTakenToSpawnFire = 5; AutoRegenConditional autoRegen = submarine.GetOrAddComponent <AutoRegenConditional>(); autoRegen.InternalFireManager = internalFireManager; autoRegen.ExternalDamageManager = externalDamageManager; autoRegen.LiveMixin = liveMixin; autoRegen.RegenPerSecond = 2f; }
/** * If the component requires other custom components then do it here. * Read the comment on Components.MantaSeializationFixer if you wish to understand why this horrible system exists. */ public static void SetUpManta(GameObject submarine) { MantaSubmarine mantaSubmarine = submarine.GetComponent <MantaSubmarine>(); Transform applyForceLocation = submarine.FindChild("PointsOfInterest").FindChild("ForceAppliedLocation").transform; MovementController movementController = submarine.GetOrAddComponent <MovementController>(); movementController.ApplyForceLocation = applyForceLocation; GameObject doorLeft = submarine.FindChild("PointsOfInterest").FindChild("PlayerEntranceLeftFlap"); doorLeft.GetComponentInChildren <HingeJoint>().connectedBody = submarine.GetComponent <Rigidbody>(); HingeJointDoor hingeDoorLeft = doorLeft.GetOrAddComponent <HingeJointDoor>(); hingeDoorLeft.OverwriteTargetVelocity = true; hingeDoorLeft.TargetVelocity = 150f; hingeDoorLeft.TriggerToEverything = false; hingeDoorLeft.TriggerToPlayer = true; hingeDoorLeft.TriggerToVehicles = false; hingeDoorLeft.OpenSound = CyclopsDefaultAssets.PLAYER_HATCH_OPEN; hingeDoorLeft.CloseSound = CyclopsDefaultAssets.PLAYER_HATCH_CLOSE; GameObject doorRight = submarine.FindChild("PointsOfInterest").FindChild("PlayerEntranceRightFlap"); doorRight.GetComponentInChildren <HingeJoint>().connectedBody = submarine.GetComponent <Rigidbody>(); HingeJointDoor hingeDoorRight = doorRight.GetOrAddComponent <HingeJointDoor>(); hingeDoorRight.OverwriteTargetVelocity = true; hingeDoorRight.TargetVelocity = 150f; hingeDoorRight.TriggerToEverything = false; hingeDoorRight.TriggerToPlayer = true; hingeDoorRight.TriggerToVehicles = false; hingeDoorRight.OpenSound = CyclopsDefaultAssets.PLAYER_HATCH_OPEN; hingeDoorRight.CloseSound = CyclopsDefaultAssets.PLAYER_HATCH_CLOSE; GameObject vehicleDoorLeft = submarine.FindChild("PointsOfInterest").FindChild("VehicleEntranceLeftFlap"); vehicleDoorLeft.GetComponentInChildren <HingeJoint>().connectedBody = submarine.GetComponent <Rigidbody>(); HingeJointDoor hingeVehicleDoorLeft = vehicleDoorLeft.GetOrAddComponent <HingeJointDoor>(); hingeVehicleDoorLeft.OverwriteTargetVelocity = true; hingeVehicleDoorLeft.TargetVelocity = 150f; hingeVehicleDoorLeft.TriggerToEverything = false; hingeVehicleDoorLeft.TriggerToPlayer = false; hingeVehicleDoorLeft.TriggerToVehicles = true; hingeVehicleDoorLeft.OpenSound = CyclopsDefaultAssets.DOCKING_DOORS_OPEN; hingeVehicleDoorLeft.CloseSound = CyclopsDefaultAssets.DOCKING_DOORS_CLOSE; GameObject vehicleDoorRight = submarine.FindChild("PointsOfInterest").FindChild("VehicleEntranceRightFlap"); vehicleDoorRight.GetComponentInChildren <HingeJoint>().connectedBody = submarine.GetComponent <Rigidbody>(); HingeJointDoor hingeVehicleDoorRight = vehicleDoorRight.GetOrAddComponent <HingeJointDoor>(); hingeVehicleDoorRight.OverwriteTargetVelocity = true; hingeVehicleDoorRight.TargetVelocity = 150f; hingeVehicleDoorRight.TriggerToEverything = false; hingeVehicleDoorRight.TriggerToPlayer = false; hingeVehicleDoorRight.TriggerToVehicles = true; hingeVehicleDoorRight.OpenSound = CyclopsDefaultAssets.DOCKING_DOORS_OPEN; hingeVehicleDoorRight.CloseSound = CyclopsDefaultAssets.DOCKING_DOORS_CLOSE; GameObject entrancePosition = submarine.FindChild("PointsOfInterest").FindChild("EntranceTeleportSpot"); GameObject entranceHatch = submarine.FindChild("PointsOfInterest").FindChild("PlayerEntrance").FindChild("Base"); EntranceHatch entranceHatchTeleport = entranceHatch.GetOrAddComponent <EntranceHatch>(); entranceHatchTeleport.HoverText = "Board Manta"; entranceHatchTeleport.HoverHandReticle = HandReticle.IconType.Hand; entranceHatchTeleport.TeleportTarget = entrancePosition; entranceHatchTeleport.Submarine = mantaSubmarine; entranceHatchTeleport.EnteringSubmarine = true; GameObject leavePosition = submarine.FindChild("PointsOfInterest").FindChild("LeaveTeleportSpot"); GameObject leaveHatch = submarine.FindChild("PointsOfInterest").FindChild("PlayerEntrance").FindChild("Top"); EntranceHatch leaveHatchTeleport = leaveHatch.GetOrAddComponent <EntranceHatch>(); leaveHatchTeleport.HoverText = "Disembark Manta"; leaveHatchTeleport.HoverHandReticle = HandReticle.IconType.Hand; leaveHatchTeleport.TeleportTarget = leavePosition; leaveHatchTeleport.Submarine = mantaSubmarine; leaveHatchTeleport.EnteringSubmarine = false; GameObject steeringConsolePOI = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole"); GameObject steeringConsoleLeftHandTarget = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole").FindChild("LeftIKTarget"); GameObject steeringConsoleRightHandTarget = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole").FindChild("RightIKTarget"); GameObject playerParentWhilePiloting = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole").FindChild("PlayerLockedWhileSteeringPosition"); SteeringConsole steeringConsole = steeringConsolePOI.GetOrAddComponent <SteeringConsole>(); steeringConsole.MovementController = submarine.GetComponent <MovementController>(); steeringConsole.ParentWhilePilotingGO = playerParentWhilePiloting; steeringConsole.LeftHandIKTarget = steeringConsoleLeftHandTarget; steeringConsole.RightHandIKTarget = steeringConsoleRightHandTarget; steeringConsole.Submarine = mantaSubmarine; CyclopsCollisionSounds collisionSounds = submarine.GetOrAddComponent <CyclopsCollisionSounds>(); MovementData normalSpeedMovementData = new MovementData { ForwardAccelerationSpeed = 5f, BackwardsAccelerationSpeed = 3f, AscendDescendSpeed = 3f, RotationSpeed = 0.3f, StrafeSpeed = 2f }; EngineManager engineManager = submarine.GetOrAddComponent <EngineManager>(); engineManager.SetMovementDataForEngineState(EngineState.SLOW, normalSpeedMovementData); engineManager.SetMovementDataForEngineState(EngineState.NORMAL, normalSpeedMovementData); engineManager.SetMovementDataForEngineState(EngineState.FAST, normalSpeedMovementData); engineManager.SetMovementDataForEngineState(EngineState.SPECIAL, normalSpeedMovementData); CyclopsStartupPowerDownSequence cyclopsStartupPowerDownSequence = submarine.GetOrAddComponent <CyclopsStartupPowerDownSequence>(); CyclopsEngineStateChangedCallouts cyclopsEngineStateChangedCallouts = submarine.GetOrAddComponent <CyclopsEngineStateChangedCallouts>(); movementController.EngineManager = engineManager; CyclopsWelcomeCallout cyclopsWelcomeCallout = submarine.GetOrAddComponent <CyclopsWelcomeCallout>(); CyclopsEngineSound cyclopsEngineSound = submarine.GetOrAddComponent <CyclopsEngineSound>(); cyclopsEngineSound.RampUpSpeed = 0.2f; cyclopsEngineSound.RampDownSpeed = 0.2f; movementController.EngineSound = cyclopsEngineSound; OxygenReplenishment oxygenReplenishment = submarine.GetOrAddComponent <OxygenReplenishment>(); oxygenReplenishment.OxygenPerSecond = 15f; oxygenReplenishment.OxygenEnergyCost = 0.1f; LiveMixin liveMixin = submarine.GetOrAddComponent <LiveMixin>(); liveMixin.data = CyclopsLiveMixinData.Get(); // TO:DO Create a proper health system for the manta. liveMixin.data.knifeable = true; // TO:DO remove just here for testing purposes. liveMixin.data.maxHealth = 500; GameObject externalLights = submarine.FindChild("Lights").FindChild("Exterior"); GameObject internalLights = submarine.FindChild("Lights").FindChild("Interior"); LightsManager lightsManager = submarine.GetOrAddComponent <LightsManager>(); List <Light> internalLightsList = new List <Light>(); List <Light> externalLightsList = new List <Light>(); foreach (Light light in externalLights.GetComponentsInChildren <Light>()) { externalLightsList.Add(light); } foreach (Light light in internalLights.GetComponentsInChildren <Light>()) { internalLightsList.Add(light); } lightsManager.ExternalLights = externalLightsList; lightsManager.InternalLights = internalLightsList; lightsManager.ExternalLightsOnIntensity = 1.5f; lightsManager.ExternalLightsOffIntensity = 0f; lightsManager.InternalLightsOnIntensity = 1.5f; lightsManager.InternalLightsOffIntensity = 0f; lightsManager.EnableInternalLightsOnStart = true; lightsManager.EnableExternalLightsOnStart = true; CyclopsUnderAttackEmergencyLighting emergencyLighting = submarine.GetOrAddComponent <CyclopsUnderAttackEmergencyLighting>(); emergencyLighting.LightsAffected = internalLightsList; submarine.GetOrAddComponent <CyclopsUnderAttackCallout>(); ExternalDamageManager externalDamageManager = submarine.GetOrAddComponent <ExternalDamageManager>(); externalDamageManager.DamagePoints = submarine.FindChild("PointsOfInterest").FindChild("DamagePoints").transform; externalDamageManager.SubmarineLiveMixin = liveMixin; externalDamageManager.LiveMixinDataForExternalDamagePoints = CyclopsExternalDamagePointLiveMixinData.Get(); externalDamageManager.DamagePointParticleEffects = new List <GameObject>() { CyclopsDefaultAssets.EXTERNAL_DAMAGE_POINT_PARTICLES, }; externalDamageManager.DamagePointGameObjects = new List <GameObject>() { CyclopsDefaultAssets.EXTERNAL_DAMAGE_POINT, }; InternalFireManager internalFireManager = submarine.GetOrAddComponent <InternalFireManager>(); internalFireManager.SubmarineLiveMixin = liveMixin; internalFireManager.FirePoints = submarine.FindChild("PointsOfInterest").FindChild("FirePoints").transform; internalFireManager.FirePrefabs = new List <GameObject>() { CyclopsDefaultAssets.CYCLOPS_FIRE, }; internalFireManager.DamageDonePerFirePerSecond = 5f; internalFireManager.Submarine = mantaSubmarine; internalFireManager.ChancePerDamageTakenToSpawnFire = 5; AutoRegenConditional autoRegen = submarine.GetOrAddComponent <AutoRegenConditional>(); autoRegen.InternalFireManager = internalFireManager; autoRegen.ExternalDamageManager = externalDamageManager; autoRegen.LiveMixin = liveMixin; autoRegen.RegenPerSecond = 2f; InternalLeakManager internalLeakManage = submarine.GetOrAddComponent <InternalLeakManager>(); internalLeakManage.LeakPrefabs = new List <GameObject>() { CyclopsDefaultAssets.WATER_LEAK }; DeathManager deathManager = submarine.GetOrAddComponent <DeathManager>(); deathManager.DeathPreparationTime = 22f; BasicDeath basicDeath = submarine.GetOrAddComponent <BasicDeath>(); basicDeath.TimeTillDeletionOfSub = 60f; basicDeath.FallSpeed = 2f; CyclopsDeathExplosion cyclopsDeathExplosion = submarine.GetOrAddComponent <CyclopsDeathExplosion>(); cyclopsDeathExplosion.TimeToExplosionAfterDeath = 18f; cyclopsDeathExplosion.FMODAsset = CyclopsDefaultAssets.CYCLOPS_EXPLOSION_FMOD; CyclopsAbandonShip cyclopsAbandonShip = submarine.GetOrAddComponent <CyclopsAbandonShip>(); cyclopsAbandonShip.TimeToCalloutAfterDeath = 0f; cyclopsAbandonShip.FMODAsset = CyclopsDefaultAssets.AI_ABANDON; DestabiliseOnSubDeath destabiliseOnSubDeath = submarine.GetOrAddComponent <DestabiliseOnSubDeath>(); KillPlayerInsideOnSubDeath killPlayerInsideOnSubDeath = submarine.GetOrAddComponent <KillPlayerInsideOnSubDeath>(); // Temp screens GameObject helmMantaOSScreen = submarine.FindChild("PointsOfInterest").FindChild("UpgradesAndBatteries").FindChild("HelmScreen").FindChild("Canvas"); GameObject rearMantaOSScreen = submarine.FindChild("PointsOfInterest").FindChild("UpgradesAndBatteries").FindChild("UpgradeScreen").FindChild("Canvas"); GameObject steeringConsoleMantaOSScreen = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole").FindChild("Canvas"); Object.Instantiate(MantaAssetLoader.MANTA_OS_MAIN_LAYOUT_PAGE).transform.SetParent(helmMantaOSScreen.transform, false); Object.Instantiate(MantaAssetLoader.MANTAOS_OFFLINE_PAGE).transform.SetParent(rearMantaOSScreen.transform, false); Object.Instantiate(MantaAssetLoader.MANTAOS_OFFLINE_PAGE).transform.SetParent(steeringConsoleMantaOSScreen.transform, false); SMLHelper.V2.Handlers.TechTypeHandler.TryGetModdedTechType(UNIQUE_ID, out TechType mantaTechType); PingType mantaPingType = CustomBeaconManager.RegisterNewPingType(mantaTechType, NAME, MantaAssetLoader.MANTA_PING_ICON); PingInstance pingInstance = CustomBeaconManager.AddNewBeacon(submarine, mantaPingType, "HMS Unknown Manta"); }
/** * If the component requires other custom components then do it here. * Read the comment on Components.OdyseeySeializationFixer if you wish to understand why this horrible system exists. */ public static void SetUpOdyssey(GameObject submarine) { OdysseySubmarine odysseySubmarine = submarine.GetComponent <OdysseySubmarine>(); Transform applyForceLocation = submarine.FindChild("PointsOfInterest").FindChild("ForceAppliedLocation").transform; MovementController movementController = submarine.GetOrAddComponent <MovementController>(); movementController.ApplyForceLocation = applyForceLocation; GameObject doorLeft = submarine.FindChild("PointsOfInterest").FindChild("LeftDoorFlap"); doorLeft.GetComponentInChildren <HingeJoint>().connectedBody = submarine.GetComponent <Rigidbody>(); HingeJointDoor hingeDoorLeft = doorLeft.GetOrAddComponent <HingeJointDoor>(); hingeDoorLeft.OverwriteTargetVelocity = true; hingeDoorLeft.TargetVelocity = 130f; hingeDoorLeft.TriggerToEverything = false; hingeDoorLeft.TriggerToPlayer = true; hingeDoorLeft.TriggerToVehicles = false; hingeDoorLeft.OpenSound = CyclopsDefaultAssets.PLAYER_HATCH_OPEN; hingeDoorLeft.CloseSound = CyclopsDefaultAssets.PLAYER_HATCH_CLOSE; GameObject doorRight = submarine.FindChild("PointsOfInterest").FindChild("RightDoorFlap"); doorRight.GetComponentInChildren <HingeJoint>().connectedBody = submarine.GetComponent <Rigidbody>(); HingeJointDoor hingeDoorRight = doorRight.GetOrAddComponent <HingeJointDoor>(); hingeDoorRight.OverwriteTargetVelocity = true; hingeDoorRight.TargetVelocity = 130f; hingeDoorRight.TriggerToEverything = false; hingeDoorRight.TriggerToPlayer = true; hingeDoorRight.TriggerToVehicles = false; hingeDoorRight.OpenSound = CyclopsDefaultAssets.PLAYER_HATCH_OPEN; hingeDoorRight.CloseSound = CyclopsDefaultAssets.PLAYER_HATCH_CLOSE; GameObject entrancePosition = submarine.FindChild("PointsOfInterest").FindChild("EntranceTeleportSpot"); GameObject entranceHatch = submarine.FindChild("PointsOfInterest").FindChild("Enter"); EntranceHatch entranceHatchTeleport = entranceHatch.GetOrAddComponent <EntranceHatch>(); entranceHatchTeleport.HoverText = "Board Odyssey"; entranceHatchTeleport.HoverHandReticle = HandReticle.IconType.Hand; entranceHatchTeleport.TeleportTarget = entrancePosition; entranceHatchTeleport.Submarine = odysseySubmarine; entranceHatchTeleport.EnteringSubmarine = true; GameObject leavePosition = submarine.FindChild("PointsOfInterest").FindChild("ExitTeleportSpot"); GameObject leaveHatch = submarine.FindChild("PointsOfInterest").FindChild("Exit"); EntranceHatch leaveHatchTeleport = leaveHatch.GetOrAddComponent <EntranceHatch>(); leaveHatchTeleport.HoverText = "Disembark Odyssey"; leaveHatchTeleport.HoverHandReticle = HandReticle.IconType.Hand; leaveHatchTeleport.TeleportTarget = leavePosition; leaveHatchTeleport.Submarine = odysseySubmarine; leaveHatchTeleport.EnteringSubmarine = false; GameObject steeringConsolePOI = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole"); GameObject playerParentWhilePiloting = submarine.FindChild("PointsOfInterest").FindChild("SteeringConsole").FindChild("PlayerLockedWhileSteeringPosition"); SteeringConsole steeringConsole = steeringConsolePOI.GetOrAddComponent <SteeringConsole>(); steeringConsole.MovementController = submarine.GetComponent <MovementController>(); steeringConsole.ParentWhilePilotingGO = playerParentWhilePiloting; steeringConsole.LeftHandIKTarget = null; steeringConsole.RightHandIKTarget = null; steeringConsole.Submarine = odysseySubmarine; CyclopsCollisionSounds collisionSounds = submarine.GetOrAddComponent <CyclopsCollisionSounds>(); MovementData normalSpeedMovementData = new MovementData { ForwardAccelerationSpeed = 10f, BackwardsAccelerationSpeed = 8f, AscendDescendSpeed = 15f, RotationSpeed = 0.7f }; EngineManager engineManager = submarine.GetOrAddComponent <EngineManager>(); engineManager.SetMovementDataForEngineState(EngineState.SLOW, normalSpeedMovementData); engineManager.SetMovementDataForEngineState(EngineState.NORMAL, normalSpeedMovementData); engineManager.SetMovementDataForEngineState(EngineState.FAST, normalSpeedMovementData); engineManager.SetMovementDataForEngineState(EngineState.SPECIAL, normalSpeedMovementData); CyclopsStartupPowerDownSequence cyclopsStartupPowerDownSequence = submarine.GetOrAddComponent <CyclopsStartupPowerDownSequence>(); CyclopsEngineStateChangedCallouts cyclopsEngineStateChangedCallouts = submarine.GetOrAddComponent <CyclopsEngineStateChangedCallouts>(); movementController.EngineManager = engineManager; CyclopsWelcomeCallout cyclopsWelcomeCallout = submarine.GetOrAddComponent <CyclopsWelcomeCallout>(); CyclopsEngineSound cyclopsEngineSound = submarine.GetOrAddComponent <CyclopsEngineSound>(); cyclopsEngineSound.RampUpSpeed = 0.2f; cyclopsEngineSound.RampDownSpeed = 0.2f; movementController.EngineSound = cyclopsEngineSound; OxygenReplenishment oxygenReplenishment = submarine.GetOrAddComponent <OxygenReplenishment>(); oxygenReplenishment.OxygenPerSecond = 15f; oxygenReplenishment.OxygenEnergyCost = 0.1f; }