Esempio n. 1
0
 public TransformDelta(TransformContainer source, Transform dest)
 {
     position       = dest.position - source.position;
     destRotation   = dest.rotation;
     sourceRotation = source.rotation;
     // rotation = dest.rotation * Quaternion.Inverse(source.rotation);
 }
Esempio n. 2
0
    public TransformContainer copy()
    {
        TransformContainer result = new TransformContainer();

        result.position   = position;
        result.rotation   = rotation;
        result.localScale = localScale;
        return(result);
    }
Esempio n. 3
0
            // Extension for custom lerp from current transform values to target (pseudo-)transform values.

            public static void LerpTo(this Transform transform, TransformContainer target, float t, Space relativeTo = Space.Self)
            {
                if (relativeTo == Space.Self)
                {
                    transform.localPosition = Vector3.Lerp(transform.localPosition, target.position, t);
                    transform.localRotation = Quaternion.Slerp(transform.localRotation, target.rotation, t);
                }
                else
                {
                    transform.position = Vector3.Lerp(transform.localPosition, target.position, t);
                    transform.rotation = Quaternion.Slerp(transform.localRotation, target.rotation, t);
                }
            }
Esempio n. 4
0
            public static TransformContainer getRotationAround(Vector3 point, Vector3 axis, float angle)
            {
                TransformContainer ret = new TransformContainer();

                ret.position = Vector3.zero;
                ret.rotation = Quaternion.AngleAxis(angle, axis);

                Vector3 offset = ret.position - point;

                offset       = ret.rotation * offset;
                ret.position = point + offset;

                return(ret);
            }
 public void DrawModel(Model model, TransformContainer container)
 {
     foreach (ModelMesh mesh in model.Meshes)
     {
         foreach (BasicEffect effect in mesh.Effects)
         {
             effect.DiffuseColor = Color.Red.ToVector3();
             effect.EnableDefaultLighting();
             effect.World      = container.GetWorld();
             effect.View       = View;
             effect.Projection = Projection;
         }
         mesh.Draw();
     }
 }
Esempio n. 6
0
    public void Init()
    {
        _collidedObjectsSet = new HashSet <GameObject>();
        restTransform       = new TransformContainer();
        restTransform.copyFrom(transform);
        controller       = GetComponent <MovableObjectController>();
        _renderer        = GetComponent <Renderer>();
        _collider        = GetComponent <Collider>();
        _defaultMaterial = _renderer.sharedMaterial;
        IsActive         = false;
        if (!manager)
        {
            manager = FindObjectOfType <MovableObjectManager>();
        }

        manager.Register(this);
    }
Esempio n. 7
0
            public static void setRotationAround2(this Transform transform, Vector3 point, Vector3 axis, float angle, Space positionRelativeTo = Space.World, Space rotationRelativeTo = Space.World)
            {
                TransformContainer ret = new TransformContainer();

                ret.position = transform.position;
                ret.rotation = Quaternion.AngleAxis(angle, axis);

                Vector3 offset = ret.position - point;

                offset = ret.rotation * offset;

                ret.position = point + offset;

                Quaternion lookAtCenter = transform.rotation;

                ret.rotation = lookAtCenter * (Quaternion.Inverse(lookAtCenter) * ret.rotation * lookAtCenter);

                // ...

                if (positionRelativeTo == Space.Self)

                {
                    transform.localPosition = ret.position;
                }
                else
                {
                    transform.position = ret.position;
                }

                if (rotationRelativeTo == Space.Self)

                {
                    transform.localRotation = ret.rotation;
                }
                else
                {
                    transform.rotation = ret.rotation;
                }
            }
