protected virtual IEnumerable <string> ResolveAssetPaths(IControlOutputContext context)
        {
            IAssetProvider assetProvider = (context.Control as IAssetProvider) ?? (context.Children.FirstOrDefault()?.Control as IAssetProvider);

            if (null == assetProvider)
            {
                yield break;
            }

            var extensions = assetProvider.GetAssetFileExtensions();

            if (null == extensions)
            {
                yield break;
            }

            extensions = extensions.Distinct();

            foreach (var extension in extensions)
            {
                var paths = assetProvider.GetAssetPaths(extension);

                if (null == paths)
                {
                    yield break;
                }

                foreach (var path in paths)
                {
                    yield return(path);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 异步加载所有子资源对象
        /// </summary>
        /// <param name="assetName">资源名称</param>
        /// <param name="assetType">资源类型</param>、
        /// <param name="syncLoadMode">同步加载模式</param>
        public AssetOperationHandle LoadSubAssetsAsync(string assetName, System.Type assetType, bool syncLoadMode)
        {
            IAssetProvider provider = TryGetProvider(assetName);

            if (provider == null)
            {
                if (this is AssetBundleLoader)
                {
                    provider = new AssetBundleSubProvider(this, assetName, assetType);
                }
                else if (this is AssetDatabaseLoader)
                {
                    provider = new AssetDatabaseSubProvider(this, assetName, assetType);
                }
                else
                {
                    throw new NotImplementedException($"{this.GetType()}");
                }
                _providers.Add(provider);
            }

            // 异步转同步
            if (syncLoadMode)
            {
                provider.SetSyncLoadMode();
            }

            // 引用计数增加
            provider.Reference();
            return(provider.Handle);
        }
 public MissingSecretNotesToken(
     IAssetTracker assetTracker,
     [ContentSource(ContentSource.GameContent)] IAssetProvider gameAssets
     )
     : base(assetTracker, gameAssets)
 {
 }
Ejemplo n.º 4
0
 public static Asset GetFile(this IAssetProvider assetProvider, NamedIdentifier name)
 {
     if (name.Name.IndexOf('/') == -1)
     {
         assetProvider.GetAssets().FirstOrDefault(p => p.NamedIdentifier.Equals(name));
     }
     var type = name.Name[..name.Name.IndexOf('/')] switch
Ejemplo n.º 5
0
        /// <summary>
        /// 加载资源对象
        /// </summary>
        /// <param name="assetName">资源名称</param>
        /// <param name="assetType">资源类型</param>
        /// <param name="param">附加参数</param>
        /// <returns></returns>
        public AssetOperationHandle LoadAssetAsync(string assetName, System.Type assetType, IAssetParam param)
        {
            IAssetProvider provider = TryGetProvider(assetName);

            if (provider == null)
            {
                if (assetType == typeof(SceneInstance))
                {
                    IsSceneLoader = true;
                    SceneInstanceParam sceneParam = param as SceneInstanceParam;
                    provider = new AssetSceneProvider(this, assetName, assetType, sceneParam);
                }
                else if (assetType == typeof(PackageInstance))
                {
                    throw new NotImplementedException(nameof(PackageInstance));
                }
                else
                {
                    if (this is AssetBundleLoader)
                    {
                        provider = new AssetBundleProvider(this, assetName, assetType);
                    }
                    else if (this is AssetDatabaseLoader)
                    {
                        provider = new AssetDatabaseProvider(this, assetName, assetType);
                    }
                    else
                    {
                        throw new NotImplementedException($"{this.GetType()}");
                    }
                }
                _providers.Add(provider);
            }
            return(provider.Handle);
        }
        public TModel?ReadJson <TModel>(
            string path,
            IAssetProvider assetProvider,
            Action <JsonSerializerSettings>?settings
            )
            where TModel : class
        {
            // Validate path
            if (string.IsNullOrWhiteSpace(path))
            {
                throw new ArgumentException("The file path is empty or invalid.", nameof(path));
            }

            // Read from file stream directly
            try
            {
                using var stream = assetProvider.Open(path, FileMode.Open);
                return(this.Deserialize <TModel>(new StreamReader(stream), settings));
            }
            catch (FileNotFoundException)
            {
                return(null);
            }
            catch (DirectoryNotFoundException)
            {
                return(null);
            }
        }
 public MissingSecretNotesToken(
     IModHelper helper,
     [ContentSource(ContentSource.GameContent)] IAssetProvider gameAssets
     )
     : base(helper, gameAssets)
 {
 }
Ejemplo n.º 8
0
        public void CreateStage(ConfigDataStage configDataStage, IAssetProvider assetProvider)
        {
            var stagePrefab = assetProvider.GetAsset <GameObject>(configDataStage.Prefab);
            var go          = GameObject.Instantiate(stagePrefab);

            go.transform.SetParent(StageRoot.transform, false);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Adds an asset provider to the list.
        /// </summary>
        public void AddAssetProvider(IAssetProvider provider)
        {
            if (provider == null)
                throw new AssetException("Cannot add a null provider");

            providers.Add(provider);
        }
Ejemplo n.º 10
0
 public AnimalFactory(IAssetProvider assetProvider, ILevelMediator levelMediator, ICoroutineRunner coroutineRunner, IRandomService randomService)
 {
     _assetProvider   = assetProvider;
     _levelMediator   = levelMediator;
     _coroutineRunner = coroutineRunner;
     _randomService   = randomService;
 }
Ejemplo n.º 11
0
        public BoardView(GameModel game, GameController controller, IAssetProvider assetProvider)
        {
            InitializeComponent();

            for (int i = 0; i < game.Dimension; i++)
            {
                gridCells.ColumnDefinitions.Add(new ColumnDefinition());
                gridCells.RowDefinitions.Add(new RowDefinition());
            }

            for (int i = 0; i < game.Dimension; ++i)
            {
                for (int k = 0; k < game.Dimension; k++)
                {
                    int cellIndex = i * game.Dimension + k;
                    var cell      = game.Cells[cellIndex];

                    var cellView = new CellView(cell, assetProvider.GetAssetForId(cell.MatchId));
                    Grid.SetRow(cellView, i);
                    Grid.SetColumn(cellView, k);

                    cellView.MouseDown += delegate { controller.ClickCell(cell); };

                    gridCells.Children.Add(cellView);
                }
            }
        }
Ejemplo n.º 12
0
        public static async void LoadDefaultValues(IAssetProvider assetProvider)
        {
            XmlDocument doc = new XmlDocument();

            using (FileStream stream = await assetProvider.OpenContentFile("Assets" + assetProvider.DirectorySeparatorChar + "entities.xml"))
            {
                doc.Load(stream);
            }

            defaultValueDict = new Dictionary <LevelObjectType, Dictionary <string, string> >();

            XmlNodeList list = doc.DocumentElement.ChildNodes;

            for (int i = 0; i < list.Count; i++)
            {
                XmlNode node = list[i];
                Dictionary <string, string> entityValues = new Dictionary <string, string>();
                for (int j = 0; j < node.ChildNodes.Count; j++)
                {
                    string name  = node.ChildNodes[j].Name;
                    string value = node.ChildNodes[j].InnerText;
                    entityValues.Add(name, value);
                }
                defaultValueDict.Add((LevelObjectType)int.Parse(node.Attributes["type"].InnerText), entityValues);
            }
        }
Ejemplo n.º 13
0
        public static T Read <T>(IAssetProvider assetProvider, IServiceProvider services, string fullPath) where T : class
        {
            ReadFromFile read;

            if (!ReadRegistry.TryGetValue(typeof(T), out read))
            {
                throw new InvalidOperationException("Unknown asset type");
            }

            var gd = ((IGraphicsDeviceService)services.GetService(typeof(IGraphicsDeviceService))).GraphicsDevice;

            return((T)read(fullPath, assetProvider, gd));

            /*
             * if (typeof(T) == typeof(AnimationSet))
             * {
             *      var gd = ((IGraphicsDeviceService)services.GetService(typeof(IGraphicsDeviceService))).GraphicsDevice;
             *      return (T)(object)AnimationSet.ReadFromFile(fullPath, gd);
             * }
             * else if(typeof(T) == typeof(Level))
             * {
             * var gd = ((IGraphicsDeviceService)services.GetService(typeof(IGraphicsDeviceService))).GraphicsDevice;
             * return (T)(object)Level.ReadFromFile(fullPath, assetProvider, gd);
             * }
             * else if(typeof (T) == typeof (Cue))
             * {
             * return (T)(object)Cue.ReadFromFile(fullPath);
             * }
             * else
             * {
             * throw new InvalidOperationException("Unknown asset type");
             * }
             */
        }
 public MissingJournalScrapsToken(
     IModHelper helper,
     [ContentSource(ContentSource.GameContent)] IAssetProvider gameAssets
     )
     : base(helper, gameAssets)
 {
 }
 public MissingJournalScrapsToken(
     IAssetTracker assetTracker,
     [ContentSource(ContentSource.GameContent)] IAssetProvider gameAssets
     )
     : base(assetTracker, gameAssets)
 {
 }
Ejemplo n.º 16
0
        public static InitializeRequest Initialize(bool forceAssetBundle, IAssetPathProvider pathProvider)
        {
            if (pathProvider != null)
            {
                PathProvider = pathProvider;
            }
            if (assetProvider != null)
            {
                if ((forceAssetBundle && assetProvider is AssetDatabaseAssetProvider) || (!forceAssetBundle && assetProvider is AssetBundleAssetProvider))
                {
                    Destroy();
                }
            }
#if UNITY_EDITOR
            //仅编辑器模式下才可以使用AssetDatabase进行加载
            if (assetProvider == null && !forceAssetBundle)
            {
                assetProvider = new AssetDatabaseAssetProvider();
            }
#endif
            if (assetProvider == null)
            {
                assetProvider = new AssetBundleAssetProvider();
            }
            return(assetProvider.Initialize());
        }
Ejemplo n.º 17
0
        public MainGame(IAssetProvider setAssetProvider)
        {
            AssetProvider       = setAssetProvider;
            MainGame.WinWarGame = this;

            Log.Severity = LogSeverity.Fatal;
            Log.Type     = LogType.Performance;

            this.IsMouseVisible = false;

            this.IsFixedTimeStep = false;

            backgroundClearColor = new Color(0x7F, 0x00, 0x00);

            currentGameScreen = null;
            nextGameScreen    = null;

            _graphics = new GraphicsDeviceManager(this);
            _graphics.PreferredBackBufferWidth  = 320 * 3;
            _graphics.PreferredBackBufferHeight = 200 * 3;
            _graphics.ApplyChanges();

            Content.RootDirectory = "Assets";

#if IOS
            MouseCursor.IsVisible = false;
#endif
        }
Ejemplo n.º 18
0
 public LevelFactory(IAssetProvider assetProvider, IMainHeroFactory mainHeroFactory, IAnimalFactory animalFactory, ILevelMediator gameMediator, ICoroutineRunner coroutineRunner)
 {
     _mainHeroFactory = mainHeroFactory;
     _animalFactory   = animalFactory;
     _assetProvider   = assetProvider;
     _gameMediator    = gameMediator;
     _coroutineRunner = coroutineRunner;
 }
Ejemplo n.º 19
0
 /// <summary>
 /// Registers the given asset provider. Use this method to register asset providers
 /// for the platform (desktop, mobile, web) your main application should run on.
 /// </summary>
 /// <param name="assetProvider">The asset provider to register.</param>
 public void RegisterAssetProvider(IAssetProvider assetProvider)
 {
     if (_providers.Contains(assetProvider))
     {
         throw new InvalidOperationException("Asset Provider already registered " + assetProvider);
     }
     _providers.Add(assetProvider);
 }
Ejemplo n.º 20
0
        public UiGenerator(IAssetProvider assetProvider, MonoBehaviourProvider monoBehaviourProvider)
        {
            _assetProvider         = assetProvider;
            _monoBehaviourProvider = monoBehaviourProvider;
            var canvasPrefab = _assetProvider.GetCanvasPrefab();

            _canvas = _monoBehaviourProvider.CreateInstance(canvasPrefab).transform;
        }
Ejemplo n.º 21
0
 /// <summary>
 /// 释放资源句柄
 /// </summary>
 public void Release()
 {
     if (IsValid == false)
     {
         return;
     }
     _provider.Release();
     _provider = null;
 }
Ejemplo n.º 22
0
        protected MissingNotesToken(IModHelper helper, IAssetProvider gameAssets)
        {
            this.helper     = helper ?? throw new ArgumentNullException(nameof(helper));
            this.gameAssets = gameAssets ?? throw new ArgumentNullException(nameof(gameAssets));

            this.updated     = true;
            this.SecretNotes =
                this.gameAssets.Load <Dictionary <int, string> >(MissingNotesToken.secretNotesAsset);
        }
Ejemplo n.º 23
0
        protected MissingNotesToken(IAssetTracker assetTracker, IAssetProvider gameAssets)
        {
            this.assetTracker =
                assetTracker ?? throw new ArgumentNullException(nameof(assetTracker));

            this.updated     = true;
            this.SecretNotes =
                gameAssets.Load <Dictionary <int, string> >(MissingNotesToken.secretNotesAsset);
        }
Ejemplo n.º 24
0
 public GameFactory(
     IAssetProvider assetProvider,
     ITexturesProvider texturesProvider,
     IStaticDataService staticDataService)
 {
     _assetProvider     = assetProvider;
     _texturesProvider  = texturesProvider;
     _staticDataService = staticDataService;
 }
Ejemplo n.º 25
0
        public StardewValleyNamespace(
            IMonitor monitor,
            [ContentSource(ContentSource.GameContent)] IAssetProvider gameAssets
            )
        {
            this.monitor    = monitor ?? throw new ArgumentNullException(nameof(monitor));
            this.gameAssets = gameAssets ?? throw new ArgumentNullException(nameof(gameAssets));

            this.itemFactories = new();
        }
Ejemplo n.º 26
0
        protected ProjectsControllerBase(ProjectsInfo projectsInfo, IAssetProvider assetProvider,
                                         List <IProjectModel> models, IProjectViewManipulator manipulator)
        {
            _viewManipulator = manipulator;
            AssetProvider    = assetProvider;
            _projectModels   = models;
            _projectsInfo    = projectsInfo;

            InitializeProjectViews();
        }
Ejemplo n.º 27
0
 public BackupService(IAuthenticatorRepository authenticatorRepository, ICategoryRepository categoryRepository,
                      IAuthenticatorCategoryRepository authenticatorCategoryRepository,
                      ICustomIconRepository customIconRepository, IAssetProvider assetProvider)
 {
     _authenticatorRepository         = authenticatorRepository;
     _categoryRepository              = categoryRepository;
     _authenticatorCategoryRepository = authenticatorCategoryRepository;
     _customIconRepository            = customIconRepository;
     _assetProvider = assetProvider;
 }
 public TModel ReadOrCreate <TModel>(
     string path,
     IAssetProvider assetProvider,
     Action <JsonSerializerSettings>?settings,
     bool minify = false
     )
     where TModel : class, new()
 {
     return(this.ReadOrCreate(path, assetProvider, settings, () => new TModel(), minify));
 }
Ejemplo n.º 29
0
        public StyleManager(IServiceRegistry services)
        {
            this.services = services;
            content       = services.GetService <IAssetProvider>();

            content.AddMapping("Theme", typeof(Theme));
            content.AddMapping("Font", typeof(Font));

            content.AssetsLoaded += InitializeFontCollection;
            sharedResources       = new Dictionary <string, ResourceDescription>();
        }
Ejemplo n.º 30
0
        public object ReadContent(IAssetProvider readerManager, ref ContentReaderParameters parameters)
        {
            parameters.KeepStreamOpen = false;
            var image = Image.Load(parameters.Stream);

            if (image != null)
            {
                image.Name = parameters.AssetName;
            }
            return(image);
        }
Ejemplo n.º 31
0
        internal Application()
        {
            var platformTypeAttribute = ReflectionHelper.GetAttribute <PlatformTypeAttribute>(GetType());

            if (!ReflectionHelper.IsTypeDerived(platformTypeAttribute.PlatformType, typeof(ApplicationPlatform)))
            {
                throw new InvalidOperationException("PlatformType must be derived from ApplicationPlatform.");
            }

            services                 = new ServiceRegistry();
            appTime                  = new ApplicationTime();
            totalTime                = new TimeSpan();
            timer                    = new TimerTick();
            IsFixedTimeStep          = false;
            maximumElapsedTime       = TimeSpan.FromMilliseconds(500.0);
            TargetElapsedTime        = TimeSpan.FromTicks(10000000 / 120); // target elapsed time is by default 60Hz
            lastUpdateCount          = new int[4];
            nextLastUpdateCountIndex = 0;

            // Calculate the updateCountAverageSlowLimit (assuming moving average is >=3 )
            // Example for a moving average of 4:
            // updateCountAverageSlowLimit = (2 * 2 + (4 - 2)) / 4 = 1.5f
            const int BadUpdateCountTime = 2; // number of bad frame (a bad frame is a frame that has at least 2 updates)
            var       maxLastCount       = 2 * Math.Min(BadUpdateCountTime, lastUpdateCount.Length);

            updateCountAverageSlowLimit = (float)(maxLastCount + (lastUpdateCount.Length - maxLastCount)) / lastUpdateCount.Length;

            services.AddService(typeof(IWindowService), this);
            services.AddService(typeof(ITimeService), appTime);

            // Setup Content Manager
            contentManager = new ContentManager(services);
            contentManager.AddMapping(AssetType.EngineReferences, typeof(EngineReferenceCollection));
            contentManager.AddMapping(AssetType.Model, typeof(Model));
            contentManager.AddMapping(AssetType.Effect, typeof(ShaderCollection));
            contentManager.AddMapping(AssetType.Texture2D, typeof(Texture2D));
            contentManager.AddMapping(AssetType.TextureCube, typeof(TextureCube));
            contentManager.AddMapping(AssetType.Cutscene, typeof(Cutscene));

            var additionalServices = ReflectionHelper.GetAttributes <RequiredServiceAttribute>(GetType());

            foreach (var requiredService in additionalServices)
            {
                var service = Activator.CreateInstance(requiredService.ClassType, services);
                services.AddService(requiredService.ServiceType, service);
            }

            // Setup Platform
            applicationPlatform                = (ApplicationPlatform)Activator.CreateInstance(platformTypeAttribute.PlatformType, this);
            applicationPlatform.Activated     += ApplicationPlatformActivated;
            applicationPlatform.Deactivated   += ApplicationPlatformDeactivated;
            applicationPlatform.Exiting       += ApplicationPlatform_Exiting;
            applicationPlatform.WindowCreated += ApplicationPlatformWindowCreated;
        }
Ejemplo n.º 32
0
        public SnakeClone(Action<Vector2> configureLevelSize, ILevelTracker levelTracker, IAssetProvider assetProvider, SpriteBatch batch, ContentManager content)
        {
            this.assetProvider = assetProvider;
            this.levelTracker = levelTracker;
            this.configureLevelSize = configureLevelSize;
            AddMessages(new RenderedMessage(() => "snake", new Color(44, 62, 80)),
                        new RenderedMessage(()=>"\n\n{arrow keys}", new Color(241, 196, 15)),
                        new RenderedMessage(() => "\n\n\n\nto navigate", new Color(240, 240, 241)),
                        new RenderedMessage(() => "\n\n\n\n\n\n\n{enter}", new Color(241, 196, 15)),
                        new RenderedMessage(() => "\n\n\n\n\n\n\n\n\nto play", new Color(240, 240, 241)),
                        new RenderedMessage(() => "\n\n\n\n\n\n\n\n\n\n\n\n{escape}", new Color(241, 196, 15)),
                        new RenderedMessage(() => "\n\n\n\n\n\n\n\n\n\n\n\n\n\nto quit", new Color(240, 240, 241)));


            onContinuePlaying = () => NewLevel(levelTracker.Next);

            directionStates = new ReadOnlyCollection<AddState>(new List<AddState>
            {
                AddState.To(()=>level.Context.ChangeDirection(new ChangeDirectionState(Direction.Up)))
                        .When(() => Keyboard.IsKeyClicked(InputKeys.Up)
                        && (level.Context.Direction != Direction.Down || !level.Context.SnakeHead.HasTail)),
                AddState.To(()=>level.Context.ChangeDirection(new ChangeDirectionState(Direction.Down)))
                        .When(() => Keyboard.IsKeyClicked(InputKeys.Down)
                        && (level.Context.Direction != Direction.Up || !level.Context.SnakeHead.HasTail)),
                AddState.To(()=>level.Context.ChangeDirection(new ChangeDirectionState(Direction.Left)))
                        .When(() => Keyboard.IsKeyClicked(InputKeys.Left)
                        && (level.Context.Direction != Direction.Right || !level.Context.SnakeHead.HasTail)),
                AddState.To(()=>level.Context.ChangeDirection(new ChangeDirectionState(Direction.Right)))
                        .When(() => Keyboard.IsKeyClicked(InputKeys.Right)
                        && (level.Context.Direction != Direction.Left || !level.Context.SnakeHead.HasTail))
            });

            var textureContainer = new AssetContainer<Func<Texture2D>>(content);
            var fontContainer = new AssetContainer<SpriteFont>(content);
            assetProvider.LoadAssets(textureContainer, fontContainer);
            renderContext = new RenderContext(assetProvider.RenderInfo, batch, textureContainer, fontContainer);
            NextLevel();
        }
Ejemplo n.º 33
0
 public AssetProviderController(IAssetProvider assetProvider)
 {
     provider = assetProvider;
 }