Пример #1
0
        /**
         * Expects the tech type for your custom spawnable. This gives us a unique number that we can use.
         */
        public static PingType RegisterNewPingType(TechType type, string pingName, Sprite sprite)
        {
            PingType pingType = GetPingType(type);

            if (cachedSprites.ContainsKey(pingType) == false)
            {
                if (nameToType.ContainsKey(pingName))
                {
                    Log.Error($"CustomBeaconManager::RegisterNewPingType Attempted to register a new ping with name {pingName} but that is already taken.");
                    return(pingType);
                }

                cachedSprites.Add(pingType, new Atlas.Sprite(sprite));
                nameToType.Add(pingName, pingType);
                if (PingManager.sCachedPingTypeStrings.valueToString.ContainsKey(pingType) == false)
                {
                    PingManager.sCachedPingTypeStrings.valueToString.Add(pingType, pingName);
                }

                if (PingManager.sCachedPingTypeTranslationStrings.valueToString.ContainsKey(pingType) == false)
                {
                    PingManager.sCachedPingTypeTranslationStrings.valueToString.Add(pingType, pingName);
                }
            }

            Log.Print($"CustomBeaconManager::RegisterNewPingType ({type}, {pingName}) -> {pingType}", false);
            return(pingType);
        }
Пример #2
0
 public Struct(float x = 0f, float y = 0f, int targetNetworkId = 0, PingType type = PingType.Normal)
 {
     X = x;
     Y = y;
     TargetNetworkId = targetNetworkId;
     Type            = type;
 }
        public void Initialize(HabitatControlPanel target, PingType initialType)
        {
            base.Initialize();

            this.target = target;

            var names       = Enum.GetNames(typeof(PingType));
            var values      = (PingType[])Enum.GetValues(typeof(PingType));
            var color       = PingManager.colorOptions[target.BeaconColorIndex];
            int initialPage = 0;

            for (int i = 0; i < buttons.Count; ++i)
            {
                var button = buttons[i];
                var name   = names[i + 1];
                var value  = values[i + 1];
                var sprite = SpriteManager.Get(SpriteManager.Group.Pings, name);
                button.Initialize((int)value, color, value == initialType, sprite);

                if (value == initialType)
                {
                    initialPage = i / ButtonsPerPage;
                }
            }

            onSelect = OnSelect;
            ShowPage(initialPage);
        }
Пример #4
0
 public void CallCmdSendMinimapPing(
     int teamIndex,
     Vector3 worldPosition,
     PingType pingType)
 {
     if (!EvoSGameConfig.NetworkIsClient)
     {
         Log.Print(LogType.Error, "Command function CmdSendMinimapPing called on server.");
     }
     else if (EvoSGameConfig.NetworkIsServer)
     {
         this.CmdSendMinimapPing(teamIndex, worldPosition, pingType);
     }
     else
     {
         NetworkWriter writer = new NetworkWriter();
         writer.Write((short)0);
         writer.Write((short)5);
         writer.WritePackedUInt32((uint)kCmdCmdSendMinimapPing);
         writer.Write(GetComponent <NetworkIdentity>().netId);
         writer.WritePackedUInt32((uint)teamIndex);
         writer.Write(worldPosition);
         writer.Write((int)pingType);
         // this.SendCommandInternal(writer, 0, "CmdSendMinimapPing");
         throw new NotImplementedException();
     }
 }
Пример #5
0
        public void SendCustomPingsWithSnakeCase()
        {
            PingType <NoReasonCodes> customPing = new PingType <NoReasonCodes>(
                name: "custom_ping",
                includeClientId: true,
                sendIfEmpty: false,
                reasonCodes: null
                );

            BooleanMetricType sampleMetric = new BooleanMetricType(
                disabled: false,
                category: "test",
                lifetime: Lifetime.Ping,
                name: "boolean_metric",
                sendInPings: new string[] { "custom_ping" }
                );

            sampleMetric.Set(true);
            Assert.True(sampleMetric.TestHasValue());

            customPing.Submit();

            MockUploader.UploadRequest request = mockUploader.GetPendingUpload();
            Assert.Equal("custom_ping", request.docType);

            // Check that we have a non-null client id.
            JsonDocument jsonPayload = JsonDocument.Parse(request.payload);
            JsonElement  root        = jsonPayload.RootElement;

            Assert.NotNull(root.GetProperty("client_info").GetProperty("client_id").GetString());

            // TODO: Check the ping schema.
            // checkPingSchema(pingJson)
        }
