Details

Last Updated
last week
First Uploaded
last week
Downloads
1.5K
Likes
0
Size
123KB
Dependency string
Brynzananas-Freaky_Eyes-1.3.0
Dependants

Created using https://thunderstore.io/package/Brynzananas/Body_Model_Additions_API/

All code as an example:

using System.Security.Permissions;
using System.Security;
using static BodyModelAdditionsAPI.Main;
using UnityEngine;
using RoR2;
using UnityEngine.AddressableAssets;
using System.Collections.Generic;
using Newtonsoft.Json.Utilities;
using System.Linq;
using UnityEngine.PlayerLoop;
using RoR2.CharacterAI;
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: HG.Reflection.SearchableAttribute.OptIn]
[assembly: HG.Reflection.SearchableAttribute.OptInAttribute]
[module: UnverifiableCode]
#pragma warning disable CS0618
#pragma warning restore CS0618
namespace FreakyEyes
{
    [BepInPlugin(ModGuid, ModName, ModVer)]
    [BepInDependency("com.brynzananas.bodymodeladditionsapi")]
    [System.Serializable]
    public class Main : BaseUnityPlugin
    {
        public const string ModGuid = "com.brynzananas.freakyeyes";
        public const string ModName = "Freaky Eyes";
        public const string ModVer = "1.3.0";
        public static AssetBundle assetBundle;
        public static PluginInfo PInfo { get; private set; }
        public static GameObject freakyEye;
        public void Awake()
        {
            PInfo = Info;
            assetBundle = AssetBundle.LoadFromFile(System.IO.Path.Combine(System.IO.Path.GetDirectoryName(PInfo.Location), "assetbundles", "freakyeye"));
            List<Material> materials = new List<Material>();
            materials.AddRange(assetBundle.LoadAllAssets<Material>());
            foreach (Material material in materials)
            {
                if (!material.shader.name.StartsWith("StubbedRoR2"))
                {
                    continue;
                }
                string shaderName = material.shader.name.Replace("StubbedRoR2", "RoR2") + ".shader";
                Shader replacementShader = Addressables.LoadAssetAsync<Shader>(shaderName).WaitForCompletion();
                if (replacementShader)
                {
                    material.shader = replacementShader;
                }
            }
            freakyEye = assetBundle.LoadAsset<GameObject>("Assets/CosmeticsMod/googlyeye.prefab");
            freakyEye.AddComponent<TrackingEye>();
            ModelPartInfo modelPartInfo = new ModelPartInfo
            {
                bodyName = "FlyingVerminBody",
                gameObject = freakyEye,
                inputString = "Body",
                codeAfterApplying = PlaceIt
            };
            new ModelPart(modelPartInfo);
            void PlaceIt(GameObject modelObject, ChildLocator childLocator, CharacterModel characterModel, ActivePartsComponent activePartsComponent)
            {
                ApplyFreakyTracking(modelObject, characterModel);
                modelObject.transform.localPosition = new Vector3(-0.45f, 0.641f, .89f);
                modelObject.transform.localScale = new Vector3(0.3f, 0.3f, 0.3f);
            }
            modelPartInfo = new ModelPartInfo
            {
                bodyName = "FlyingVerminBody",
                gameObject = freakyEye,
                inputString = "Body",
                codeAfterApplying = PlaceIt2
            };
            new ModelPart(modelPartInfo);
            void PlaceIt2(GameObject modelObject, ChildLocator childLocator, CharacterModel characterModel, ActivePartsComponent activePartsComponent)
            {
                ApplyFreakyTracking(modelObject, characterModel);
                modelObject.transform.localPosition = new Vector3(0.45f, 0.641f, .89f);
                modelObject.transform.localScale = new Vector3(0.3f, 0.3f, 0.3f);
            }
            modelPartInfo = new ModelPartInfo
            {
                bodyName = "VerminBody",
                gameObject = freakyEye,
                inputString = "Head",
                codeAfterApplying = PlaceIt3
            };
            new ModelPart(modelPartInfo);
            void PlaceIt3(GameObject modelObject, ChildLocator childLocator, CharacterModel characterModel, ActivePartsComponent activePartsComponent)
            {
                ApplyFreakyTracking(modelObject, characterModel);
                modelObject.transform.localPosition = new Vector3(-0.312f, 0.999f, -0.308f);
                modelObject.transform.localEulerAngles = new Vector3(-127.928f, 0, 0);
                modelObject.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f);
            }
            modelPartInfo = new ModelPartInfo
            {
                bodyName = "VerminBody",
                gameObject = freakyEye,
                inputString = "Head",
                codeAfterApplying = PlaceIt4
            };
            new ModelPart(modelPartInfo);
            void PlaceIt4(GameObject modelObject, ChildLocator childLocator, CharacterModel characterModel, ActivePartsComponent activePartsComponent)
            {
                ApplyFreakyTracking(modelObject, characterModel);
                modelObject.transform.localPosition = new Vector3(0.312f, 0.999f, -0.308f);
                modelObject.transform.localEulerAngles = new Vector3(-127.928f, 0, 0);
                modelObject.transform.localScale = new Vector3(0.2f, 0.2f, 0.2f);
            }
            modelPartInfo = new ModelPartInfo
            {
                bodyName = "LemurianBody",
                gameObject = freakyEye,
                inputString = "Head",
                codeAfterApplying = PlaceIt5
            };
            new ModelPart(modelPartInfo);
            void PlaceIt5(GameObject modelObject, ChildLocator childLocator, CharacterModel characterModel, ActivePartsComponent activePartsComponent)
            {
                ApplyFreakyTracking(modelObject, characterModel);
                modelObject.transform.localPosition = new Vector3(1.47f, 1.86f, -0.33f);
                modelObject.transform.localEulerAngles = new Vector3(-70f, 90, 0);
                modelObject.transform.localScale = new Vector3(0.6f, 0.6f, 0.6f);
            }
            modelPartInfo = new ModelPartInfo
            {
                bodyName = "LemurianBody",
                gameObject = freakyEye,
                inputString = "Head",
                codeAfterApplying = PlaceIt6
            };
            new ModelPart(modelPartInfo);
            void PlaceIt6(GameObject modelObject, ChildLocator childLocator, CharacterModel characterModel, ActivePartsComponent activePartsComponent)
            {
                ApplyFreakyTracking(modelObject, characterModel);
                modelObject.transform.localPosition = new Vector3(-1.47f, 1.86f, -0.33f);
                modelObject.transform.localEulerAngles = new Vector3(250f, 90, 0);
                modelObject.transform.localScale = new Vector3(0.6f, 0.6f, 0.6f);
            }
            modelPartInfo = new ModelPartInfo
            {
                bodyName = "LemurianBruiserBody",
                gameObject = freakyEye,
                inputString = "Head",
                codeAfterApplying = PlaceIt7
            };
            new ModelPart(modelPartInfo);
            void PlaceIt7(GameObject modelObject, ChildLocator childLocator, CharacterModel characterModel, ActivePartsComponent activePartsComponent)
            {
                ApplyFreakyTracking(modelObject, characterModel);
                modelObject.transform.localPosition = new Vector3(1.7f, 2f, -0.2f);
                modelObject.transform.localEulerAngles = new Vector3(-75f, 90, 0);
                modelObject.transform.localScale = new Vector3(0.7f, 0.7f, 0.7f);
            }
            modelPartInfo = new ModelPartInfo
            {
                bodyName = "LemurianBruiserBody",
                gameObject = freakyEye,
                inputString = "Head",
                codeAfterApplying = PlaceIt8
            };
            new ModelPart(modelPartInfo);
            void PlaceIt8(GameObject modelObject, ChildLocator childLocator, CharacterModel characterModel, ActivePartsComponent activePartsComponent)
            {
                ApplyFreakyTracking(modelObject, characterModel);
                modelObject.transform.localPosition = new Vector3(-1.7f, 2f, -0.2f);
                modelObject.transform.localEulerAngles = new Vector3(255f, 90, 0);
                modelObject.transform.localScale = new Vector3(0.7f, 0.7f, 0.7f);
            }
            void ApplyFreakyTracking(GameObject gameObject, CharacterModel characterModel)
            {
                if (characterModel && characterModel.body && characterModel.body.master)
                {
                    BaseAI baseAI = characterModel.body.master.GetComponent<BaseAI>();
                    if (baseAI != null)
                    {
                        TrackingEye trackingEye = gameObject.GetComponent<TrackingEye>();
                        trackingEye.baseAI = baseAI;
                    }
                }
            }
        }
        public class TrackingEye : MonoBehaviour
        {
            public Transform eyeBone;
            public Transform eyeTarget;
            public BaseAI baseAI;
            public PlayerCharacterMasterController characterMasterController;
            public bool freakier = false;
            public void Start()
            {
                if (baseAI == null)
                {
                    Destroy(this);
                    return;
                }
                eyeBone = transform;
                if(eyeBone == null)
                {
                    Destroy(this);
                    return;
                }
                freakier = Util.CheckRoll(5f);
            }
            public void FixedUpdate()
            {
                if (baseAI && baseAI.enemySearch != null && baseAI.enemySearch.candidatesEnumerable != null && baseAI.enemySearch.candidatesEnumerable.Count > 0)
                {
                    HurtBox hurtBox = baseAI.enemySearch.candidatesEnumerable.FirstOrDefault().hurtBox;
                    eyeTarget = hurtBox.transform;
                    if (freakier && hurtBox && hurtBox.healthComponent.body && hurtBox.healthComponent.body.master && hurtBox.healthComponent.body.master.playerCharacterMasterController)
                    {
                        characterMasterController = hurtBox.healthComponent.body.master.playerCharacterMasterController;
                        eyeTarget = characterMasterController.networkUser.cameraRigController.sceneCam.transform;
                    }
                }
            }
            public void LateUpdate()
            {
                if (eyeTarget && eyeBone)
                {
                    eyeBone.rotation = Quaternion.LookRotation((eyeTarget.transform.position - eyeBone.position).normalized);
                }
            }
        }
        
    }
}


Thunderstore development is made possible with ads. Please consider making an exception to your adblock.
Thunderstore development is made possible with ads. Please consider making an exception to your adblock.
Thunderstore development is made possible with ads. Please consider making an exception to your adblock.