Пример #1
0
        private static void OnPlayerCharacterChanged(PlayerController player, FoyerCharacterSelectFlag selectCharacter, string characterPath)
        {
            if (player.name.ToLower().Contains(characterPath))
            {
                ToolsCharApi.Print("Selected: " + characterPath);
                if (selectCharacter.gameObject.activeSelf)
                {
                    selectCharacter.ClearOverheadElement();
                    selectCharacter.talkDoer.OnExitRange(null);
                    selectCharacter.gameObject.SetActive(false);
                    selectCharacter.GetComponent <SpeculativeRigidbody>().enabled = false;
                }
            }
            else if (!selectCharacter.gameObject.activeSelf)
            {
                selectCharacter.gameObject.SetActive(true);
                SpriteOutlineManager.RemoveOutlineFromSprite(selectCharacter.sprite, true);
                SpriteOutlineManager.AddOutlineToSprite(selectCharacter.sprite, Color.black);

                selectCharacter.specRigidbody.enabled = true;
                PhysicsEngine.Instance.RegisterOverlappingGhostCollisionExceptions(selectCharacter.specRigidbody, null, false);

                CharacterSelectIdleDoer idleDoer = selectCharacter.GetComponent <CharacterSelectIdleDoer>();
                idleDoer.enabled = true;
            }
        }
Пример #2
0
        public static void OnGUI()
        {
            if (Foyer.Foyer_0.foyerCharacterSelectFlag_0)
            {
                if (GUI.Button(new Rect(Screen.width - 100, Screen.height - 100, 50, 50), "Random"))
                {
                    FoyerCharacterSelectFlag[] array = acceptableFlags();
                    FoyerCharacterSelectFlag   f     = array[UnityEngine.Random.Range(0, array.Length - 1)];

                    Foyer.Foyer_0.StartCoroutine(((patch_Foyer)(Foyer.Foyer_0)).method_8(0.25f, f));
                    GameObject.Destroy(GameObject.FindObjectOfType <FoyerInfoPanelController>().gameObject);
                }
            }
        }