Пример #6
0
        private static bool Prefix(uGUI_PingEntry __instance, int id, bool visible, PingType type, string name, ref int colorIndex)
        {
            CustomPings.Initialize();

            __instance.gameObject.SetActive(true);
            uGUI_PingEntry_id.SetValue(__instance, id);

            __instance.visibility.isOn       = visible;
            __instance.visibilityIcon.sprite = ((!visible) ? __instance.spriteHidden : __instance.spriteVisible);
            __instance.UpdateLabel(type, name);

            for (int i = 0; i < 5; ++i)
            {
                Toggle toggle = __instance.colorSelectors[i];
                toggle.onValueChanged.RemoveAllListeners();
                toggle.isOn = false;
                toggle.gameObject.SetActive(false);
            }
            __instance.colorSelectionIndicator.gameObject.SetActive(false);

            var controller = __instance.gameObject.GetComponent <PingEntryController>();

            if (controller == null)
            {
                controller = __instance.gameObject.AddComponent <PingEntryController>();
            }
            controller.OnInitialize(id, type, colorIndex);

            __instance.icon.sprite = SpriteManager.Get(SpriteManager.Group.Pings, PingManager.sCachedPingTypeStrings.Get(type));
            __instance.icon.color  = CustomPings.GetColor(colorIndex);
            return(false);
        }
Пример #7
0
            /// <summary>
            /// 向服务端发送请求包接口
            /// </summary>
            /// <param name="domin">Minecraft域名或ip</param>
            /// <param name="port">Minecraft服务端端口</param>
            /// <param name="type">域名样式</param>
            /// <returns>返回 MCPEData 类型对象</returns>
            public static MCPEData Ping(string domin, int port, PingType type)
            {
                IPAddress ipaddr;

                try
                {
                    switch (type)
                    {
                    case PingType._domin_tov4:
                        IPHostEntry host1 = Dns.GetHostEntry(domin);
                        ipaddr = host1.AddressList[0];
                        return(GetData(ipaddr, port));

                    case PingType._domin_tov6:
                        IPHostEntry host2 = Dns.GetHostEntry(domin);
                        ipaddr = host2.AddressList[0];
                        return(GetData(ipaddr, port, true));

                    case PingType._ipv4:
                        return(GetData(IPAddress.Parse(domin), port));

                    case PingType._ipv6:
                        return(GetData(IPAddress.Parse(domin), port, true));

                    default:
                        return(null);
                    }
                }
                catch (Exception Ex)
                {
                    throw new Error("Tools.Minecraft.MCPE", Ex.ToString());
                }
            }
Пример #8
0
        /**
         * Expects the tech type for your custom spawnable. This gives us a unique number that we can use.
         */
        public static PingType GetPingType(TechType type)
        {
            int      number = (int)type;
            PingType result = (PingType)number;

            Log.Print($"CustomBeaconManager::GetPingType turned {type} -> ({number}, {result})", false);
            return(result);
        }
Пример #9
0
                public void setPingState(PingType pingType, int colorIndex, bool enabled, bool save = true)
                {
                    pingEnabled[hash(pingType, colorIndex)] = enabled;

                    if (save)
                    {
                        SaveLoad.save(saveName, this);
                    }
                }
Пример #10
0
        internal void SetValue(PingType type, int colorIndex)
        {
            var color = PingManager.colorOptions[colorIndex];

            var spriteName = Enum.GetName(typeof(PingType), type);
            var sprite     = SpriteManager.Get(SpriteManager.Group.Pings, spriteName);

            activeButton.Initialize(sprite, color);
        }
Пример #11
0
 public FormPing(PingType type)
 {
     InitializeComponent();
     btnExit.Enabled = false;
     currentType     = type;
     tokenSource     = new CancellationTokenSource();
     token           = tokenSource.Token;
     pingTimeout     = int.Parse(Settings.GetSetting("PING_TIMEOUT"));
     Text            = "Ping Test";
 }
