public TransformDelta(TransformContainer source, Transform dest) { position = dest.position - source.position; destRotation = dest.rotation; sourceRotation = source.rotation; // rotation = dest.rotation * Quaternion.Inverse(source.rotation); }
public TransformContainer copy() { TransformContainer result = new TransformContainer(); result.position = position; result.rotation = rotation; result.localScale = localScale; return(result); }
// 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); } }
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(); } }
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); }
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; } }
// 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); }
void Start() { _rg = GetComponent <Rigidbody>(); _restTransform = new TransformContainer(); UpdateRest(); }
public void UpdateRest() { _restTransform = new TransformContainer(); _restTransform.copyFrom(transform); }
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)); }
public void set(TransformContainer transformContainer) { position = transformContainer.position; rotation = transformContainer.rotation; }
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); }