Example #1
0
        public async virtual Task <PlayerGameItem> GetCurrentPlayerInstance()
        {
            PlayerGameItem player = new PlayerGameItem();

            player.Id = GameManager.Instance.UserId;
            return(player);
        }
Example #2
0
        public async Task AddChild(string parentId, PlayerGameItem child)
        {
            //TODO: call the service to persistent child and update the parent-child relationship
            child = await CreatePlayerGameItem(child);

            await pgiRepository.UpdateParentChildRelation(parentId, child.Id, true);
        }
        public async Task <PlayerGameItem> CreatePlayerGameItem(PlayerGameItem item)
        {
            var playerString = JsonUtility.ToJson(item);

            PlayerPrefs.SetString(PREFS_GAMEITEM_KEY + item.Id, playerString);
            return(JsonUtility.FromJson <PlayerGameItem>(playerString));
        }
Example #4
0
        /// <summary>
        /// Bind a Character PlayerGameItem to this component, the prefab of of the Character will be displayed,
        /// and the equipment will be equipped
        /// </summary>
        /// <param name="gameItem"></param>
        /// <param name="localisablePrefabType"></param>
        public virtual async Task BindCharacterPGI(PlayerGameItem gameItem, LocalisablePrefabType localisablePrefabType = LocalisablePrefabType.InGame)
        {
            if (gameItem == null || gameItem.GiType != typeof(Character).Name)
            {
                Debug.LogError("Only Character PlayerGameItem is allowed!");
                return;
            }
            PlayerGameItem = gameItem;

            await AttachCharacterPrefabById(gameItem.GiId, localisablePrefabType);


            var equipments = gameItem.Equipments;//new List<CharacterEquipment>(GameManager.Instance.Players.Selected.PlayerDto.CharacterEquipments[gameItem.Id]);

            if (equipments != null)
            {
                PopulateCharacterEquipments(equipments);
                Updated = false;
                if (!Updated)
                {
                    //If the equipment is already displayed, we need to manually trigger the equipment process
                    //Otherwise it will be called automatically in RunMethod
                    await EquipAssets();
                }
            }
        }
Example #5
0
        public async Task <List <PlayerGameItem> > GetEquipments(string itemId)
        {
            var Equipments = new List <PlayerGameItem>();

            if (hasEquipment)
            {
                PlayerGameItem equipment = new PlayerGameItem();
                equipment.GiType     = "AddressableGameItem";
                equipment.GiId       = "AGI_Stick1";
                equipment.Id         = "4";
                equipment.PrefabType = LocalisablePrefabType.InGame;
                equipment.IsActive   = true;
                equipment.SetAttr(PlayerGameItem.ATTRS_SLOTTED, Enum.GetName(typeof(Slot), Slot.RHand));
                Equipments.Add(equipment);

                //Skin
                PlayerGameItem skin = new PlayerGameItem();
                skin.GiType     = "AddressableGameItem";
                skin.GiId       = "AGI_BallFishSkin1";
                skin.Id         = "5";
                skin.PrefabType = LocalisablePrefabType.InGame;
                skin.IsActive   = true;
                skin.SetAttr(PlayerGameItem.ATTRS_SLOTTED, Enum.GetName(typeof(Slot), Slot.Body));

                Equipments.Add(skin);
            }
            hasEquipment = !hasEquipment;
            return(Equipments);
        }