Пример #12
0
        public StatusType Ping(ref SIFHeaderType SIFHeader, PingType Ping1)
        {
            PingRequest inValue = new PingRequest();

            inValue.SIFHeader = SIFHeader;
            inValue.Ping      = Ping1;
            PongResponse retVal = ((IptFlowControl)(this)).Ping(inValue);

            SIFHeader = retVal.SIFHeader;
            return(retVal.Status);
        }
Пример #13
0
        private static bool Prefix(uGUI_PingEntry __instance, PingType type, string name)
        {
            string text = Language.main.Get(PingManager.sCachedPingTypeTranslationStrings.Get(type));

            if (!string.IsNullOrEmpty(name))
            {
                text = string.Format("{1} ({0})", text, name);
            }
            __instance.label.text = text;
            return(false);
        }
Пример #14
0
        public static Ping FromNet(BinaryReader reader)
        {
            string uuid = reader.ReadString();

            PingType pingType = (PingType)reader.ReadByte();

            BitsByte flags = reader.ReadByte();

            bool notify     = flags[0];
            bool notSpawned = flags[1];

            Ping ping = new Ping(uuid, pingType, notify);

            ping.DecayDuration = reader.ReadInt32();
            ping.RefreshDuration();
            if (notSpawned)
            {
                ping.DecayTimer = reader.ReadInt32();
            }

            if (ping.HasLocation)
            {
                ping.TileLocation = new Point16(reader.ReadInt16(), reader.ReadInt16());
            }

            if (ping.HasSize)
            {
                ping.TileSize = new Point16(reader.ReadInt16(), reader.ReadInt16());
            }

            if (ping.HasTileCount)
            {
                ping.TileCount = reader.ReadInt16();
            }

            if (ping.HasWhoAmI)
            {
                ping.WhoAmI = reader.ReadInt16();
            }

            if (ping.HasType)
            {
                ping.Type = reader.ReadInt32();
            }

            if (ping.HasText)
            {
                ping.Text = reader.ReadString();
            }

            return(ping);
        }
Пример #15
0
        public static long Ping(PingType pingType, string host)
        {
            if (pingType == PingType.ICMP)
            {
                return(PingOverICMP(host));
            }
            else if (pingType == PingType.HTTPS)
            {
                return(PingOverWeb("https://" + host + "/ping"));
            }

            return(-1); // Unkown PingType
        }
Пример #16
0
        public static void setPingEnabled(PingType pingType, int colorIndex, bool enabled)
        {
            if (!pingTogglesEnabled)
            {
                return;
            }

            if (PingToggleToolbar.instance)
            {
                PingToggleToolbar.instance.pingStates.setPingState(pingType, colorIndex, enabled);
                PingToggleToolbar.instance.updateButtons();
            }
        }
Пример #17
0
        /// <summary>
        /// Safely looks for a modded ping type in the SMLHelper PingTypeCache and outputs its <see cref="PingType"/> value when found.
        /// </summary>
        /// <param name="pingTypeString">The string used to define the modded PingType</param>
        /// <param name="moddedPingType">The PingType enum value. Defaults to <see cref="PingType.None"/> when the PingType was not found.</param>
        /// <returns><c>True</c> if the PingType was found; Otherwise <c>false</c></returns>
        bool IPingHandler.TryGetModdedPingType(string pingTypeString, out PingType moddedPingType)
        {
            var cache = PingTypePatcher.cacheManager.RequestCacheForTypeName(pingTypeString, false);

            if (cache != null)
            {
                moddedPingType = (PingType)cache.Index;
                return(true);
            }

            moddedPingType = PingType.None;
            return(false);
        }
Пример #18
0
        public Ping(Player player, PingType pingType, bool notify)
        {
            PlayerUUID = PingsPlayer.GetUUIDFromPlayer(player);
            PingType   = pingType;

            DecayTimer = DecayDuration = 60 * ServerConfig.Instance.PingDuration;             //TODO config

            Notify = notify;

            TileSize = new Point16(1, 1);

            Text = string.Empty;
        }
Пример #19
0
        public int GetPageForType(PingType type)
        {
            var values = (PingType[])Enum.GetValues(typeof(PingType));

            for (int i = 0; i < buttons.Count; ++i)
            {
                var value = values[i + 1];
                if (value == target.pingType)
                {
                    return(i / ButtonsPerPage);
                }
            }
            return(0);
        }
