예제 #1
0
 public override GameSaveState Create(GameEngine engine, Play.Player fromPlayer)
 {
     // Still need to a way to send users their state back
     //  I'm thinking that the CardIdentity.Key could be
     //  encrypted with Crypto.Encrypt(something,pkey)
     //  and the server could store the player private key
     //  so that you only have to ask the server to decrypt
     //  the key and figure out the type
     // still need the card that's targeting this card or vise versa
     this.GlobalVariables = engine.GlobalVariables;
     this.StopTurn        = engine.StopTurn;
     //this.TurnPlayer = engine.TurnPlayer.Id;
     if (engine.TurnPlayer != null)
     {
         this.TurnPlayer = engine.TurnPlayer.Id;
     }
     this.TurnNumber = engine.TurnNumber;
     if (Play.Player.LocalPlayer == fromPlayer)
     {
         CurrentUniqueId = engine.CurrentUniqueId;
     }
     Players         = Play.Player.All.Where(x => x.Id != fromPlayer.Id).Select(x => new PlayerSaveState().Create(x, fromPlayer)).ToArray();
     Table           = new GroupSaveState().Create(Program.GameEngine.Table, fromPlayer);
     Table.Visiblity = GroupVisibility.Undefined;
     SessionId       = engine.SessionId;
     return(this);
 }
예제 #2
0
 public override MarkerSaveState Create(Play.Marker marker, Play.Player fromPlayer)
 {
     this.Id    = marker.Model.Id;
     this.Count = marker.Count;
     this.Name  = marker.Model.Name;
     return(this);
 }
예제 #3
0
        public override CardSaveState Create(Play.Card card, Play.Player fromPlayer)
        {
            this.Id     = card.Id;
            this.Type   = card.Type.Model.Id;
            this.Index  = card.GetIndex();
            this.FaceUp = ((card.FaceUp && card.Group.Viewers.Contains(fromPlayer)) || (card.Group.Viewers.Contains(fromPlayer)) || card.IsVisibleToAll());
            X           = card.X;
            Y           = card.Y;

            this.Markers =
                card.Markers.Select(x => new MarkerSaveState().Create(x, fromPlayer)).ToArray();
            this.DeleteWhenLeavesGroup   = card.DeleteWhenLeavesGroup;
            this.OverrideGroupVisibility = card.OverrideGroupVisibility;
            this.Orientation             = card.Orientation;
            //this.IsTarget = card.tar
            //this.TargetedBy = card.TargetedBy.Id;
            if (card.TargetedBy != null)
            {
                this.TargetedBy = card.TargetedBy.Id;
            }
            this.TargetsOtherCards = card.TargetsOtherCards;
            this.HighlightColor    = card.HighlightColor;
            this.PeekingPlayers    = card.PeekingPlayers.Select(x => x.Id).ToArray();
            this.Alternate         = card.Alternate();
            this.Controller        = card.Controller.Id;
            this.Owner             = card.Owner.Id;
            this.Size = card.Size.Name;
            this.PropertyOverrides = card.PropertyOverrides;

            return(this);
        }
예제 #4
0
 public override CounterSaveState Create(Play.Counter counter, Play.Player fromPlayer)
 {
     this.Name   = counter.Name;
     this.Value  = counter.Value;
     this.TypeId = counter.Definition.Id;
     this.Id     = counter.Id;
     return(this);
 }
예제 #5
0
        public override GroupSaveState Create(Play.Group group, Play.Player fromPlayer)
        {
            this.Id = group.Id;

            if (group.Controller != null)
            {
                this.Controller = group.Controller.Id;
            }
            this.Cards     = group.Cards.Select(x => new CardSaveState().Create(x, fromPlayer)).ToArray();
            this.Viewers   = group.Viewers.Select(x => x.Id).ToArray();
            this.Visiblity = group.Visibility;
            return(this);
        }
예제 #6
0
        public JodsEngineGameSaveState Load(GameEngine engine, Play.Player fromPlayer)
        {
            var state = this;

            foreach (var gv in state.GlobalVariables)
            {
                Program.GameEngine.GlobalVariables[gv.Key] = gv.Value;
            }

            Program.GameEngine.StopTurn = state.StopTurn;
            Program.GameEngine.ChangeGameBoard(state.GameBoard);
            Program.GameEngine.TurnNumber   = state.TurnNumber;
            Program.GameEngine.ActivePlayer = Play.Player.Find(state.ActivePlayer);

            foreach (var player in state.Players)
            {
                var playPlayer = Play.Player.Find(player.Id);
                playPlayer.Color            = player.Color;
                playPlayer.ActualColor      = player.Color;
                playPlayer.Brush            = new SolidColorBrush(playPlayer.Color);
                playPlayer.TransparentBrush = new SolidColorBrush(playPlayer.Color)
                {
                    Opacity = 0.4
                };

                if (player is JodsEnginePlayerSaveState playerSaveState)
                {
                    foreach (var gv in playerSaveState.GlobalVariables)
                    {
                        playPlayer.GlobalVariables[gv.Key] = gv.Value;
                    }

                    foreach (var counter in playerSaveState.Counters)
                    {
                        var cnt = Play.Counter.Find(counter.Id);
                        cnt.SetValue(counter.Value, playPlayer, false, false);
                    }

                    foreach (var g in playerSaveState.Groups)
                    {
                        LoadGroup(g, fromPlayer);
                    }
                }
            }

            LoadGroup(Table, fromPlayer, true);

            return(this);
        }
