public AllocationManager(Animation anim, StateType type, AllocationManager previous = null) { this.anim = anim; this.type = type; RootWidget root = anim.AnimLayer.RootWidget; deckCards = new PlayingCardListAllocator(this, root.DeckPlaceholder); graveyardCards = new PlayingCardListAllocator(this, root.GraveyardPlaceholder); selectionCards = new PlayingCardListAllocator(this, root.SelectionPlaceholder); IGame game = ConnectionManager.Game; int count = game.Players.Count; playerHands = new Dictionary<int, PlayingCardListAllocator>(count); playerTables = new Dictionary<int, PlayingCardListAllocator>(count); playerLifePoints = new Dictionary<int, LifePointsCardAllocator>(count); playerRoles = new Dictionary<int, RoleCardAllocator>(count); foreach(IPublicPlayerView player in game.Players) { int playerId = player.ID; playerHands.Add(playerId, new PlayingCardListAllocator(this, root.GetPlayerHandPlaceholder(playerId))); playerTables.Add(playerId, new PlayingCardListAllocator(this, root.GetPlayerTablePlaceholder(playerId))); playerLifePoints.Add(playerId, new LifePointsCardAllocator(this, root.GetPlayerCharacterPlaceholder(playerId), anim.GetPlayerCharacterAnimator(playerId))); playerRoles.Add(playerId, new RoleCardAllocator(this, root.GetPlayerRolePlaceholder(playerId), anim.GetPlayerRoleAnimator(playerId))); } playingCardZoom = new CardZoomAllocator(this, anim.AnimLayer, anim.GetPlayingCardZoomAnimator()); roleCardZoom = new CardZoomAllocator(this, anim.AnimLayer, anim.GetRoleCardZoomAnimator()); characterCardZoom = new CardZoomAllocator(this, anim.AnimLayer, anim.GetCharacterCardZoomAnimator()); if(previous != null) { int thisPlayerId = 0; if(ConnectionManager.PlayerGameControl != null) thisPlayerId = ConnectionManager.PlayerGameControl.PrivatePlayerView.ID; List<PlayingCardAnimator> lastGraveyard = previous.graveyardCards.Animators; if(lastGraveyard.Count != 0) { PlayingCardAnimator prev = lastGraveyard[lastGraveyard.Count - 1]; PlayingCardAnimator a = anim.GetPlayingCardAnimator(prev.ID); a.GetState(type).Update(prev.GetState(previous.type)); this.graveyardCards.Animators.Add(a); } UpdateList(this.selectionCards, previous.selectionCards, previous.type); foreach(int id in previous.playerHands.Keys) UpdateList(this.playerHands[id], previous.playerHands[id], previous.type, type == StateType.End && id != thisPlayerId); foreach(int id in previous.playerTables.Keys) UpdateList(this.playerTables[id], previous.playerTables[id], previous.type); foreach(int id in previous.playerLifePoints.Keys) this.playerLifePoints[id].LifePoints = previous.playerLifePoints[id].LifePoints; this.playingCardZoom.Visible = previous.playingCardZoom.Visible; this.roleCardZoom.Visible = previous.roleCardZoom.Visible; this.characterCardZoom.Visible = previous.characterCardZoom.Visible; } }
public Animation(AnimationLayer layer, Animation lastAnim = null, TimeSpan animLength = default(TimeSpan)) { this.layer = layer; if(animLength.Ticks > 0L) this.animLength = animLength; else this.animLength = DefaultAnimDuration; onlyEnd = false; ended = false; sw = new Stopwatch(); playingCardAnimators = new Dictionary<int, PlayingCardAnimator>(); playerRoleAnimators = new Dictionary<int, RoleCardAnimator>(8); playerCharacterAnimators = new Dictionary<int, CharacterCardAnimator>(8); foreach(IPublicPlayerView player in ConnectionManager.Game.Players) { int id = player.ID; playerRoleAnimators[id] = new RoleCardAnimator(this, layer.GetPlayerRoleWidget(id)); playerCharacterAnimators[id] = new CharacterCardAnimator(this, layer.GetPlayerCharacterWidget(id)); if(lastAnim != null) { RoleCardState lastRoleState = lastAnim.playerRoleAnimators[id].EndState; playerRoleAnimators[id].StartState.Update(lastRoleState); playerRoleAnimators[id].EndState.Update(lastRoleState); CharacterCardState lastCharacterState = lastAnim.playerCharacterAnimators[id].EndState; playerCharacterAnimators[id].StartState.Update(lastCharacterState); playerCharacterAnimators[id].EndState.Update(lastCharacterState); } } playingCardZoomAnimator = new CardZoomAnimator(this, layer.GetPlayingCardZoomWidget()); roleCardZoomAnimator = new CardZoomAnimator(this, layer.GetRoleCardZoomWidget()); characterCardZoomAnimator = new CardZoomAnimator(this, layer.GetCharacterCardZoomWidget()); if(lastAnim != null) { startAllocManager = new AllocationManager(this, StateType.Start, lastAnim.endAllocManager); endAllocManager = new AllocationManager(this, StateType.End, lastAnim.endAllocManager); } else { startAllocManager = new AllocationManager(this, StateType.Start); endAllocManager = new AllocationManager(this, StateType.End); onlyEnd = true; } }