Пример #20
0
        /// <summary>
        /// Ping要求を取得する
        /// </summary>
        /// <param name="pingType"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        private Request::Ping GetPingContent(PingType pingType, int index)
        {
            string content = pingType switch
            {
                PingType.StartRequest => $"rs:{index}",
                PingType.EndRequest => $"rf:{index}",
                PingType.StartCommand => $"ps:{index}",
                _ => $"pf:{index}",
            };

            return(new Request::Ping()
            {
                Content = content
            });
        }
Пример #21
0
                public bool?getPingState(PingType pingType, int colorIndex)
                {
                    if (!pingTogglesEnabled)
                    {
                        return(true);
                    }

                    bool typeExist  = pingEnabled.TryGetValue(hash(pingType, -1), out bool typeEnabled);
                    bool colorExist = pingEnabled.TryGetValue(hash(pingType, colorIndex), out bool colorEnabled);

                    if (!typeExist && !colorExist)
                    {
                        return(null);
                    }

                    return((typeEnabled || !typeExist) && (colorEnabled || !colorExist));
                }
Пример #22
0
        public override int GetHashCode()
        {
            int hash = 1;

            if (PingType != global::AcFunDanmu.PingRequest.Types.PingType.KInvalid)
            {
                hash ^= PingType.GetHashCode();
            }
            if (PingRound != 0)
            {
                hash ^= PingRound.GetHashCode();
            }
            if (_unknownFields != null)
            {
                hash ^= _unknownFields.GetHashCode();
            }
            return(hash);
        }
Пример #23
0
        public override bool Equals(object obj)
        {
            if (!(obj is Ping ping))
            {
                return(false);
            }

            PingType pingType = ping.PingType;

            if (PingType != ping.PingType)
            {
                return(false);
            }

            switch (pingType)
            {
            case PingType.SingleTile:
            case PingType.MultiTile:
            case PingType.ClusterTile:
                bool check = ping.Type == Type;
                if (pingType != PingType.ClusterTile)
                {
                    check &= ping.TileLocation == TileLocation && ping.TileSize == TileSize;
                }
                else
                {
                    //Since clusters can be expanded after pinging, tile size and location varies, all that matters here is overlap
                    Rectangle thisSize  = TileDimensions;
                    Rectangle otherSize = ping.TileDimensions;
                    check &= thisSize.Intersects(otherSize);
                }
                return(check);

            case PingType.SelfPlayer:
                return(ping.WhoAmI == WhoAmI);

            case PingType.NPC:
            case PingType.Item:
                return(ping.WhoAmI == WhoAmI && ping.Type == Type);

            default:
                return(false);
            }
        }
        internal RespondablesMenuBindings()
        {
            RespondNoPingType = new PingType("RADIALPINGS_CONTEXT_RESPOND_NO",
                                             (PingData pingData, List <string> tokens) => { return(RespondTryApply(pingData, tokens, ResponseType.No)); },
                                             (ref PingData pingData, int catalogIndex, List <string> formatInserts) => { return(RespondModify(ref pingData, catalogIndex, formatInserts, ResponseType.No)); });
            RespondNoPingType.pingSkins.Add(new PingSkin(new Color(1f, 0.5f, 0.5f), Resources.Load <Sprite>("@RadialPings:Assets/RadialPings/RadialPingsXIcon.png"), 8f,
                                                         "RADIALPINGS_MESSAGE_RESPOND_NO", PingIndicator.PingType.Default));

            RespondYesPingType = new PingType("RADIALPINGS_CONTEXT_RESPOND_YES",
                                              (PingData pingData, List <string> tokens) => { return(RespondTryApply(pingData, tokens, ResponseType.Yes)); },
                                              (ref PingData pingData, int catalogIndex, List <string> formatInserts) => { return(RespondModify(ref pingData, catalogIndex, formatInserts, ResponseType.Yes)); });
            RespondYesPingType.pingSkins.Add(new PingSkin(new Color(0.5f, 1f, 0.5f), Resources.Load <Sprite>("@RadialPings:Assets/RadialPings/RadialPingsOIcon.png"), 8f,
                                                          "RADIALPINGS_MESSAGE_RESPOND_YES", PingIndicator.PingType.Default));

            PingCatalog.getAdditionalEntries += (list) => {
                list.Add(RespondNoPingType);
                list.Add(RespondYesPingType);
            };

            responseMap[ResponseType.No]  = RespondNoPingType;
            responseMap[ResponseType.Yes] = RespondYesPingType;
        }