Пример #3
0
        private static void CreateOverheadCard(FoyerCharacterSelectFlag selectCharacter, CustomCharacterData data)
        {
            try
            {
                if (selectCharacter.OverheadElement == null)
                {
                    Debug.LogError($"CHR_{data.nameShort}Panel is null");
                    return;
                }

                if (selectCharacter.OverheadElement?.name == $"CHR_{data.nameShort}Panel")
                {
                    Debug.LogError($"CHR_{data.nameShort}Panel already exists");
                    return;
                }

                //Create new card instance
                selectCharacter.ClearOverheadElement();
                var theCauseOfMySuffering = FakePrefab.Clone(selectCharacter.OverheadElement.GetComponentInChildren <CharacterSelectFacecardIdleDoer>().gameObject);
                selectCharacter.OverheadElement = PrefabAPI.PrefabBuilder.Clone(selectCharacter.OverheadElement);
                //selectCharacter.OverheadElement.SetActive(true);
                selectCharacter.OverheadElement.name = $"CHR_{data.nameShort}Panel";
                selectCharacter.OverheadElement.GetComponent <FoyerInfoPanelController>().followTransform = selectCharacter.transform;
                //selectCharacter.OverheadElement.AddComponent<BotsMod.Debugger>();
                //BotsMod.BotsModule.Log("0", BotsMod.BotsModule.LOST_COLOR);


                var customFoyerController = selectCharacter.gameObject.AddComponent <CustomCharacterFoyerController>();
                customFoyerController.metaCost = data.metaCost;



                customFoyerController.useGlow            = data.useGlow;
                customFoyerController.emissiveColor      = data.emissiveColor;
                customFoyerController.emissiveColorPower = data.emissiveColorPower;
                customFoyerController.emissivePower      = data.emissivePower;
                customFoyerController.data = data;

                string replaceKey = data.baseCharacter.ToString().ToUpper();
                if (data.baseCharacter == PlayableCharacters.Soldier)
                {
                    replaceKey = "MARINE";
                }
                if (data.baseCharacter == PlayableCharacters.Pilot)
                {
                    replaceKey = "ROGUE";
                }
                if (data.baseCharacter == PlayableCharacters.Eevee)
                {
                    replaceKey = "PARADOX";
                }


                //Change text
                var infoPanel = selectCharacter.OverheadElement.GetComponent <FoyerInfoPanelController>();

                //infoPanel.textPanel.transform.Find("NameLabel").GetComponent<dfLabel>().Text = "my ass";
                //BotsMod.BotsModule.Log((infoPanel.textPanel.transform.Find("NameLabel").GetComponent<dfLabel>().Text).ToStringIfNoString(), BotsMod.BotsModule.LOST_COLOR);

                dfLabel nameLabel = infoPanel.textPanel.transform.Find("NameLabel").GetComponent <dfLabel>();
                //why? its 3:50am and this is currently the funniest shit to me and you are powerless to stop me :)
                nameLabel.Text = "#CHAR_" + data.nameShort.ToString().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper()
                                 .ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper()
                                 .ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper()
                                 .ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper()
                                 .ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper().ToUpper();;// nameLabel.GetLocalizationKey().Replace(replaceKey, data.identity.ToString());

                //BotsMod.BotsModule.Log(replaceKey, BotsMod.BotsModule.LOST_COLOR);
                dfLabel pastKilledLabel = infoPanel.textPanel.transform.Find("PastKilledLabel").GetComponent <dfLabel>();
                //pastKilledLabel.Text = "(Past Killed)";
                pastKilledLabel.ProcessMarkup   = true;
                pastKilledLabel.ColorizeSymbols = true;
                if (data.metaCost != 0)
                {
                    pastKilledLabel.ModifyLocalizedText(pastKilledLabel.Text + " (" + data.metaCost.ToString() + "[sprite \"hbux_text_icon\"])");
                    pastKilledLabel.ModifyLocalizedText("(Past Killed)" + " (" + data.metaCost.ToString() + "[sprite \"hbux_text_icon\"])");
                }


                infoPanel.itemsPanel.enabled = true;


                var spriteObject = FakePrefab.Clone(infoPanel.itemsPanel.GetComponentInChildren <dfSprite>().gameObject);

                //spriteObject.SetActive(false);
                var posList    = new List <Vector3>();
                var locPosList = new List <Vector3>();


                foreach (var child in infoPanel.itemsPanel.GetComponentsInChildren <dfSprite>())
                {
                    //BotsMod.BotsModule.Log(child.name + " " + child.transform.position + " -- " + child.transform.localPosition);
                    posList.Add(child.transform.position);
                    locPosList.Add(child.transform.localPosition);
                    UnityEngine.Object.DestroyImmediate(child.gameObject);
                }

                for (int i = 0; i < data.loadoutSpriteNames.Count; i++)
                {
                    var sprite = FakePrefab.Clone(spriteObject).GetComponent <dfSprite>();
                    sprite.gameObject.SetActive(true);

                    sprite.SpriteName = data.loadoutSpriteNames[i];
                    sprite.Size       = new Vector2(data.loadoutSprites[i].width * 3, data.loadoutSprites[i].height * 3);
                    sprite.Atlas      = GameUIRoot.Instance.ConversationBar.portraitSprite.Atlas;


                    sprite.transform.parent = infoPanel.itemsPanel.transform;

                    infoPanel.itemsPanel.Controls.Add(sprite);


                    sprite.transform.position      = new Vector3(1 + ((i + 0.1f) * 0.1f), -((i + 0.1f) * 0.1f), 0);
                    sprite.transform.localPosition = new Vector3(((i + 0.1f) * 0.1f), 0, 0);

                    //BotsMod.BotsModule.Log(data.loadoutSpriteNames[i] + sprite.transform.position + " -- " + sprite.transform.localPosition);
                }


                if (data.foyerCardSprites != null)
                {
                    var facecard = selectCharacter.OverheadElement.GetComponentInChildren <CharacterSelectFacecardIdleDoer>();
                    theCauseOfMySuffering.transform.parent               = facecard.transform.parent;
                    theCauseOfMySuffering.transform.localScale           = new Vector3(1, 1, 1);
                    theCauseOfMySuffering.transform.localPosition        = new Vector3(0, 1.687546f, 0.2250061f);
                    theCauseOfMySuffering.transform.parent.localPosition = new Vector3(0, 0, 0);
                    theCauseOfMySuffering.transform.parent.localScale    = new Vector3(0.2f, 0.2f, 1);
                    theCauseOfMySuffering.transform.parent.localScale    = new Vector3(0.1975309f, 0.1975309f, 1);
                    //theCauseOfMySuffering.transform.localScale = Vector3.one;
                    //facecard.gameObject.SetActive(false);
                    facecard.transform.parent = null;
                    UnityEngine.Object.Destroy(facecard.gameObject);
                    facecard = theCauseOfMySuffering.GetComponent <CharacterSelectFacecardIdleDoer>();
                    facecard.gameObject.name = data.nameShort + " Sprite FaceCard";
                    //facecard.RegenerateCache();


                    Debug.Log($"foyer cards arent null. {facecard.gameObject.transform.parent.position}");
                    Debug.Log($"foyer cards arent null. {facecard.gameObject.activeSelf}");

                    var orig = facecard.sprite.Collection;

                    var idleAnimName   = $"{data.nameShort}_facecard_idle";
                    var appearAnimName = $"{data.nameShort}_facecard_appear";

                    List <int> idleAnimIds   = new List <int>();
                    List <int> appearAnimIds = new List <int>();

                    List <int> toCopyAppearAnimIds = new List <int>
                    {
                        230,
                        231,
                        232,
                        233,
                        234,
                        235,
                        236,
                        237,
                        238,
                        239,
                        240,
                    };
                    List <int> toCopyIdleAnimIds = new List <int>
                    {
                        241,
                        242,
                        243,
                        244,
                    };

                    foreach (var sprite in data.foyerCardSprites)
                    {
                        if (sprite.name.ToLower().Contains("appear"))
                        {
                            appearAnimIds.Add(SpriteHandler.AddSpriteToCollectionWithAnchor(sprite, orig, tk2dBaseSprite.Anchor.LowerCenter, $"{data.nameShort}_{sprite.name}"));
                        }
                        else if (sprite.name.ToLower().Contains("idle"))
                        {
                            idleAnimIds.Add(SpriteHandler.AddSpriteToCollectionWithAnchor(sprite, orig, tk2dBaseSprite.Anchor.LowerCenter, $"{data.nameShort}_{sprite.name}"));
                        }
                        //ETGModConsole.Log(sprite.name);
                    }

                    Debug.Log($"anchors done");

                    for (int i = 0; i < appearAnimIds.Count; i++)
                    {
                        orig.spriteDefinitions[appearAnimIds[i]].position0 = i >= toCopyAppearAnimIds.Count || orig.spriteDefinitions[toCopyAppearAnimIds[i]] == null ? orig.spriteDefinitions[toCopyAppearAnimIds[9]].position0 : orig.spriteDefinitions[toCopyAppearAnimIds[i]].position0;
                        orig.spriteDefinitions[appearAnimIds[i]].position1 = i >= toCopyAppearAnimIds.Count || orig.spriteDefinitions[toCopyAppearAnimIds[i]] == null ? orig.spriteDefinitions[toCopyAppearAnimIds[9]].position1 : orig.spriteDefinitions[toCopyAppearAnimIds[i]].position1;
                        orig.spriteDefinitions[appearAnimIds[i]].position2 = i >= toCopyAppearAnimIds.Count || orig.spriteDefinitions[toCopyAppearAnimIds[i]] == null ? orig.spriteDefinitions[toCopyAppearAnimIds[9]].position2 : orig.spriteDefinitions[toCopyAppearAnimIds[i]].position2;
                        orig.spriteDefinitions[appearAnimIds[i]].position3 = i >= toCopyAppearAnimIds.Count || orig.spriteDefinitions[toCopyAppearAnimIds[i]] == null ? orig.spriteDefinitions[toCopyAppearAnimIds[9]].position3 : orig.spriteDefinitions[toCopyAppearAnimIds[i]].position3;

                        /*
                         * var safeForLaterName = orig.spriteDefinitions[appearAnimIds[i]].name;
                         * var safeForLaterBoundsDataCenter = orig.spriteDefinitions[appearAnimIds[i]].boundsDataCenter;
                         * var safeForLaterBoundsDataExtents = orig.spriteDefinitions[appearAnimIds[i]].boundsDataExtents;
                         * var safeForLaterUntrimmedBoundsDataCenter = orig.spriteDefinitions[appearAnimIds[i]].untrimmedBoundsDataCenter;
                         * var safeForLaterUntrimmedBoundsDataExtents = orig.spriteDefinitions[appearAnimIds[i]].untrimmedBoundsDataExtents;
                         * var safeForLaterUv = orig.spriteDefinitions[appearAnimIds[i]].uvs;
                         *
                         *
                         *
                         * def.name = safeForLaterName;
                         * def.boundsDataCenter = safeForLaterBoundsDataCenter;
                         * def.boundsDataExtents = safeForLaterBoundsDataExtents;
                         * def.untrimmedBoundsDataCenter = safeForLaterUntrimmedBoundsDataCenter;
                         * def.untrimmedBoundsDataExtents = safeForLaterUntrimmedBoundsDataExtents;
                         * def.uvs = safeForLaterUv;
                         *
                         * orig.spriteDefinitions[appearAnimIds[i]] = def;*/
                    }

                    Debug.Log($"appearAnimIds position0-3 done");

                    for (int i = 0; i < idleAnimIds.Count; i++)
                    {
                        orig.spriteDefinitions[idleAnimIds[i]].position0 = i >= toCopyIdleAnimIds.Count || orig.spriteDefinitions[toCopyIdleAnimIds[i]] == null ? orig.spriteDefinitions[toCopyIdleAnimIds[3]].position0 : orig.spriteDefinitions[toCopyIdleAnimIds[i]].position0;
                        orig.spriteDefinitions[idleAnimIds[i]].position1 = i >= toCopyIdleAnimIds.Count || orig.spriteDefinitions[toCopyIdleAnimIds[i]] == null ? orig.spriteDefinitions[toCopyIdleAnimIds[3]].position1 : orig.spriteDefinitions[toCopyIdleAnimIds[i]].position1;
                        orig.spriteDefinitions[idleAnimIds[i]].position2 = i >= toCopyIdleAnimIds.Count || orig.spriteDefinitions[toCopyIdleAnimIds[i]] == null ? orig.spriteDefinitions[toCopyIdleAnimIds[3]].position2 : orig.spriteDefinitions[toCopyIdleAnimIds[i]].position2;
                        orig.spriteDefinitions[idleAnimIds[i]].position3 = i >= toCopyIdleAnimIds.Count || orig.spriteDefinitions[toCopyIdleAnimIds[i]] == null ? orig.spriteDefinitions[toCopyIdleAnimIds[3]].position3 : orig.spriteDefinitions[toCopyIdleAnimIds[i]].position3;

                        /*
                         * var safeForLaterName = orig.spriteDefinitions[idleAnimIds[i]].name;
                         * var safeForLaterBoundsDataCenter = orig.spriteDefinitions[idleAnimIds[i]].boundsDataCenter;
                         * var safeForLaterBoundsDataExtents = orig.spriteDefinitions[idleAnimIds[i]].boundsDataExtents;
                         * var safeForLaterUntrimmedBoundsDataCenter = orig.spriteDefinitions[idleAnimIds[i]].untrimmedBoundsDataCenter;
                         * var safeForLaterUntrimmedBoundsDataExtents = orig.spriteDefinitions[idleAnimIds[i]].untrimmedBoundsDataExtents;
                         * var safeForLaterUv = orig.spriteDefinitions[idleAnimIds[i]].uvs;
                         *
                         *
                         *
                         * def.name = safeForLaterName;
                         * def.boundsDataCenter = safeForLaterBoundsDataCenter;
                         * def.boundsDataExtents = safeForLaterBoundsDataExtents;
                         * def.untrimmedBoundsDataCenter = safeForLaterUntrimmedBoundsDataCenter;
                         * def.untrimmedBoundsDataExtents = safeForLaterUntrimmedBoundsDataExtents;
                         * def.uvs = safeForLaterUv;
                         *
                         * orig.spriteDefinitions[idleAnimIds[i]] = def;*/
                    }
                    Debug.Log($"idleAnimIds position0-3 done");

                    foreach (var def in orig.spriteDefinitions)
                    {
                        if (def.name.ToLower().Contains("appear") || def.name.ToLower().Contains("idle"))
                        {
                            //ETGModConsole.Log($"{def.name} [{orig.GetSpriteIdByName(def.name)}]: {def.position0} - {def.position1} - {def.position2} - {def.position3}");
                        }
                    }
                    facecard.gameObject.SetActive(true);
                    facecard.spriteAnimator = facecard.gameObject.GetComponent <tk2dSpriteAnimator>();

                    SpriteBuilder.AddAnimation(facecard.spriteAnimator, orig, idleAnimIds, idleAnimName, tk2dSpriteAnimationClip.WrapMode.Loop, 4);
                    var name = SpriteBuilder.AddAnimation(facecard.spriteAnimator, orig, appearAnimIds, appearAnimName, tk2dSpriteAnimationClip.WrapMode.Once, 17);
                    Debug.Log($"anims added");
                    facecard.spriteAnimator.DefaultClipId = facecard.spriteAnimator.Library.GetClipIdByName(appearAnimName);

                    foreach (var anim in facecard.spriteAnimator.Library.clips)
                    {
                        //ETGModConsole.Log($"{anim.name}: {anim.frames.Length}");
                    }

                    facecard.appearAnimation   = appearAnimName;
                    facecard.coreIdleAnimation = idleAnimName;
                    Debug.Log($"foyer card done");
                }

                //selectCharacter.CreateOverheadElement();
            }

            catch (Exception e)
            {
                Debug.LogError("overhead thing broke: " + e);
            }
        }