Esempio n. 8
0
            // Extension method version of getRotationAround() above.

            public static void setRotationAround(this Transform transform, Vector3 point, Vector3 axis, float angle, Space positionRelativeTo = Space.Self, Space rotationRelativeTo = Space.Self)
            {
                TransformContainer val = getRotationAround(point, axis, angle);

                if (positionRelativeTo == Space.Self)

                {
                    transform.localPosition = val.position;
                }
                else
                {
                    transform.position = val.position;
                }

                if (rotationRelativeTo == Space.Self)

                {
                    transform.localRotation = val.rotation;
                }
                else
                {
                    transform.rotation = val.rotation;
                }
            }
        public static bool Exit_Path(BattleManager __instance)
        {
            // 如果MOD状态是关闭的话
            if (!FormationMod.enable)
            {
                // 执行原本的方法
                return(true);
            }
            // 退出战斗时还原是否组成阵型的状态
            ModifierUtil.resetEnableStatus();

            __instance.DieEntityList.Clear();
            __instance.BrokenEquipmentMap.Clear();

            Dictionary <int, List <int> > mTeamEntities = Traverse.Create(__instance).Field("mTeamEntities").GetValue <Dictionary <int, List <int> > >();

            for (int i = 0; i < 2; i++)
            {
                mTeamEntities[i].Clear();
            }
            Dictionary <int, BattleEntityView> mEntityViewMap = Traverse.Create(__instance).Field("mEntityViewMap").GetValue <Dictionary <int, BattleEntityView> >();

            foreach (KeyValuePair <int, BattleEntityView> keyValuePair in mEntityViewMap)
            {
                BattleEntityView value = keyValuePair.Value;
                Singleton <ResourcesManager> .Instance.ReleaseInstance(value.mContainer.transform.gameObject);
            }
            mEntityViewMap.Clear();
            __instance.Hide();
            SingletonMonoBehaviour <UIManager> .Instance.CloseUnique(PanelEnum.Battle);

            SingletonMonoBehaviour <AudioManager> .Instance.StopAllMusic();

            SingletonMonoBehaviour <AudioManager> .Instance.PlayGameBGM();

            SingletonMonoBehaviour <UIManager> .Instance.ShowAll();

            TimeModel instance = SingletonMonoBehaviour <TimeModel> .Instance;
            int       timeStop = instance.TimeStop;

            instance.TimeStop = timeStop - 1;
            GameTempValue.GameSpeedHotKeyLock--;
            GameTempValue.MapMoveHotKeyLock--;
            GameTempValue.SamllMapKeyLock--;
            GameTempValue.TapKeyLock--;
            GameTempValue.BackpackKeyLock--;
            bool flag = false;

            Dictionary <int, BattleEntity> mEntities = Traverse.Create(__instance).Field("mEntities").GetValue <Dictionary <int, BattleEntity> >();

            foreach (KeyValuePair <int, BattleEntity> keyValuePair2 in mEntities)
            {
                BattleEntity value2 = keyValuePair2.Value;
                bool         flag2  = value2.mChr.GetCurrentValue(CharacterPropertyType.HP) == 0;
                if (flag2)
                {
                    value2.mChr.SetStatRawValue(CharacterPropertyType.HP, 1);
                }
                bool flag3 = !value2.mChr.IsPlayer();
                if (flag3)
                {
                    bool flag4 = value2.DroppedWeapon != null;
                    if (flag4)
                    {
                        value2.mChr.EquipItem(value2.DroppedWeapon);
                    }
                    value2.mChr.RemoveAllMartialModifier();
                }
                else
                {
                    bool flag5 = value2.TakenDamageMap.Count > 0;
                    if (flag5)
                    {
                        flag = true;
                    }
                }
                bool flag6 = value2.Team != 0 || value2.mChr.IsPlayer();
                if (flag6)
                {
                    value2.AddInjury();
                }
                __instance.RecycleEntity(value2);
            }
            mEntities.Clear();
            bool flag7 = flag;

            if (flag7)
            {
                SingletonMonoBehaviour <GuideModel> .Instance.TryGuide(0);
            }
            switch (__instance.BattleType)
            {
            case BattleType.Kill:
            case BattleType.Compete:
                SingletonMonoBehaviour <MapModel> .Instance.BattleEnd(__instance.BattleType, __instance.Result);

                break;

            case BattleType.Invade:
                SingletonMonoBehaviour <SchoolModel> .Instance.BattleEnd(__instance.BattleType, __instance.Result);

                break;

            case BattleType.LunWu:
                SingletonMonoBehaviour <MartialCompeteModel> .Instance.BattleEnd(__instance.BattleType, __instance.Result);

                break;
            }
            // 获取背景
            Traverse           mBackground      = Traverse.Create(__instance).Field("mBackground");
            TransformContainer mBackgroundValue = mBackground.GetValue <TransformContainer>();

            // 释放资源
            Singleton <ResourcesManager> .Instance.ReleaseInstance(mBackgroundValue.transform.gameObject);

            mBackground.SetValue(null);
            // 返回false表示不执行原方法
            return(false);
        }
        public static bool EnterBattle_Path(BattleManager __instance, BattleType battleType, List <int> playerChrIDList)
        {
            // 如果MOD状态是关闭的话
            if (!FormationMod.enable)
            {
                // 执行原本的方法
                return(true);
            }
            __instance.mAutoBattle = false;
            __instance.IsOver      = false;
            TimeModel instance = SingletonMonoBehaviour <TimeModel> .Instance;
            int       timeStop = instance.TimeStop;

            instance.TimeStop = timeStop + 1;
            GameTempValue.GameSpeedHotKeyLock++;
            GameTempValue.MapMoveHotKeyLock++;
            GameTempValue.SamllMapKeyLock++;
            GameTempValue.TapKeyLock++;
            GameTempValue.BackpackKeyLock++;
            //__instance.mBattleEntityIDMap.Clear();
            Dictionary <int, int> mBattleEntityIDMap = Traverse.Create(__instance).Field("mBattleEntityIDMap").GetValue <Dictionary <int, int> >();

            mBattleEntityIDMap.Clear();

            __instance.Show();
            // battle类型无法直接赋值
            Traverse mBattleTypeTraverse = Traverse.Create(__instance).Property("BattleType");

            mBattleTypeTraverse.SetValue(battleType);
            bool flag = battleType != BattleType.Invade;

            if (flag)
            {
                SingletonMonoBehaviour <MapModel> .Instance.AddState(MapPlayerState.Battle);
            }
            List <int> list;

            using (ListPool <int> .Block(out list))
            {
                foreach (KeyValuePair <int, string> keyValuePair in __instance.mEnemyTeamMap)
                {
                    int key = keyValuePair.Key;
                    list.Add(key);
                    // 不在这里进行buff添加
                    //Character chrByID = SingletonMonoBehaviour<CharacterModel>.Instance.GetChrByID(key);
                    //chrByID.AddAllMartialModifier();
                }
                __instance.PrepareBattleEntities(list, 1);
            }
            List <BattleEntity> list2;

            using (ListPool <BattleEntity> .Block(out list2))
            {
                __instance.GetEntityList(1, list2);
                for (int i = 0; i < list2.Count; i++)
                {
                    BattleEntityView battleEntityView = __instance.AddEntityView(list2[i], EntityForward.Left);
                    battleEntityView.transform.localPosition = __instance.GetScenePosByEntityPos(1, i);
                }
            }
            __instance.mPlayerTeamChrIDList.Clear();
            foreach (int num in playerChrIDList)
            {
                Character chrByID2 = SingletonMonoBehaviour <CharacterModel> .Instance.GetChrByID(num);

                bool flag2 = chrByID2.IsPlayer();
                if (flag2)
                {
                    __instance.mPlayerTeamChrIDList.Add(num);
                }
            }
            __instance.PrepareBattleEntities(playerChrIDList, 0);
            List <BattleEntity> list3 = ListPool <BattleEntity> .Get();

            __instance.GetEntityList(0, list3);
            for (int j = 0; j < list3.Count; j++)
            {
                BattleEntityView battleEntityView2 = __instance.AddEntityView(list3[j], EntityForward.Right);
                battleEntityView2.transform.localPosition = __instance.GetScenePosByEntityPos(0, j);
            }
            ListPool <BattleEntity> .Recycle(list3);

            string text  = null;
            bool   flag3 = battleType != BattleType.Invade;

            if (flag3)
            {
                RegionInfo curRegionInfo = SingletonMonoBehaviour <MapModel> .Instance.GetCurRegionInfo();

                text = curRegionInfo.BattleBG;
            }
            bool flag4 = string.IsNullOrEmpty(text);

            if (flag4)
            {
                text = "battle_bg_town0.prefab";
            }
            GameObject gameObject = (GameObject)Singleton <ResourcesManager> .Instance.GetInstance(text, string.Empty);

            bool flag5 = gameObject != null;

            if (flag5)
            {
                TransformContainer mContainer = Traverse.Create(__instance).Field("mContainer").GetValue <TransformContainer>();
                gameObject.transform.SetParent(mContainer["BackgroundRoot"].transform);
                gameObject.transform.localScale = Vector3.one;

                Traverse mBackground = Traverse.Create(__instance).Field("mBackground");
                mBackground.SetValue(new TransformContainer(gameObject.transform));
                //mBackground = new TransformContainer(gameObject.transform);
            }
            SingletonMonoBehaviour <UIManager> .Instance.HideAll();

            SingletonMonoBehaviour <UIManager> .Instance.OpenUnique(PanelEnum.Battle, Array.Empty <object>());

            AudioClip audioClip = SingletonMonoBehaviour <AudioModel> .Instance.GetAudioClip(SingletonMonoBehaviour <AudioModel> .Instance.mGameData.BattleStart);

            BGMLoop = SingletonMonoBehaviour <AudioModel> .Instance.GetAudioClip(SingletonMonoBehaviour <AudioModel> .Instance.mGameData.BattleLoop);

            SingletonMonoBehaviour <AudioManager> .Instance.PauseGameBGM();

            // bgm添加监听
            SingletonMonoBehaviour <AudioManager> .Instance.PlayMusic(audioClip, false, 0, new Action(OnBGMStartEnd_Patch));

            // 返回false表示不执行原方法
            return(false);
        }
