Esempio n. 1
0
        public StationWorker GetStationWorker(FashionGameStation station)
        {
            StationWorker result = null;

            if (station is HoldingStation)
            {
                throw new ArgumentException("HoldingStations don't have workers", "station");
            }
            else if (station is HairStation)
            {
                result = mHairStationWorkers.GetNpc();
            }
            else if (station is MakeupStation)
            {
                result = mMakeupStationWorkers.GetNpc();
            }
            else if (station is TailorStation)
            {
                result = mSewingStationWorkers.GetNpc();
            }
            else
            {
                throw new ArgumentException("Unexpected ModelStation (" + station.GetType().Name + ")");
            }

            return(result);
        }
Esempio n. 2
0
        public void AssignWorker(StationWorker worker)
        {
            if (mWorkingAnimation == null)
            {
                throw new Exception("Attempting to use station (" + this.Name + ") without it's Working Animation loaded.");
            }
            if (mIdleAnimation == null)
            {
                throw new Exception("Attempting to use station (" + this.Name + ") without it's Idle Animation loaded.");
            }

            mWorker = worker;
            mWorker.UnityGameObject.transform.position = mStationWorkerTransform.position;
            mWorker.UnityGameObject.transform.rotation = mStationWorkerTransform.rotation;
            mWorker.PutAtStation(this);
            mWorker.SetWorkingAnimation(mWorkingAnimation);
            mWorker.SetIdleAnimation(mIdleAnimation);
        }
Esempio n. 3
0
        private IEnumerator <IYieldInstruction> BuildNpcs
        (
            Jobs job,
            FashionLevel level,
            IEnumerable <XmlNode> modelsXml,
            Hangout.Shared.Action onBuildingNpcsComplete
        )
        {
            // Key = FBID, Value = name, assets for model
            Dictionary <long, Pair <string, IEnumerable <Asset> > > modelInfos = new Dictionary <long, Pair <string, IEnumerable <Asset> > >();
            uint gettingAssets         = 0;
            ClientAssetRepository repo = GameFacade.Instance.RetrieveProxy <ClientAssetRepository>();

            foreach (XmlNode modelXml in modelsXml)
            {
                string  name;
                XmlNode fbidNode = modelXml.SelectSingleNode(".//@FBID");
                if (fbidNode == null)
                {
                    throw new Exception("modelXml doesn't have an FBID attribute: " + modelXml.OuterXml);
                }

                long uniqueId = long.Parse(fbidNode.InnerText);
                name = modelXml.Attributes["FirstName"].InnerText;                // +" " + modelXml.Attributes["LastName"].InnerText;

                // Only grab the avatars we don't already have loaded
                if (!JobHasNpc(job, uniqueId) && !modelInfos.ContainsKey(uniqueId))
                {
                    gettingAssets++;
                    List <AssetInfo> assetInfos = new List <AssetInfo>();
                    foreach (AssetInfo assetInfo in ClientAssetInfo.Parse(modelXml))
                    {
                        if (!mIgnoredAssets.Contains(assetInfo.AssetSubType))
                        {
                            assetInfos.Add(assetInfo);
                        }
                    }

                    repo.GetAssets <Asset>(assetInfos, delegate(IEnumerable <Asset> modelAssets)
                    {
                        gettingAssets--;
                        if (!modelInfos.ContainsKey(uniqueId))
                        {
                            modelInfos.Add(uniqueId, new Pair <string, IEnumerable <Asset> >(name, modelAssets));
                        }
                        else
                        {
                            Console.WriteLine("Attempted to download model info for " + uniqueId + " twice at the same time.");
                        }
                    });
                }
            }

            yield return(new YieldWhile(delegate()
            {
                return gettingAssets != 0;
            }));

            int spreadFrames = 25;
            List <Pair <long, INpc> > newNpcs = new List <Pair <long, INpc> >();

            foreach (KeyValuePair <long, Pair <string, IEnumerable <Asset> > > assets in modelInfos)
            {
                // This object will be cleaned up by the fashion model
                GameObject displayObject = (GameObject)GameObject.Instantiate(mRigPrototype);
                displayObject.SetActiveRecursively(false);

                HeadController headController = new HeadController(GameObjectUtility.GetNamedChildRecursive("Head", displayObject));
                BodyController bodyController = new BodyController(displayObject);

                bodyController.SetAssets(assets.Value.Second);
                headController.SetAssets(assets.Value.Second);

                bodyController.UpdateAssetsOverFrames(spreadFrames);
                headController.UpdateAssetsOverFrames(spreadFrames);

                INpc newNpc;
                if (job == Jobs.Model)
                {
                    newNpc = new FashionModel(assets.Value.First, level, displayObject, headController, bodyController);
                }
                else
                {
                    newNpc = new StationWorker(assets.Value.First, displayObject, headController, bodyController);
                }

                CharacterMediator.AddAnimationClipToRig(newNpc.DisplayObject, "Avatar/F_walk_normal_loop");
                CharacterMediator.AddAnimationClipToRig(newNpc.DisplayObject, "Avatar/F_idle_normal_loop");

                newNpcs.Add(new Pair <long, INpc>(assets.Key, newNpc));
            }

            yield return(new YieldWhile(delegate()
            {
                return spreadFrames-- != 0 || !mModelAnimationsDownloaded;
            }));

            foreach (Pair <long, INpc> npc in newNpcs)
            {
                switch (job)
                {
                case Jobs.Hair:
                    mHairStationWorkers.AddNpc(npc.First, npc.Second);
                    break;

                case Jobs.Makeup:
                    mMakeupStationWorkers.AddNpc(npc.First, npc.Second);
                    break;

                case Jobs.Model:
                    FashionModel newModel = (FashionModel)npc.Second;

                    newModel.SetImpatientSitIdle(mImpatientSitIdle);
                    newModel.SetSittingIdle(mSittingIdle);
                    newModel.SetMediumHurried(mMediumHurried, mMediumHurriedSpeed);
                    newModel.SetCatWalk(mCatWalk, mCatWalkSpeed);

                    mFashionModels.AddNpc(npc.First, npc.Second);
                    break;

                case Jobs.Seamstress:
                    mSewingStationWorkers.AddNpc(npc.First, npc.Second);
                    break;
                }
            }

            if (onBuildingNpcsComplete != null)
            {
                onBuildingNpcsComplete();
            }
        }