feat(battle-engine): full Unity/VFX/god-object shims + expanded copy closure (2570 files)
Authored Unity primitive/object-model shim, VFX layer (control-flow-preserving, InstantVfx never invokes its action -- headless suppression), god-object stubs (GameMgr/EffectMgr/UIManager with faithfully-extracted nested enums), View/UI/Touch tree, LitJson+BetterList+Tuple copied, third-party stubs. Discovered Roslyn header-error masking: fixing class-header type errors unmasks body references, so the true copy closure is ~2570 files (was 782 under masking). Errors: masked-25720 -> 268; our shim files compile clean. Remaining: ~50 residual shim/external types, 24 NGUI UI-base overrides, static-type fixes, plus likely 1-2 more unmask waves.
This commit is contained in:
204
SVSim.BattleEngine/Engine/PlayQueueViewBase.cs
Normal file
204
SVSim.BattleEngine/Engine/PlayQueueViewBase.cs
Normal file
@@ -0,0 +1,204 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using UnityEngine;
|
||||
using Wizard.Battle.View;
|
||||
using Wizard.Battle.View.Vfx;
|
||||
|
||||
public abstract class PlayQueueViewBase
|
||||
{
|
||||
protected const float REARRANGE_TIME = 0.5f;
|
||||
|
||||
protected const float ACCELERATE_REARRANGE_TIME = 0.2f;
|
||||
|
||||
private const float queueUpdateSpeed = 10f;
|
||||
|
||||
private const float aspectRatio_4_3 = 1.333f;
|
||||
|
||||
private const float SMOOTHING_AMOUNT = 0.01f;
|
||||
|
||||
private const float DECAY_MULTIPLIER = 5f;
|
||||
|
||||
private Action _computeCorners;
|
||||
|
||||
private List<IBattleCardView> queuedCards = new List<IBattleCardView>();
|
||||
|
||||
public Vector3 worldTopCornerPosition { get; private set; }
|
||||
|
||||
public Vector3 worldBottomCornerPosition { get; private set; }
|
||||
|
||||
protected abstract BattlePlayerBase BattlePlayerBase { get; }
|
||||
|
||||
protected abstract float RotationAmount { get; }
|
||||
|
||||
protected abstract Vector3 ScreenTopCornerPosition { get; }
|
||||
|
||||
protected abstract Vector3 ScreenBottomCornerPosition { get; }
|
||||
|
||||
public PlayQueueViewBase()
|
||||
{
|
||||
}
|
||||
|
||||
public PlayQueueViewBase(BattleCamera battleCamera)
|
||||
{
|
||||
PlayQueueViewBase playQueueViewBase = this;
|
||||
Camera cutInCamera = battleCamera.m_CutInCamera.GetComponent<Camera>();
|
||||
_computeCorners = delegate
|
||||
{
|
||||
float aspect = cutInCamera.aspect;
|
||||
playQueueViewBase.worldTopCornerPosition = cutInCamera.ScreenToWorldPoint(playQueueViewBase.ScreenTopCornerPosition);
|
||||
playQueueViewBase.worldTopCornerPosition = playQueueViewBase.BattlePlayerBase.HandControl.Transform.InverseTransformPoint(playQueueViewBase.worldTopCornerPosition);
|
||||
playQueueViewBase.worldTopCornerPosition += playQueueViewBase.GetScreenTopCornerOffset(aspect);
|
||||
playQueueViewBase.worldTopCornerPosition = playQueueViewBase.BattlePlayerBase.HandControl.Transform.TransformPoint(playQueueViewBase.worldTopCornerPosition);
|
||||
playQueueViewBase.worldBottomCornerPosition = cutInCamera.ScreenToWorldPoint(playQueueViewBase.ScreenBottomCornerPosition);
|
||||
playQueueViewBase.worldBottomCornerPosition = playQueueViewBase.BattlePlayerBase.HandControl.Transform.InverseTransformPoint(playQueueViewBase.worldBottomCornerPosition);
|
||||
playQueueViewBase.worldBottomCornerPosition += playQueueViewBase.GetScreenBottomCornerOffset(aspect);
|
||||
playQueueViewBase.worldBottomCornerPosition = playQueueViewBase.BattlePlayerBase.HandControl.Transform.TransformPoint(playQueueViewBase.worldBottomCornerPosition);
|
||||
};
|
||||
_computeCorners();
|
||||
}
|
||||
|
||||
public virtual void ForceClearPlayQueue()
|
||||
{
|
||||
queuedCards.Clear();
|
||||
}
|
||||
|
||||
public int QueueCount()
|
||||
{
|
||||
return queuedCards.Count;
|
||||
}
|
||||
|
||||
public virtual void RemoveCardFromView(IBattleCardView cardViewToRemove, bool keepLayer = false)
|
||||
{
|
||||
cardViewToRemove.ResetPlayQueueFlags();
|
||||
if (queuedCards.Count > 0 && queuedCards[0] == cardViewToRemove)
|
||||
{
|
||||
queuedCards.RemoveAt(0);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void InsertCardFromView(IBattleCardView originalView, IBattleCardView insertView)
|
||||
{
|
||||
if (queuedCards.Count > 0 && queuedCards[0] == originalView && queuedCards.Any((IBattleCardView c) => c == originalView))
|
||||
{
|
||||
queuedCards.Insert(queuedCards.IndexOf(originalView), insertView);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void ReplaceCard(IBattleCardView cardViewToAdd, IBattleCardView cardViewToRemove)
|
||||
{
|
||||
cardViewToAdd._hasCardEnteredPlayQueue = true;
|
||||
cardViewToAdd._waitUntilCardIsInQueueCoroutine = BattleCoroutine.GetInstance().StartCoroutine(WaitUntilCardIsInQueue(cardViewToAdd));
|
||||
cardViewToRemove.ResetPlayQueueFlags();
|
||||
if (queuedCards.Count > 0 && queuedCards[0] == cardViewToRemove)
|
||||
{
|
||||
queuedCards.RemoveAt(0);
|
||||
queuedCards.Insert(0, cardViewToAdd);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void ForceRemoveCardFromView(IBattleCardView cardViewToRemove)
|
||||
{
|
||||
cardViewToRemove.ResetPlayQueueFlags();
|
||||
queuedCards.Remove(cardViewToRemove);
|
||||
iTween.Stop(cardViewToRemove.GameObject);
|
||||
}
|
||||
|
||||
protected virtual bool IsCardPlayedInstantly(bool forceCardIntoPlayQueue)
|
||||
{
|
||||
return !forceCardIntoPlayQueue;
|
||||
}
|
||||
|
||||
public bool IsCardInQueue(IBattleCardView battleCardView)
|
||||
{
|
||||
return queuedCards.Contains(battleCardView);
|
||||
}
|
||||
|
||||
public void UpdatePlayQueuePositions(float deltaTime)
|
||||
{
|
||||
if (_computeCorners != null)
|
||||
{
|
||||
_computeCorners();
|
||||
}
|
||||
Vector3 delta = worldBottomCornerPosition - worldTopCornerPosition;
|
||||
for (int i = 0; i < queuedCards.Count; i++)
|
||||
{
|
||||
float t = (float)i / (float)queuedCards.Count;
|
||||
if (queuedCards[i].GameObject.activeSelf)
|
||||
{
|
||||
Vector3 b = CalculatePositionInQueue(t, delta, worldTopCornerPosition);
|
||||
queuedCards[i].Transform.position = Vector3.Lerp(queuedCards[i].Transform.position, b, MotionUtils.CalculateFrameRateIndependantDampingConstant(0.01f, 5f));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Vector3 CalculatePositionInQueue(float t, Vector3 delta, Vector3 queueTopPosition)
|
||||
{
|
||||
return new Vector3(delta.x * MotionUtils.GetEase(t, MotionUtils.EaseType.easeOutQuad), delta.y * MotionUtils.GetEase(t, MotionUtils.EaseType.linear), delta.z * MotionUtils.GetEase(t, MotionUtils.EaseType.linear)) + queueTopPosition;
|
||||
}
|
||||
|
||||
protected float CalculateAspectRatioMultiplier(float aspectRatio)
|
||||
{
|
||||
if (aspectRatio <= 1.333f)
|
||||
{
|
||||
aspectRatio = 1.333f;
|
||||
}
|
||||
return aspectRatio - 1f;
|
||||
}
|
||||
|
||||
protected float CalculateInverseAspectRatioMultiplier(float aspectRatio)
|
||||
{
|
||||
if (aspectRatio <= 1.333f)
|
||||
{
|
||||
aspectRatio = 1.333f;
|
||||
}
|
||||
return 1f / (aspectRatio - 1f);
|
||||
}
|
||||
|
||||
protected void AddCardToQueue(IBattleCardView playedCardView)
|
||||
{
|
||||
queuedCards.Add(playedCardView);
|
||||
if (!BattleManagerBase.GetIns().IsRecovery)
|
||||
{
|
||||
GameMgr.GetIns().GetSoundMgr().PlaySe(Se.TYPE.SYS_HAND_MOVE_CENTER);
|
||||
iTween.Stop(playedCardView.GameObject);
|
||||
if (playedCardView.GameObject.activeSelf)
|
||||
{
|
||||
iTween.RotateAdd(playedCardView.GameObject, iTween.Hash("y", RotationAmount, "time", 0.5f, "islocal", true, "easetype", iTween.EaseType.easeOutExpo));
|
||||
iTween.ScaleTo(playedCardView.GameObject, iTween.Hash("scale", Global.CARD_BATTLE_SCALE, "time", 0.5f, "islocal", true, "easetype", iTween.EaseType.easeOutExpo));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
protected VfxBase WaitUntilCardIsInQueueVfx(IBattleCardView playedCardView)
|
||||
{
|
||||
if (!BattleManagerBase.GetIns().IsRecovery)
|
||||
{
|
||||
playedCardView._hasCardEnteredPlayQueue = true;
|
||||
}
|
||||
return InstantVfx.Create(delegate
|
||||
{
|
||||
playedCardView._waitUntilCardIsInQueueCoroutine = BattleCoroutine.GetInstance().StartCoroutine(WaitUntilCardIsInQueue(playedCardView));
|
||||
});
|
||||
}
|
||||
|
||||
private IEnumerator WaitUntilCardIsInQueue(IBattleCardView playedCardView)
|
||||
{
|
||||
yield return new WaitForSeconds(0.5f);
|
||||
playedCardView._isCardQueuedToBePlayed = true;
|
||||
}
|
||||
|
||||
public abstract VfxBase AddCardToViewVfx(IBattleCardView playedCardView, bool forceCardIntoPlayQueue, bool isSelectTarget, bool isChoice, bool isChoiceBrave = false);
|
||||
|
||||
public abstract VfxBase InstantAddCardToViewVfx(IBattleCardView playedCardView, bool forceCardIntoPlayQueue, bool isChoice);
|
||||
|
||||
protected abstract Vector3 GetScreenTopCornerOffset(float aspectRatio);
|
||||
|
||||
protected abstract Vector3 GetScreenBottomCornerOffset(float aspectRatio);
|
||||
|
||||
protected void PlayPlayedCardEffect(IBattleCardView playedCardView)
|
||||
{
|
||||
GameMgr.GetIns().GetEffectMgr().Start(EffectMgr.EffectType.CMN_CARD_SET_1, playedCardView.GameObject.transform.position, playedCardView.GameObject.transform.rotation);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user