示例#1
0
        public object GetResource(string resourceName, ResourceKind resourceKind, Dictionary <string, object> param)
        {
            if (initialized)
            {
                Vector2 position = param != null && param.ContainsKey("Position") ? (Vector2)param["Position"] : Vector2.Zero;
                switch (resourceKind)
                {
                case ResourceKind.Effect:
                    var path = String.Format("Effect\\{0}", resourceName);
                    if (EffectLoader.IsCached(path))
                    {
                        return(new EffectObject(device, resourceManager, EffectLoader.Load(null, path, f => { return; }, f => null))
                        {
                            Position = position
                        });
                    }
                    return(null);

                case ResourceKind.Image:
                    var isCenter = (bool)param["IsCenter"];
                    return(new PictureObject(device, resourceManager, pathManager.Combine("Image", resourceName), isCenter)
                    {
                        Position = position
                    });

                case ResourceKind.Sound:
                    soundID++;
                    var name          = String.Format("Sound\\{0}_{1}", resourceName, soundID);
                    var soundResource = new SoundResource(sound, name, soundDict[String.Format("Sound\\{0}", resourceName)]);
                    resourceManager.Add(name, soundResource);
                    return(soundResource);

                case ResourceKind.Number:
                    var alignment = (Alignment)param["Alignment"];
                    var maxDigit  = (int)param["MaxDigit"];
                    return(new NumberPictureObject(device, resourceManager, pathManager.Combine("Image", resourceName))
                    {
                        Position = position,
                        Alignment = alignment,
                        MaxDigit = maxDigit
                    });

                case ResourceKind.Others:
                    return(new MemoryStream(othersDict[String.Format("Others\\{0}", resourceName)]));

                case ResourceKind.Rectangle:
                    return(new RectangleComponent(device, resourceManager, (Color4)param["Color"]));

                case ResourceKind.VertexBuffer:
                    var vertexInfo = device.GetModule <ShaderCommon>().CreateVertex((int)param["VertexCount"]);
                    createdVertices.Add(vertexInfo);
                    return(vertexInfo);

                case ResourceKind.Polygon:
                    var filename      = pathManager.Combine("Image", resourceName);
                    var imageResource = resourceManager.GetResource <ImageResourceBase>(filename);
                    if (imageResource == null)
                    {
                        imageResource = (ImageResourceBase)resourceManager.Add(filename, ImageResourceFactoryManager.Factory.Create(device, filename, false));
                    }
                    var primitiveType  = (PrimitiveType)param["PrimitiveType"];
                    var primitiveCount = (int)param["PrimitiveCount"];
                    var startIndex     = (int)param["StartIndex"];
                    var vertexCount    = (int)param["VertexCount"];
                    return(new PolygonObject(device, imageResource, (VertexInfo)param["Vertex"])
                    {
                        PrimitiveType = primitiveType,
                        PrimitiveCount = primitiveCount,
                        StartIndex = startIndex,
                        VertexCount = vertexCount,
                    });
                }
            }

            return(null);
        }