Example #6
0
        protected void DisplayPlayGameItems(Transform parent, PlayerGameItem item)
        {
            if (item != null)
            {
                //Get the position and rotation info for the GameItem
                var        position         = item.GetVector3Attr(PlayerGameItem.ATTRS_POSITION, Vector3.zero);
                var        rotationVariable = item.GetVector3Attr(PlayerGameItem.ATTRS_ROTATION, Vector3.zero);
                Quaternion rotation         = Quaternion.Euler(rotationVariable);

                GameObject gameObject = null;

                if (item.GiType == typeof(Level).Name)
                {
                    //Level
                    gameObject = Instantiate(LevelHolder,
                                             position, rotation, parent);
                }
                else if (item.GiType == typeof(Character).Name)
                {
                    //Create the character holder
                    gameObject = Instantiate(CharacterHolder,
                                             position, rotation, parent);
                    //Config the prefab
                    var holderComponent = gameObject.GetComponent <CharacterHolder>();
                    holderComponent.BindCharacterPGI(item, item.PrefabType);
                    if (item.IsPlayerCharacter())
                    {
                        //Link to the player's character holder
                        PlayerCharacterHolder = gameObject;
                    }
                }
                else if (item.GiType == typeof(AddressableGameItem).Name)
                {
                    AddressableGameItem gameItem = GameManager.Instance.AddressableGameItems.GetItem(item.GiId);
                    //Won't create GameObject for Skin (Texture).
                    if (gameItem.ContentType != Model.AddressableGameItemMeta.ContentType.Skin)
                    {
                        //AddressableGameItem
                        gameObject = Instantiate(AgiHolder,
                                                 position, rotation, parent);
                        //Config the prefab
                        var holderComponent = gameObject.GetComponent <AddressableGameItemHolder>();
                        holderComponent.Context.ContextMode = GameItems.ObjectModel.GameItemContext.ContextModeType.ByNumber;
                        holderComponent.Context.Number      = item.GiId;
                        holderComponent.PrefabType          = item.PrefabType;
                        holderComponent.PlayerGameItem      = item;
                    }
                }
                if (item.Children != null && gameObject != null)
                {
                    //Handle the children's display
                    foreach (var child in item.Children)
                    {
                        DisplayPlayGameItems(gameObject.transform, child);
                    }
                }
            }
        }
        /// <summary>
        /// Populate the assets of the GameItems
        /// </summary>
        /// <param name="pgi"></param>
        /// <returns></returns>
        public async Task PopulateGameItem(PlayerGameItem pgi)
        {
            Dictionary <string, List <string> > gameItems = new Dictionary <string, List <string> >();

            FetchGameItems(pgi, gameItems);
            //Load the GameItem assets.
            var resources = gameItems.Select(pair => GameManager.Instance.GetIBaseGameItemManager(pair.Key).LoadAddressableResources(pair.Value));
            await Task.WhenAll(resources);
        }
Example #8
0
        public async Task <PlayerGameItem> GetPlayerInstance()
        {
            //TODO:Get player profile by token
            string token = await LoadToken();

            string playerId = GameManager.Instance.UserId;

            PlayerGameItem player = await GetPlayerGameItem(playerId);

            return(player);
        }
Example #9
0
        public async virtual Task <PlayerGameItem> GetPlayerGameItem(string itemId)
        {
            PlayerGameItem character = new PlayerGameItem();

            character.GiType     = "Character";
            character.GiId       = "Character_BallFish";
            character.Id         = itemId;
            character.PrefabType = LocalisablePrefabType.Type1;
            character.IsActive   = true;
            character.SetFloatAttr(PlayerGameItem.ATTRS_HEALTH, UnityEngine.Random.Range(0, 100));

            return(character);
        }
        /// <summary>
        /// Get the GameItems from the PlayerGameItem and its children, then we can preload the resources in GameItems
        /// </summary>
        /// <param name="pgi"></param>
        /// <param name="gameItems"></param>
        private void FetchGameItems(PlayerGameItem pgi, Dictionary <string, List <string> > gameItems)
        {
            List <string> items;

            if (pgi.GiType == typeof(Character).Name && pgi.GetBoolAttr(PlayerGameItem.ATTRS_IS_PLAYER))
            {
                SelectedCharacter = pgi;
            }

            gameItems.TryGetValue(pgi.GiType, out items);
            if (items == null)
            {
                items = new List <string>();
                items.Add(pgi.GiId);
                gameItems[pgi.GiType] = items;
            }
            else if (!items.Contains(pgi.GiId))
            {
                items.Add(pgi.GiId);
            }
            if (pgi.Children != null)
            {
                foreach (var child in pgi.Children)
                {
                    FetchGameItems(child, gameItems);
                }
            }


            if (pgi.Equipments != null)
            {
                //Load equipments
                foreach (var equipment in pgi.Equipments)
                {
                    FetchGameItems(equipment, gameItems);
                }
            }

            //if (pgi.CharacterEquipments != null)
            //{
            //    //Load equipments
            //    foreach (var equipment in pgi.CharacterEquipments)
            //    {
            //        var equipItem = GameManager.Instance.PlayerGameItems.GetPlayerGameItemById(equipment.GameItemId);
            //        if (equipItem != null)
            //        {
            //            FetchGameItems(equipItem, gameItems);
            //        }
            //    }
            //}
        }
        public override bool RunMethod(EquipmentUpdatedMessage message)
        {
            if (itemHolder != null && message.CharacterId == itemHolder.PlayerGameItem.Id)
            {
                //It's me to update the equipment
                PlayerGameItem character = GameManager.Instance.PlayerGameItems.GetPlayerGameItemById(message.CharacterId);
                //Update the equipment list
                character.Equipments = message.NewEquipments;
                //Rebind
                ((CharacterHolder)this.itemHolder).BindCharacterPGI(character, character.PrefabType);
            }

            return(true);
        }
        public async Task <PlayerGameItem> GetCurrentPlayerInstance()
        {
            Channel channel = ChannelFactory.GetChannel();

            var client = new UserInfo.UserInfoClient(channel);

            var reply = await client.GetUserInfoAsync(new Google.Protobuf.WellKnownTypes.Empty());

            channel.ShutdownAsync().Wait();

            PlayerGameItem player = new PlayerGameItem();

            player.Id         = reply.Uid;
            player.CustomName = reply.Nickname;

            return(player);
        }
        public async Task <PlayerGameItem> GetPlayerGameItem(string itemId)
        {
            PlayerGameItem player = await HttpUtil.GetDummyAsync <PlayerGameItem>(GlobalConstants.SERVER_TISVC_PREFIX + "/Player");

            string playerString = PlayerPrefs.GetString(PREFS_GAMEITEM_KEY + itemId);

            if (string.IsNullOrEmpty(playerString))
            //if (true)
            {
                player = null;
                //Commented as we want to trigger the new account creation in client
                //Create the default one
                //playerString = JsonUtility.ToJson(MockPlayerInstance());
                //PlayerPrefs.SetString(DUMMY_PREFS_KEY + playerId, playerString);
            }
            player = JsonUtility.FromJson <PlayerGameItem>(playerString);

            return(player);
        }
