Esempio n. 1
0
            private static bool Prefix(SeaMoth __instance)
            {
                var seamoth = __instance;

                if (seamoth.GetComponent <PrimaryTorpedo>() == null)
                {
                    var primary = seamoth.gameObject.AddComponent <PrimaryTorpedo>();
                    primary.Types = seamoth.torpedoTypes.Select((t) => t.techType).ToList();
                }

                var left  = __instance.gameObject.transform.Find("TorpedoSiloLeft").gameObject;
                var right = __instance.gameObject.transform.Find("TorpedoSiloRight").gameObject;

                var upperLeft = GameObject.Instantiate(left);

                upperLeft.name = "TorpedoSiloUpperLeft";
                upperLeft.transform.SetParent(__instance.transform, false);
                upperLeft.transform.localPosition += new Vector3(0, 0.2f, 0);

                var upperRight = GameObject.Instantiate(right);

                upperRight.name = "TorpedoSiloUpperRight";
                upperRight.transform.SetParent(__instance.transform, false);
                upperRight.transform.localPosition += new Vector3(0, 0.2f, 0);

                SubRoot baseParentComponent = __instance.GetComponentInParent <SubRoot>();
                bool    isDockedInCyclops   = __instance.docked && baseParentComponent != null & !baseParentComponent.isBase;
                string  isBaseText          = (baseParentComponent != null ? baseParentComponent.isBase.ToString() : "null");
                //Logger.Log($"Seamoth.Start: Docked in Cyclops: {isDockedInCyclops} (docked: {__instance.docked}, isBase: {isBaseText})");

                var torpedoSilos = new GameObject[] { left, right, upperLeft, upperRight };

                for (var i = 0; i < torpedoSilos.Length; ++i)
                {
                    var index      = i;
                    var silo       = torpedoSilos[i];
                    var handTarget = silo.GetComponent <GenericHandTarget>();
                    handTarget.onHandHover.RemoveAllListeners();
                    handTarget.onHandHover.AddListener((e) => {
                        seamoth.OnHoverTorpedoStorageEx(index, e.transform);
                    });

                    handTarget.onHandClick.RemoveAllListeners();
                    handTarget.onHandClick.AddListener((e) => {
                        seamoth.OpenTorpedoStorageEx(index, e.transform);
                    });

                    var collider = silo.GetComponent <CapsuleCollider>();
                    collider.height           = collider.height / 2;
                    collider.radius           = collider.radius / 2;
                    silo.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
                }

                if (isDockedInCyclops)
                {
                    var colliders = __instance.GetComponentsInChildren <Collider>();
                    foreach (var collider in colliders)
                    {
                        collider.enabled = false;
                    }
                }

                return(true);
            }