예제 #7
0
        public override CardSaveState Create(Play.Card card, Play.Player fromPlayer)
        {
            this.Id      = card.Id;
            this.EncType = card.GetEncryptedKey().ToString();
            if (card.Type.Revealing || fromPlayer == Play.Player.LocalPlayer)
            {
                Type = card.Type.Model.Id;
            }
            else
            {
                Type = Guid.Empty;
            }
            this.Index  = card.GetIndex();
            this.FaceUp = ((card.FaceUp && card.Group.Viewers.Contains(fromPlayer)) || (card.Group.Viewers.Contains(fromPlayer)) ||
                           (card.PlayersLooking.Contains(fromPlayer) || card.PeekingPlayers.Contains(fromPlayer) ||
                            card.IsVisibleToAll()));
            X = card.X;
            Y = card.Y;

            this.Markers =
                card.Markers.Select(x => new MarkerSaveState().Create(x, fromPlayer)).ToArray();
            this.DeleteWhenLeavesGroup   = card.DeleteWhenLeavesGroup;
            this.OverrideGroupVisibility = card.OverrideGroupVisibility;
            this.Orientation             = card.Orientation;
            //this.IsTarget = card.tar
            //this.TargetedBy = card.TargetedBy.Id;
            if (card.TargetedBy != null)
            {
                this.TargetedBy = card.TargetedBy.Id;
            }
            this.TargetsOtherCards = card.TargetsOtherCards;
            this.HighlightColor    = card.HighlightColor;
            this.PeekingPlayers    = card.PeekingPlayers.Select(x => x.Id).ToArray();
            this.Alternate         = card.Alternate();
            this.Controller        = card.Controller.Id;
            this.Owner             = card.Owner.Id;

            return(this);
        }
예제 #8
0
        public GameSaveState Load(GameEngine engine, Play.Player fromPlayer)
        {
            var state = this;

            foreach (var gv in state.GlobalVariables)
            {
                Program.GameEngine.GlobalVariables[gv.Key] = gv.Value;
            }

            Program.GameEngine.StopTurn = state.StopTurn;
            Program.GameEngine.ChangeGameBoard(state.GameBoard);
            Program.GameEngine.TurnNumber = state.TurnNumber;
            Program.GameEngine.TurnPlayer = Play.Player.Find(state.TurnPlayer);

            foreach (var p in state.Players)
            {
                var player = Play.Player.Find(p.Id);
                foreach (var gv in p.GlobalVariables)
                {
                    player.GlobalVariables[gv.Key] = gv.Value;
                }

                foreach (var counter in p.Counters)
                {
                    var cnt = Play.Counter.Find(counter.Id);
                    cnt.SetValue(counter.Value, player, false, false);
                }

                foreach (var g in p.Groups)
                {
                    LoadGroup(g, fromPlayer);
                }
            }

            LoadGroup(Table, fromPlayer, true);

            return(this);
        }
예제 #9
0
 public abstract T1 Create(T tp, Play.Player fromPlayer);
예제 #10
0
        internal void LoadGroup(GroupSaveState g, Play.Player fromPlayer, bool isTable = false)
        {
            var group = Play.Group.Find(g.Id);

            if (!isTable)
            {
                group.Controller = Play.Player.Find(g.Controller);
            }
            group.Viewers    = g.Viewers.Select(Play.Player.Find).ToList();
            group.Visibility = g.Visiblity;
            foreach (var c in g.Cards)
            {
                var owner = Play.Player.Find(c.Owner);
                DataNew.Entities.Card model = null;
                if (c.Type != Guid.Empty)
                {
                    model =
                        Core.DataManagers.GameManager.Get()
                        .GetById(Program.GameEngine.Definition.Id)
                        .GetCardById(c.Type);
                }
                var card = Play.Card.Find(c.Id);
                if (fromPlayer == owner && card != null)
                {
                    //card.Type.Key = ulong.Parse(c.EncType);
                    card.SetModel(model.Clone());
                    //card.Type = new CardIdentity(card.Id){Key=(ulong)c.EncType,Model = model.Clone(),MySecret = owner == Play.Player.LocalPlayer};
                    //Play.Card.Remove(card);
                    //card = null;
                }
                if (card == null)
                {
                    card = new Play.Card(owner, c.Id, model, owner == Play.Player.LocalPlayer, c.Size);
                }
                group.Remove(card);
                group.Add(card);
                card.Group = group;
                card.SwitchTo(owner, c.Alternate, false);
                card.Controller            = Play.Player.Find(c.Controller);
                card.DeleteWhenLeavesGroup = c.DeleteWhenLeavesGroup;
                card.SetFaceUp(c.FaceUp);
                card.SetHighlight(c.HighlightColor);
                card.SetIndex(c.Index);
                card.Orientation = c.Orientation;
                card.SetOverrideGroupVisibility(c.OverrideGroupVisibility);
                card.SetTargetedBy(Play.Player.Find(c.TargetedBy));
                card.TargetsOtherCards = c.TargetsOtherCards;
                card.X = c.X;
                card.Y = c.Y;
                card.PropertyOverrides = c.PropertyOverrides;

                foreach (var m in c.Markers)
                {
                    card.SetMarker(card.Owner, m.Id, m.Name, m.Count, false);
                }
                foreach (var pp in c.PeekingPlayers.Select(Play.Player.Find))
                {
                    card.PeekingPlayers.Add(pp);
                }
            }
            group.OnCardsChanged();
        }
예제 #11
0
 public OPlayer(Play.Player player)
 {
     this.player = player;
 }
예제 #12
0
파일: GameSaveState.cs 프로젝트: wlk0/OCTGN
 public override GameSaveState Create(GameEngine tp, Play.Player fromPlayer)
 {
     return(Create(tp, fromPlayer, false));
 }