Пример #4
0
        private static FoyerCharacterSelectFlag AddCharacterToFoyer(string characterPath, GameObject selectFlagPrefab)
        {
            //Gather character data
            var customCharacter = CharacterBuilder.storedCharacters[characterPath.ToLower()];


            //if (!CheckUnlocked(customCharacter.First))
            //{
            //    return null;
            //}

            ToolsCharApi.Print("    Got custom character");

            //Create new object



            FoyerCharacterSelectFlag selectFlag = GameObject.Instantiate(selectFlagPrefab).GetComponent <FoyerCharacterSelectFlag>();

            selectFlag.prerequisites = customCharacter.First.prerequisites;

            FakePrefab.MarkAsFakePrefab(selectFlag.gameObject);
            SceneManager.MoveGameObjectToScene(selectFlag.gameObject, SceneManager.GetActiveScene());

            selectFlag.transform.position  = customCharacter.First.foyerPos;
            selectFlag.CharacterPrefabPath = characterPath;
            selectFlag.name = "NPC_FoyerCharacter_" + customCharacter.First.nameShort;
            ToolsCharApi.Print("    Made select flag");

            //Replace sprites
            HandleSprites(selectFlag, customCharacter.Second.GetComponent <PlayerController>());
            ToolsCharApi.Print("    Replaced sprites");

            var td = selectFlag.talkDoer;

            GameObject groundThingHandler = new GameObject($"{customCharacter.First.nameShort}GroundThingHandler");

            groundThingHandler.transform.position = customCharacter.First.foyerPos;

            //Setup overhead card
            if (!string.IsNullOrEmpty(customCharacter.First.pathForSprites))
            {
                var idleDoer = selectFlag.gameObject.GetComponent <CharacterSelectIdleDoer>();

                idleDoer.AnimationLibraries  = customCharacter.First.idleDoer.AnimationLibraries;
                idleDoer.coreIdleAnimation   = customCharacter.First.idleDoer.coreIdleAnimation;
                idleDoer.onSelectedAnimation = customCharacter.First.idleDoer.onSelectedAnimation;
                idleDoer.EeveeTex            = customCharacter.First.idleDoer.EeveeTex;
                idleDoer.idleMax             = customCharacter.First.idleDoer.idleMax;
                idleDoer.idleMin             = customCharacter.First.idleDoer.idleMin;
                idleDoer.IsEevee             = customCharacter.First.idleDoer.IsEevee;
                idleDoer.phases = customCharacter.First.idleDoer.phases;
            }

            selectFlag.gameObject.GetComponent <tk2dSpriteAnimator>().DefaultClipId = customCharacter.Second.GetComponent <PlayerController>().spriteAnimator.GetClipIdByName("select_idle");

            if (customCharacter.First.removeFoyerExtras)
            {
                foreach (var child in selectFlag.gameObject.transform)
                {
                    //wow look i did a peta and killed a dog for no reason
                    if (((Transform)child).gameObject.name == "Doggy")
                    {
                        UnityEngine.Object.DestroyImmediate(((Transform)child).gameObject);
                    }
                }
                foreach (var phase in selectFlag.gameObject.GetComponent <CharacterSelectIdleDoer>().phases)
                {
                    phase.vfxTrigger           = CharacterSelectIdlePhase.VFXPhaseTrigger.NONE;
                    phase.endVFXSpriteAnimator = null;
                }
            }

            foreach (var thing in customCharacter.First.randomFoyerBullshitNNAskedFor)
            {
                UnityEngine.Object.Instantiate <GameObject>(thing.First, Foyer.Instance.transform.Find("Livery xform")).transform.position = customCharacter.First.foyerPos + thing.Second;
            }

            CreateOverheadCard(selectFlag, customCharacter.First);
            //FakePrefab.MarkAsFakePrefab(selectFlag.OverheadElement);
            //ETGModConsole.Log(selectFlag.OverheadElement.ToString());
            td.OverheadUIElementOnPreInteract = selectFlag.OverheadElement;
            //FakePrefab.MarkAsFakePrefab(td.OverheadUIElementOnPreInteract);
            ToolsCharApi.Print("    Made Overhead Card");

            //Change the effect of talking to the character
            foreach (var state in selectFlag.playmakerFsm.Fsm.FsmComponent.FsmStates)
            {
                foreach (var action in state.Actions)
                {
                    if (action is HutongCharacter)
                    {
                        ((HutongCharacter)action).PlayerPrefabPath = characterPath;
                    }
                }
            }


            MakeSkinSwapper(customCharacter.First);
            ToolsCharApi.Print("    Added swapper");

            //Make interactable
            if (!Dungeonator.RoomHandler.unassignedInteractableObjects.Contains(td))
            {
                Dungeonator.RoomHandler.unassignedInteractableObjects.Add(td);
            }
            ToolsCharApi.Print("    Adjusted Talk-Doer");

            //Player changed callback - Hides and shows player select object
            Foyer.Instance.OnPlayerCharacterChanged += (player) =>
            {
                OnPlayerCharacterChanged(player, selectFlag, characterPath);
            };
            ToolsCharApi.Print("    Added callback");

            return(selectFlag);
        }
        private static void CreateOverheadCard(FoyerCharacterSelectFlag selectCharacter, CustomCharacterData data)
        {
            //Create new card instance
            selectCharacter.ClearOverheadElement();
            selectCharacter.OverheadElement = FakePrefab.Clone(selectCharacter.OverheadElement);
            selectCharacter.OverheadElement.SetActive(true);

            string replaceKey = data.baseCharacter.ToString().ToUpper();

            if (data.baseCharacter == PlayableCharacters.Soldier)
            {
                replaceKey = "MARINE";
            }
            if (data.baseCharacter == PlayableCharacters.Pilot)
            {
                replaceKey = "ROGUE";
            }
            if (data.baseCharacter == PlayableCharacters.Eevee)
            {
                replaceKey = "PARADOX";
            }

            //Change text
            var infoPanel = selectCharacter.OverheadElement.GetComponent <FoyerInfoPanelController>();

            dfLabel nameLabel = infoPanel.textPanel.transform.Find("NameLabel").GetComponent <dfLabel>();

            nameLabel.Text = nameLabel.GetLocalizationKey().Replace(replaceKey, data.nameShort.ToUpper());

            dfLabel pastKilledLabel = infoPanel.textPanel.transform.Find("PastKilledLabel").GetComponent <dfLabel>();

            pastKilledLabel.Text = "(No Past)";

            infoPanel.itemsPanel.enabled = false;

            /*
             * infoPanel.itemsPanel.ResolutionChangedPostLayout += (a, b, c) =>
             * {
             *  infoPanel.itemsPanel.IsVisible = false;
             *  Tools.Print("called");
             * };
             */

            //Swap out face sprites
            if (data.foyerCardSprites != null)
            {
                var facecard       = selectCharacter.OverheadElement.GetComponentInChildren <CharacterSelectFacecardIdleDoer>();
                var orig           = facecard.sprite.Collection;
                var copyCollection = GameObject.Instantiate(orig);

                tk2dSpriteDefinition[] copyDefinitions = new tk2dSpriteDefinition[orig.spriteDefinitions.Length];
                for (int i = 0; i < copyCollection.spriteDefinitions.Length; i++)
                {
                    copyDefinitions[i] = orig.spriteDefinitions[i].Copy();
                }
                copyCollection.spriteDefinitions = copyDefinitions;

                for (int i = 0; i < data.foyerCardSprites.Count; i++)
                {
                    var tex = data.foyerCardSprites[i];
                    var def = copyCollection.GetSpriteDefinition(tex.name);

                    if (def != null)
                    {
                        Tools.ReplaceTexture(def, tex);
                        Console.WriteLine($"REPLACED {def.name} {def.material.mainTexture.width} {def.material.mainTexture.height}");
                    }
                }
                facecard.sprite.Collection = copyCollection;

                facecard.spriteAnimator.Library = GameObject.Instantiate(facecard.spriteAnimator.Library);
                GameObject.DontDestroyOnLoad(facecard.spriteAnimator.Library);
                foreach (var clip in facecard.spriteAnimator.Library.clips)
                {
                    for (int i = 0; i < clip.frames.Length; i++)
                    {
                        clip.frames[i].spriteCollection = copyCollection;
                    }
                }

                Console.WriteLine($"FOYERCARDDBG");
                for (int i = 0; i < copyCollection.spriteDefinitions.Length; i++)
                {
                    var def = copyCollection.spriteDefinitions[i];
                    Console.WriteLine(def.name);
                    if (!def.name.Contains("facecard"))
                    {
                        continue;
                    }

                    Console.WriteLine("FACECARD");
                    Console.WriteLine($"{def.material.mainTexture.width} {def.material.mainTexture.height} {def.uvs[0].x},{def.uvs[0].y} {def.uvs[1].x},{def.uvs[1].y} {def.uvs[2].x},{def.uvs[2].y} {def.uvs[3].x},{def.uvs[3].y} ");
                }
            }
            selectCharacter.OverheadElement.SetActive(false);
        }
        private static FoyerCharacterSelectFlag AddCharacterToFoyer(string characterPath, GameObject selectFlagPrefab)
        {
            //Gather character data
            var customCharacter = CharacterBuilder.storedCharacters[characterPath.ToLower()];

            if (customCharacter.First.characterID >= foyerPositions.Length)
            {
                Tools.PrintError("Not enough room in the foyer for: " + customCharacter.First.nameShort);
                Tools.PrintError("    Use the character command instead.");
                Tools.PrintError("    Jeez, how many characters do you need?");
                return(null);
            }
            Tools.Print("    Got custom character");

            //Create new object
            FoyerCharacterSelectFlag selectFlag = GameObject.Instantiate(selectFlagPrefab).GetComponent <FoyerCharacterSelectFlag>();

            selectFlag.transform.position  = foyerPositions[customCharacter.First.characterID];
            selectFlag.CharacterPrefabPath = characterPath;
            selectFlag.name = characterPath + "_FoyerSelectFlag";
            Tools.Print("    Made select flag");

            //Replace sprites
            HandleSprites(selectFlag, customCharacter.Second.GetComponent <PlayerController>());
            Tools.Print("    Replaced sprites");

            var td = selectFlag.talkDoer;

            //Setup overhead card
            CreateOverheadCard(selectFlag, customCharacter.First);
            td.OverheadUIElementOnPreInteract = selectFlag.OverheadElement;
            Tools.Print("    Made Overhead Card");

            //Change the effect of talking to the character
            foreach (var state in selectFlag.playmakerFsm.Fsm.FsmComponent.FsmStates)
            {
                foreach (var action in state.Actions)
                {
                    if (action is HutongCharacter)
                    {
                        ((HutongCharacter)action).PlayerPrefabPath = characterPath;
                    }
                }
            }

            //Make interactable
            if (!Dungeonator.RoomHandler.unassignedInteractableObjects.Contains(td))
            {
                Dungeonator.RoomHandler.unassignedInteractableObjects.Add(td);
            }
            Tools.Print("    Adjusted Talk-Doer");

            //Player changed callback - Hides and shows player select object
            Foyer.Instance.OnPlayerCharacterChanged += (player) =>
            {
                OnPlayerCharacterChanged(player, selectFlag, characterPath);
            };
            Tools.Print("    Added callback");

            return(selectFlag);
        }
Пример #7
0
 public static void ChangeCostumeHook(Action <FoyerCharacterSelectFlag> orig, FoyerCharacterSelectFlag foyerCharacterSelect)
 {
     ETGModConsole.Log("Costume Changed", false);
     orig(foyerCharacterSelect);
 }
Пример #8
0
 private extern IEnumerator orig_method_8(float float_0, FoyerCharacterSelectFlag foyerCharacterSelectFlag_1);
Пример #9
0
 public IEnumerator method_8(float float_0, FoyerCharacterSelectFlag flag)
 {
     return(orig_method_8(float_0, flag));
 }
Пример #10
0
        public static void FoyerCharacterDestroyHook(System.Action <FoyerCharacterSelectFlag> orig, FoyerCharacterSelectFlag self)
        {
            orig(self);

            if (!self.CharacterPrefabPath.Contains("PlayerRogue"))
            {
                //Module.Log("Destroying character select flag for: " + self.CharacterPrefabPath);

                Object.Destroy(self.gameObject);
            }
        }