Esempio n. 11
0
 void Start()
 {
     _rg            = GetComponent <Rigidbody>();
     _restTransform = new TransformContainer();
     UpdateRest();
 }
Esempio n. 12
0
 public void UpdateRest()
 {
     _restTransform = new TransformContainer();
     _restTransform.copyFrom(transform);
 }
Esempio n. 13
0
        public Actions Deserialize(ref JsonReader reader, IJsonFormatterResolver formatterResolver)
        {
            var dictionary = new Dictionary <string, IAction>();
            var count      = 0;

            while (reader.ReadIsInObject(ref count))
            {
                var name        = reader.ReadPropertyName();
                var actionCount = 0;

                Time               throttlePeriod = null;
                IAction            action         = null;
                string             @foreach       = null;
                int?               maxIterations  = null;
                TransformContainer transform      = null;
                ConditionContainer condition      = null;

                while (reader.ReadIsInObject(ref actionCount))
                {
                    var propertyName = reader.ReadPropertyNameSegmentRaw();

                    if (Fields.TryGetValue(propertyName, out var value))
                    {
                        switch (value)
                        {
                        case 0:
                            throttlePeriod = formatterResolver.GetFormatter <Time>()
                                             .Deserialize(ref reader, formatterResolver);
                            break;

                        case 1:
                            action = formatterResolver.GetFormatter <EmailAction>()
                                     .Deserialize(ref reader, formatterResolver);
                            break;

                        case 2:
                            action = formatterResolver.GetFormatter <WebhookAction>()
                                     .Deserialize(ref reader, formatterResolver);
                            break;

                        case 3:
                            action = formatterResolver.GetFormatter <IndexAction>()
                                     .Deserialize(ref reader, formatterResolver);
                            break;

                        case 4:
                            action = formatterResolver.GetFormatter <LoggingAction>()
                                     .Deserialize(ref reader, formatterResolver);
                            break;

                        case 5:
                            action = formatterResolver.GetFormatter <SlackAction>()
                                     .Deserialize(ref reader, formatterResolver);
                            break;

                        case 6:
                            action = formatterResolver.GetFormatter <PagerDutyAction>()
                                     .Deserialize(ref reader, formatterResolver);
                            break;

                        case 7:
                            @foreach = reader.ReadString();
                            break;

                        case 8:
                            transform = formatterResolver.GetFormatter <TransformContainer>()
                                        .Deserialize(ref reader, formatterResolver);
                            break;

                        case 9:
                            condition = formatterResolver.GetFormatter <ConditionContainer>()
                                        .Deserialize(ref reader, formatterResolver);
                            break;

                        case 10:
                            maxIterations = reader.ReadInt32();
                            break;
                        }
                    }
                    else
                    {
                        reader.ReadNextBlock();
                    }
                }

                if (action != null)
                {
                    action.Name           = name;
                    action.ThrottlePeriod = throttlePeriod;
                    action.Foreach        = @foreach;
                    action.MaxIterations  = maxIterations;
                    action.Transform      = transform;
                    action.Condition      = condition;
                    dictionary.Add(name, action);
                }
            }

            return(new Actions(dictionary));
        }