Пример #25
0
    // Start is called before the first frame update
    void Start()
    {
        // Redirect third party library logs to Unity panel.
        SystemConsoleRedirector.Redirect();

        Console.WriteLine("Begin Glean test.");

        GleanInstance.Initialize(
            applicationId: "org.mycompany.glean.tests",
            applicationVersion: "0.1",
            uploadEnabled: true,
            configuration: new Configuration(channel: "debug", maxEvents: 500),
            dataDir: "data"
            );

        // Create a custom ping.
        var ping = new PingType <NoReasonCodes>(
            name: "custom",
            includeClientId: true,
            sendIfEmpty: false,
            reasonCodes: null
            );

        // Init launch ping.
        var metric = new StringMetricType(
            category: "hello_world",
            disabled: false,
            lifetime: Lifetime.Application,
            name: "test",
            sendInPings: new string[] { "custom" }
            );

        metric.Set("my_data");
        ping.Submit();

        Console.WriteLine("End of Glean test.");
    }
Пример #26
0
        public static PingInstance AddNewBeacon(GameObject gameObject, PingType pingType, string beaconName, int minDist, int maxDist)
        {
            Initialize();
            if (cachedSprites.ContainsKey(pingType) == false)
            {
                Log.Error($"CustomBeaconManager::AddNewBeacon attempted to add a beacon with a PingType ({pingType}) that was not registered with CustomBeaconManager::RegisterNewPingType", false);
                return(null);
            }

            PingInstance pingInstance = gameObject.GetOrAddComponent <PingInstance>();

            pingInstance.pingType = pingType;
            pingInstance.minDist  = minDist;
            pingInstance.maxDist  = maxDist;
            pingInstance.origin   = gameObject.transform;
            pingInstance.SetLabel(beaconName);

            if (pingUI != null)
            {
                pingUI.pings[pingInstance.GetInstanceID()].SetIcon(cachedSprites[pingType]);
            }

            return(pingInstance);
        }
Пример #27
0
 static int hash(PingType pingType, int colorIndex) => ((int)pingType << 8) | (colorIndex & 0xFF);
Пример #28
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Struct"/> struct.
 /// </summary>
 /// <param name="x">The x.</param>
 /// <param name="y">The y.</param>
 /// <param name="targetNetworkId">The target network identifier.</param>
 /// <param name="sourceNetworkId">The source network identifier.</param>
 /// <param name="type">The type.</param>
 /// <param name="silent">if set to <c>true</c> [silent].</param>
 public Struct(float x = 0f,
     float y = 0f,
     int targetNetworkId = 0,
     int sourceNetworkId = 0,
     PingType type = PingType.Normal,
     bool silent = false)
 {
     X = x;
     Y = y;
     TargetNetworkId = targetNetworkId;
     SourceNetworkId = sourceNetworkId;
     Type = type;
     Silent = silent;
 }
Пример #29
0
 public void ui_setpingenabled(PingType pingType, int colorIndex, bool enabled) =>
 PingToggles.setPingEnabled(pingType, colorIndex, enabled);
Пример #30
0
 public Struct(float x = 0f,
     float y = 0f,
     int targetNetworkId = 0,
     int sourceNetworkId = 0,
     PingType type = PingType.Normal)
 {
     X = x;
     Y = y;
     TargetNetworkId = targetNetworkId;
     SourceNetworkId = sourceNetworkId;
     Type = type;
 }
 public void OnInitialize(int id, PingType type, int colorIndex)
 {
     ping = PingManager.Get(id);
     Initialize();
 }
Пример #32
0
        /**
         * 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");
        }
Пример #33
0
 public PingRequest(SIFHeaderType SIFHeader, PingType Ping)
 {
     this.SIFHeader = SIFHeader;
     this.Ping = Ping;
 }