public override void AddCards(PlayerViewModel viewModel, AddCardsCommand arg)
        {
            base.AddCards(viewModel, arg);

            foreach (CardInfo ci in arg.CardInfos)
            {
                CardViewModel card = MVVMKernelExtensions.CreateViewModel <CardViewModel> ();
                card.Info = ci;

                if (viewModel.IsSelf)
                {
                    card.Face = CardFace.FaceUp;
                }
                else
                {
                    card.Face = CardFace.FaceDown;
                }

                card.Place        = CardPlace.Floor;
                card.OwnerActorId = viewModel.ActorId;
                viewModel.HandCards.Add(card);
            }

            viewModel.ExecuteReorder();
        }
Exemple #2
0
        public static T Clone <T>(this T viewModel, bool includeCollections = true) where T : ViewModel
        {
            T clone = MVVMKernelExtensions.CreateViewModel <T>();

            foreach (var prop in viewModel.Properties)
            {
                var sourceP = prop.Property;
                var cloneP  = clone[sourceP.PropertyName].Property;

                if (!prop.IsCollectionProperty && !prop.IsComputed && !(prop.Property is StateMachine)) //regular property
                {
                    cloneP.ObjectValue = sourceP.ObjectValue;
                }
                else if (prop.IsComputed || prop.Property is StateMachine) //computed stuff
                {
                    //Those will be assigned automatically
                }
                else if (prop.IsCollectionProperty && includeCollections) //collections
                {
                    var sourceList = sourceP as IList;
                    var cloneList  = cloneP as IList;

                    for (int i = 0; i < sourceList.Count; i++)
                    {
                        cloneList.Add(sourceList[i]);
                    }
                }
            }



            return(clone);
        }
Exemple #3
0
        /// <summary>
        /// This is method is called by each view in order to get it's view-model as well as place it in
        /// the SceneContext if the "Save & Load" option is checked in it's inspector
        /// </summary>
        /// <param name="viewBase">The view that is requesting it's view-model.</param>
        /// <returns>A new view model or the view-model with the identifier specified found in the scene context.</returns>
        public static ViewModel FetchViewModel(ViewBase viewBase)
        {
            if (viewBase.ViewModelObject != null)
            {
                return(viewBase.ViewModelObject);
            }

            // Attempt to resolve it by the identifier
            //var contextViewModel = uFrameMVVMKernel.Container.Resolve<ViewModel>(viewBase.Identifier);
            // It now only registers under the viewmodeltype to allow multip different view-models with the same identifier
            var contextViewModel =
                uFrameKernel.Container.Resolve(viewBase.ViewModelType, viewBase.Identifier) as ViewModel;

            // If it doesn't resolve by the identifier we need to create it
            if (contextViewModel == null)
            {
                // Either use the controller to create it or create it ourselves
                contextViewModel = MVVMKernelExtensions.CreateViewModel(viewBase.ViewModelType, viewBase.Identifier);

                // Register it, this is usually when a non registered element is treated like a single-instance anways
                uFrameKernel.Container.RegisterInstance(viewBase.ViewModelType, contextViewModel,
                                                        string.IsNullOrEmpty(viewBase.Identifier) ? null : viewBase.Identifier);

                // Register it under the generic view-model type
                //uFrameMVVMKernel.Container.RegisterInstance<ViewModel>(contextViewModel, viewBase.Identifier);


                //Will be invoked in the controller.
                //uFrameKernel.EventAggregator.Publish(new ViewModelCreatedEvent()
                //{
                //    ViewModel = contextViewModel
                //});
            }
            // If we found a view-model
            if (contextViewModel != null)
            {
                // If the view needs to be overriden it will initialize with the inspector values
                if (viewBase.OverrideViewModel)
                {
                    viewBase.InitializeData(contextViewModel);
                }
                return(viewBase.ViewModelObject = contextViewModel);
            }

            return(contextViewModel);
        }
        public override void RefreshRoom(RoomPanelViewModel viewModel)
        {
            base.RefreshRoom(viewModel);

            viewModel.PlayerItems.Clear();

            Dictionary <int, Player> playerDic = Network.Client.CurrentRoom.Players;

            playerDic.OrderBy(kv => kv.Value.ID).ToList()
            .ForEach(kv => {
                PlayerItemViewModel vm = MVVMKernelExtensions.CreateViewModel <PlayerItemViewModel> ();
                vm.Player  = kv.Value;
                vm.ActerId = kv.Value.ID;
                vm.Name    = kv.Value.Name;
                vm.IsLocal = kv.Value.IsLocal;
                viewModel.PlayerItems.Add(vm);
            });
        }
Exemple #5
0
        object ITypeResolver.CreateInstance(string name, string identifier)
        {
            var type = ((ITypeResolver)this).GetType(name);

#if NETFX_CORE
            var isViewModel = type.GetTypeInfo().IsSubclassOf(typeof(ViewModel));
#else
            var isViewModel = typeof(ViewModel).IsAssignableFrom(type);
#endif

            if (isViewModel)
            {
                var contextViewModel = Container.Resolve(type, identifier);
                if (contextViewModel != null)
                {
                    return(contextViewModel);
                }
                return(MVVMKernelExtensions.CreateViewModel(type, identifier));
            }

            return(null);
        }
        public override void PlayerJoin(CoreGameRootViewModel viewModel)
        {
            base.PlayerJoin(viewModel);
            // 在 LBRoom 中查找 PlayerCollection 中没有的, 加入
            Network.Client.CurrentRoom.Players.OrderBy(_ => _.Key).ToList().ForEach(kv => {
                int actorId   = kv.Key;
                Player player = kv.Value;

                if (viewModel.PlayerCollection.ToList().Exists(vm => vm.ActorId == actorId) == false)
                {
                    PlayerViewModel playerVM    = MVVMKernelExtensions.CreateViewModel <PlayerViewModel> ();
                    playerVM.ActorId            = player.ID;
                    playerVM.PlayerName         = player.Name;
                    playerVM.IsSelf             = player.IsLocal;
                    playerVM.PlayerRoomIdentity = player.IsMasterClient ? RoomIdentity.RoomMaster : RoomIdentity.RoomGuest;
                    playerVM.LBPlayer           = player;

                    viewModel.PlayerCollection.Add(playerVM);
                }
            });

            viewModel.ExecuteCalcPosIdAndRepos();
            viewModel.ExecuteRefreshCoreGame();
        }