Example #14
0
        protected List <PlayerGameItem> GenerateSeaweeds()
        {
            List <PlayerGameItem> seaweeds = new List <PlayerGameItem>();

            for (int i = 0; i < 20; i++)
            {
                PlayerGameItem seaweed = new PlayerGameItem();
                seaweed.GiType     = "AddressableGameItem";
                seaweed.GiId       = "AGI_Seaweeds";
                seaweed.Id         = seaweed.GiId + i;
                seaweed.PrefabType = (i % (LocalisablePrefabType.Type7 - LocalisablePrefabType.Type1 + 1) + LocalisablePrefabType.Type1);
                seaweed.SetVector3Attr(PlayerGameItem.ATTRS_POSITION, new Vector3(UnityEngine.Random.Range(-80, 80) / 10.0f,
                                                                                  0, UnityEngine.Random.Range(-70, 120) / 10.0f));
                seaweed.SetVector3Attr(PlayerGameItem.ATTRS_ROTATION, Quaternion.identity.eulerAngles);

                seaweeds.Add(seaweed);
                //seaweed.Props = Variables.FromJsonMapString(seaweed.Props.ToJsonMapString());
                //Debug.Log(seaweed.Props.ToJsonMapString());
            }

            return(seaweeds);
        }
 private PlayerGameItem SearchPlayerGameItem(string id, PlayerGameItem root)
 {
     if (root.Id == id)
     {
         return(root);
     }
     else
     {
         if (root.Children != null)
         {
             //Search in children
             foreach (var child in root.Children)
             {
                 var item = SearchPlayerGameItem(id, child);
                 if (item != null)
                 {
                     return(item);
                 }
             }
         }
     }
     return(null);
 }
Example #16
0
        private async Task HandlePlatformMessage(PlatformMessage message)
        {
            //Convert the PlatformMessage to specific message or handle it directly
            if (message.Content.ContainsKey(PlatformMessage.TYPE))
            {
                string type = message.Content[PlatformMessage.TYPE] as string;
                if (type == PlatformMessage.TYPE_CREATION_UPDATED)
                {
                    //Creation properties updated
                    string itemId = (string)message.Content[PlatformMessage.CONTENT_PGI_ID];

                    PlayerGameItem newItem = await PlayerGameItemService.Instance.GetPlayerGameItem(itemId);

                    //Clone the oldItem to avoid some message receiver may change the origin item
                    PlayerGameItem oldItem = JsonUtility.FromJson <PlayerGameItem>(JsonUtility.ToJson(GameManager.Instance.PlayerGameItems.GetPlayerGameItemById(newItem.Id)));
                    PlayerGameItemUpdatedMessage pgiMessage = new PlayerGameItemUpdatedMessage(oldItem, newItem);

                    GameManager.SafeQueueMessage(pgiMessage);
                    return;
                }
                else if (type == PlatformMessage.TYPE_EQUIPMENT_UPDATED)
                {
                    //Equipment updated
                    string itemId = (string)message.Content[PlatformMessage.CONTENT_PGI_ID];

                    List <PlayerGameItem> newEquipments = await PlayerGameItemService.Instance.GetEquipments(itemId);

                    //Copy the item to avoid some message receiver may change the origin item
                    List <PlayerGameItem> oldEquipments = JsonUtil.ListFromJson <PlayerGameItem>(JsonUtil.ListToJson <PlayerGameItem>(GameManager.Instance.PlayerGameItems.SelectedCharacter.Equipments));

                    EquipmentUpdatedMessage eqMessage = new EquipmentUpdatedMessage(itemId, oldEquipments, newEquipments);

                    GameManager.SafeQueueMessage(eqMessage);
                    return;
                }
            }
        }