Esempio n. 14
0
 public void set(TransformContainer transformContainer)
 {
     position = transformContainer.position;
     rotation = transformContainer.rotation;
 }
Esempio n. 15
0
 public TransformContainer(TransformContainer transformContainer)
 {
     set(transformContainer);
 }
        public static bool UpdateChrInfos_Path(PanelBattle __instance)
        {
            // 如果MOD状态是关闭的话
            if (!FormationMod.enable)
            {
                // 执行原本的方法
                return(true);
            }
            for (BattleTeam battleTeam = BattleTeam.TEAM_PLAYER; battleTeam < BattleTeam.Count; battleTeam++)
            {
                List <BattleEntity> list = ListPool <BattleEntity> .Get();

                BattleManager.Instance.GetEntityList((int)battleTeam, list);
                for (int i = 0; i < list.Count; i++)
                {
                    BattleEntity       battleEntity = list[i];
                    int                id           = battleEntity.ID;
                    TransformContainer chrUI        = __instance.GetChrUI(id);
                    bool               flag         = chrUI != null;
                    if (flag)
                    {
                        TransformContainer billboard    = __instance.GetBillboard(id);
                        Vector3            transPostion = BattleManager.Instance.GetTransPostion(id);
                        Vector3            a            = __instance.WorldToUIPosition(transPostion);
                        // 放到身后
                        int directFlag = battleTeam == BattleTeam.TEAM_PLAYER ? -1 : 1;
                        a.x = directFlag * 800f;
                        billboard.rectTransform.anchoredPosition = a + new Vector3(0f, 0f, 0f);
                        float num        = (float)battleEntity.mChr.GetMaxValue(CharacterPropertyType.HP);
                        float num2       = (float)battleEntity.mChr.GetCurrentValue(CharacterPropertyType.HP);
                        float num3       = num2 / num;
                        float num4       = (float)battleEntity.mChr.GetEffectiveMaxValue(CharacterPropertyType.HP);
                        float fillAmount = num4 / num;
                        float num5       = (float)battleEntity.mChr.GetMaxValue(CharacterPropertyType.MP);
                        float num6       = (float)battleEntity.mChr.GetCurrentValue(CharacterPropertyType.MP);
                        float value      = num6 / num5;
                        billboard["HPSlider"].Slider.value   = num3;
                        chrUI["MaxHPImage"].Image.fillAmount = fillAmount;
                        chrUI["HPImage"].Image.fillAmount    = num3;
                        using (Zstring.Block())
                        {
                            Zstring value2 = Zstring.Format("{0}/{1}", num2, num);
                            chrUI["HPText"].TextMeshProUGUI.SetText(value2);
                        }
                        billboard["MPSlider"].Slider.value = value;
                        chrUI["MPSlider"].Slider.value     = value;
                        using (Zstring.Block())
                        {
                            Zstring value3 = Zstring.Format("{0}/{1}", num6, num5);
                            chrUI["MPText"].TextMeshProUGUI.SetText(value3);
                        }
                        int   spmax  = SingletonMonoBehaviour <BattleModel> .Instance.mGameData.SPMax;
                        float value4 = battleEntity.SP / (float)spmax;
                        chrUI["SPSlider"].Slider.value = value4;
                        chrUI["SPText"].TextMeshProUGUI.SetText("{0}/{1}", (float)((int)battleEntity.SP), (float)spmax);
                        chrUI["SpeedSlider"].Slider.value = battleEntity.SpeedValue;
                    }
                }
                ListPool <BattleEntity> .Recycle(list);
            }

            // 返回false表示不执行原方法
            return(false);
        }