Example #17
0
 public virtual Task <PlayerGameItem> CreatePlayerGameItem(PlayerGameItem item)
 {
     throw new NotImplementedException();
 }
        private PlayerGameItem PopulatePlayerGameItem(Creation.Creation creation)
        {
            PlayerGameItem item = null;

            if (creation != null)
            {
                //Copy the fields
                item        = new PlayerGameItem();
                item.GiType = creation.CreationType;
                item.GiId   = creation.Template;
                item.Id     = creation.Id;
                Enum.TryParse(creation.PrefabType, out item.PrefabType);
                item.CustomName   = creation.Name;
                item.ModelVersion = creation.SchemaVersion;
                item.IsActive     = "active" == creation.Status;
                item.Category     = creation.Category;

                //The props the logic cares
                if (creation.Attrs != null)
                {
                    foreach (var pair in creation.Attrs)
                    {
                        item.Attrs.Add(pair.Key, pair.Value);
                    }
                }
                //The extra props
                if (creation.ExtraProps != null)
                {
                    item.ExtraProps = Variables.FromDict(creation.ExtraProps);
                }
                //The children
                if (creation.Children != null && creation.Children.Count > 0)
                {
                    var children   = new List <PlayerGameItem>();
                    var equipments = new List <PlayerGameItem>();
                    foreach (var child in creation.Children)
                    {
                        var subItem = PopulatePlayerGameItem(child);
                        if (subItem.Category == "uw:pet:equipment")
                        {
                            //Equipment
                            if (subItem.IsActive)
                            {
                                //Only equip the actived item
                                equipments.Add(subItem);
                            }
                        }
                        else
                        {
                            //Normal item
                            children.Add(PopulatePlayerGameItem(child));
                        }
                    }
                    if (children.Count > 0)
                    {
                        item.Children = children;
                    }
                    if (equipments.Count > 0)
                    {
                        item.Equipments = equipments;
                    }
                }
            }
            return(item);
        }
Example #19
0
 public async Task <PlayerGameItem> CreatePlayerGameItem(PlayerGameItem item)
 {
     return(await pgiRepository.CreatePlayerGameItem(item));
 }
 public virtual async Task BindItem(CharacterHolder holderComponent, PlayerGameItem item)
 {
     await holderComponent.BindCharacterPGI(item, item.PrefabType);
 }
 public PlayerGameItemUpdatedMessage(PlayerGameItem oldItem, PlayerGameItem newItem)
 {
     OldItem = oldItem;
     NewItem = newItem;
 }
Example #22
0
        public async virtual Task <PlayerGameItem> LoadCurrentScene(string theme)
        {
            PlayerGameItem scene = new PlayerGameItem();

            scene.GiType     = "Level";
            scene.GiId       = "Level_sea1";
            scene.Id         = "1";
            scene.PrefabType = LocalisablePrefabType.InGame;

            //Generate the seaweeds
            scene.Children = GenerateSeaweeds();

            //Generate character
            PlayerGameItem character = new PlayerGameItem();

            character.GiType     = "Character";
            character.GiId       = "Character_Turtle";
            character.Id         = "2";
            character.PrefabType = LocalisablePrefabType.Type1;
            character.SetBoolAttr(PlayerGameItem.ATTRS_IS_PLAYER, true);

            scene.Children.Add(character);

            //Generate character
            character            = new PlayerGameItem();
            character.GiType     = "Character";
            character.GiId       = "Character_BallFish";
            character.Id         = "3";
            character.PrefabType = LocalisablePrefabType.Type1;
            character.IsActive   = false;

            scene.Children.Add(character);

            //Equipment: stick
            PlayerGameItem equipment = new PlayerGameItem();

            equipment.GiType     = "AddressableGameItem";
            equipment.GiId       = "AGI_Stick1";
            equipment.Id         = "4";
            equipment.PrefabType = LocalisablePrefabType.InGame;
            equipment.IsActive   = true;
            equipment.SetAttr(PlayerGameItem.ATTRS_SLOTTED, Enum.GetName(typeof(Slot), Slot.RHand));

            character.Equipments = new List <PlayerGameItem>();
            character.Equipments.Add(equipment);

            //Skin
            PlayerGameItem skin = new PlayerGameItem();

            skin.GiType     = "AddressableGameItem";
            skin.GiId       = "AGI_BallFishSkin1";
            skin.Id         = "5";
            skin.PrefabType = LocalisablePrefabType.InGame;
            skin.IsActive   = true;
            skin.SetAttr(PlayerGameItem.ATTRS_SLOTTED, Enum.GetName(typeof(Slot), Slot.Body));

            character.Equipments.Add(skin);

            //Debug.Log(JsonUtility.ToJson(scene));
            //Debug.Log(JsonConvert.SerializeObject(scene));
            return(scene);
        }