progress on automated asynchronous content management; ready for testing; began working on font generation system.
This commit is contained in:
parent
419fb6ab6b
commit
e45d998c3a
@ -601,21 +601,6 @@
|
||||
/processorParam:TextureFormat=Color
|
||||
/build:3840x2160/void_circle.png
|
||||
|
||||
#begin fonts/darktech_ldr.ttf
|
||||
/importer:
|
||||
/processor:
|
||||
/build:fonts/darktech_ldr.ttf
|
||||
|
||||
#begin fonts/Gasalt-Regular.ttf
|
||||
/importer:
|
||||
/processor:
|
||||
/build:fonts/Gasalt-Regular.ttf
|
||||
|
||||
#begin fonts/maiden.TTF
|
||||
/importer:
|
||||
/processor:
|
||||
/build:fonts/maiden.TTF
|
||||
|
||||
#begin sfx/disintegrate.ogg
|
||||
/importer:OggImporter
|
||||
/processor:SongProcessor
|
||||
@ -705,3 +690,23 @@
|
||||
/processorParam:TextureFormat=Color
|
||||
/build:splash_texture.png
|
||||
|
||||
#begin fonts/darktech_ldr.spritefont
|
||||
/importer:FontDescriptionImporter
|
||||
/processor:FontDescriptionProcessor
|
||||
/processorParam:PremultiplyAlpha=True
|
||||
/processorParam:TextureFormat=Compressed
|
||||
/build:fonts/darktech_ldr.spritefont
|
||||
|
||||
#begin fonts/gasalt_regular.spritefont
|
||||
/importer:FontDescriptionImporter
|
||||
/processor:FontDescriptionProcessor
|
||||
/processorParam:PremultiplyAlpha=True
|
||||
/processorParam:TextureFormat=Compressed
|
||||
/build:fonts/gasalt_regular.spritefont
|
||||
|
||||
#begin fonts/iron_maiden.fx
|
||||
/importer:EffectImporter
|
||||
/processor:EffectProcessor
|
||||
/processorParam:DebugMode=Auto
|
||||
/build:fonts/iron_maiden.fx
|
||||
|
||||
|
60
RhythmBullet/Content/fonts/darktech_ldr.spritefont
Normal file
60
RhythmBullet/Content/fonts/darktech_ldr.spritefont
Normal file
@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
This file contains an xml description of a font, and will be read by the XNA
|
||||
Framework Content Pipeline. Follow the comments to customize the appearance
|
||||
of the font in your game, and to change the characters which are available to draw
|
||||
with.
|
||||
-->
|
||||
<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
|
||||
<Asset Type="Graphics:FontDescription">
|
||||
|
||||
<!--
|
||||
Modify this string to change the font that will be imported.
|
||||
-->
|
||||
<FontName>Arial</FontName>
|
||||
|
||||
<!--
|
||||
Size is a float value, measured in points. Modify this value to change
|
||||
the size of the font.
|
||||
-->
|
||||
<Size>12</Size>
|
||||
|
||||
<!--
|
||||
Spacing is a float value, measured in pixels. Modify this value to change
|
||||
the amount of spacing in between characters.
|
||||
-->
|
||||
<Spacing>0</Spacing>
|
||||
|
||||
<!--
|
||||
UseKerning controls the layout of the font. If this value is true, kerning information
|
||||
will be used when placing characters.
|
||||
-->
|
||||
<UseKerning>true</UseKerning>
|
||||
|
||||
<!--
|
||||
Style controls the style of the font. Valid entries are "Regular", "Bold", "Italic",
|
||||
and "Bold, Italic", and are case sensitive.
|
||||
-->
|
||||
<Style>Regular</Style>
|
||||
|
||||
<!--
|
||||
If you uncomment this line, the default character will be substituted if you draw
|
||||
or measure text that contains characters which were not included in the font.
|
||||
-->
|
||||
<!-- <DefaultCharacter>*</DefaultCharacter> -->
|
||||
|
||||
<!--
|
||||
CharacterRegions control what letters are available in the font. Every
|
||||
character from Start to End will be built and made available for drawing. The
|
||||
default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin
|
||||
character set. The characters are ordered according to the Unicode standard.
|
||||
See the documentation for more information.
|
||||
-->
|
||||
<CharacterRegions>
|
||||
<CharacterRegion>
|
||||
<Start> </Start>
|
||||
<End>~</End>
|
||||
</CharacterRegion>
|
||||
</CharacterRegions>
|
||||
</Asset>
|
||||
</XnaContent>
|
60
RhythmBullet/Content/fonts/gasalt_regular.spritefont
Normal file
60
RhythmBullet/Content/fonts/gasalt_regular.spritefont
Normal file
@ -0,0 +1,60 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
This file contains an xml description of a font, and will be read by the XNA
|
||||
Framework Content Pipeline. Follow the comments to customize the appearance
|
||||
of the font in your game, and to change the characters which are available to draw
|
||||
with.
|
||||
-->
|
||||
<XnaContent xmlns:Graphics="Microsoft.Xna.Framework.Content.Pipeline.Graphics">
|
||||
<Asset Type="Graphics:FontDescription">
|
||||
|
||||
<!--
|
||||
Modify this string to change the font that will be imported.
|
||||
-->
|
||||
<FontName>Arial</FontName>
|
||||
|
||||
<!--
|
||||
Size is a float value, measured in points. Modify this value to change
|
||||
the size of the font.
|
||||
-->
|
||||
<Size>12</Size>
|
||||
|
||||
<!--
|
||||
Spacing is a float value, measured in pixels. Modify this value to change
|
||||
the amount of spacing in between characters.
|
||||
-->
|
||||
<Spacing>0</Spacing>
|
||||
|
||||
<!--
|
||||
UseKerning controls the layout of the font. If this value is true, kerning information
|
||||
will be used when placing characters.
|
||||
-->
|
||||
<UseKerning>true</UseKerning>
|
||||
|
||||
<!--
|
||||
Style controls the style of the font. Valid entries are "Regular", "Bold", "Italic",
|
||||
and "Bold, Italic", and are case sensitive.
|
||||
-->
|
||||
<Style>Regular</Style>
|
||||
|
||||
<!--
|
||||
If you uncomment this line, the default character will be substituted if you draw
|
||||
or measure text that contains characters which were not included in the font.
|
||||
-->
|
||||
<!-- <DefaultCharacter>*</DefaultCharacter> -->
|
||||
|
||||
<!--
|
||||
CharacterRegions control what letters are available in the font. Every
|
||||
character from Start to End will be built and made available for drawing. The
|
||||
default range is from 32, (ASCII space), to 126, ('~'), covering the basic Latin
|
||||
character set. The characters are ordered according to the Unicode standard.
|
||||
See the documentation for more information.
|
||||
-->
|
||||
<CharacterRegions>
|
||||
<CharacterRegion>
|
||||
<Start> </Start>
|
||||
<End>~</End>
|
||||
</CharacterRegion>
|
||||
</CharacterRegions>
|
||||
</Asset>
|
||||
</XnaContent>
|
46
RhythmBullet/Content/fonts/iron_maiden.fx
Normal file
46
RhythmBullet/Content/fonts/iron_maiden.fx
Normal file
@ -0,0 +1,46 @@
|
||||
#if OPENGL
|
||||
#define SV_POSITION POSITION
|
||||
#define VS_SHADERMODEL vs_3_0
|
||||
#define PS_SHADERMODEL ps_3_0
|
||||
#else
|
||||
#define VS_SHADERMODEL vs_4_0_level_9_1
|
||||
#define PS_SHADERMODEL ps_4_0_level_9_1
|
||||
#endif
|
||||
|
||||
matrix WorldViewProjection;
|
||||
|
||||
struct VertexShaderInput
|
||||
{
|
||||
float4 Position : POSITION0;
|
||||
float4 Color : COLOR0;
|
||||
};
|
||||
|
||||
struct VertexShaderOutput
|
||||
{
|
||||
float4 Position : SV_POSITION;
|
||||
float4 Color : COLOR0;
|
||||
};
|
||||
|
||||
VertexShaderOutput MainVS(in VertexShaderInput input)
|
||||
{
|
||||
VertexShaderOutput output = (VertexShaderOutput)0;
|
||||
|
||||
output.Position = mul(input.Position, WorldViewProjection);
|
||||
output.Color = input.Color;
|
||||
|
||||
return output;
|
||||
}
|
||||
|
||||
float4 MainPS(VertexShaderOutput input) : COLOR
|
||||
{
|
||||
return input.Color;
|
||||
}
|
||||
|
||||
technique BasicColorDrawing
|
||||
{
|
||||
pass P0
|
||||
{
|
||||
VertexShader = compile VS_SHADERMODEL MainVS();
|
||||
PixelShader = compile PS_SHADERMODEL MainPS();
|
||||
}
|
||||
};
|
@ -49,7 +49,7 @@
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="Zer01HD\UI\Page\PageManager.cs" />
|
||||
<Compile Include="Zer01HD\UI\Screen\Screen.cs" />
|
||||
<Compile Include="Zer01HD\Utilities\ContentSystem\ContentLoader.cs" />
|
||||
<Compile Include="Zer01HD\Utilities\ContentSystem\ContentLoad.cs" />
|
||||
<Compile Include="Zer01HD\Utilities\ContentSystem\ContentSystem.cs" />
|
||||
<Compile Include="Zer01HD\Utilities\ContentSystem\IContentResolver.cs" />
|
||||
</ItemGroup>
|
||||
|
20
RhythmBullet/Zer01HD/Utilities/ContentSystem/ContentLoad.cs
Normal file
20
RhythmBullet/Zer01HD/Utilities/ContentSystem/ContentLoad.cs
Normal file
@ -0,0 +1,20 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RhythmBullet.Zer01HD.Utilities.ContentSystem
|
||||
{
|
||||
class ContentLoad
|
||||
{
|
||||
internal Type type;
|
||||
internal string assetName;
|
||||
|
||||
public ContentLoad(string assetName, Type type)
|
||||
{
|
||||
this.type = type;
|
||||
this.assetName = assetName;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RhythmBullet.Zer01HD.Utilities.ContentSystem
|
||||
{
|
||||
class ContentLoader
|
||||
{
|
||||
}
|
||||
}
|
@ -3,38 +3,88 @@ using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace RhythmBullet.Zer01HD.Utilities.ContentSystem
|
||||
{
|
||||
class ContentSystem
|
||||
{
|
||||
private readonly ContentManager contentManager;
|
||||
private readonly Queue<Dictionary<Type, string>> queue;
|
||||
private Dictionary<string, IDisposable> assets;
|
||||
Thread thread;
|
||||
internal volatile bool loading;
|
||||
readonly ContentManager contentManager;
|
||||
readonly Queue<ContentLoad> queue;
|
||||
Dictionary<string, IDisposable> assets;
|
||||
readonly Dictionary<Type, IContentResolver> contentResolver;
|
||||
|
||||
public ContentSystem(ContentManager contentManager)
|
||||
{
|
||||
this.contentManager = contentManager;
|
||||
assets = new Dictionary<string, IDisposable>();
|
||||
queue = new Queue<Dictionary<Type, string>>();
|
||||
queue = new Queue<ContentLoad>();
|
||||
contentResolver = new Dictionary<Type, IContentResolver>();
|
||||
}
|
||||
|
||||
void Load(string assetName, Type type)
|
||||
private void Load(string assetName, Type type)
|
||||
{
|
||||
if (assets.ContainsKey(assetName))
|
||||
IContentResolver handler = contentResolver[type];
|
||||
string path = handler.Load(assetName);
|
||||
assets.Add(assetName, contentManager.Load<IDisposable>(path));
|
||||
}
|
||||
|
||||
private void LoadBatch()
|
||||
{
|
||||
while (queue.Count != 0)
|
||||
{
|
||||
IContentResolver handler = contentResolver[type];
|
||||
string path = handler.Load(assetName);
|
||||
assets.Add(assetName, contentManager.Load<IDisposable>(path));
|
||||
lock (queue)
|
||||
{
|
||||
ContentLoad content = queue.Dequeue();
|
||||
Load(content.assetName, content.type);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
T get<T> (string assetName)
|
||||
T get<T>(string assetName)
|
||||
{
|
||||
return (T)assets[assetName];
|
||||
lock(queue)
|
||||
{
|
||||
return (T)assets[assetName];
|
||||
}
|
||||
}
|
||||
|
||||
void Queue(string assetName, Type type)
|
||||
{
|
||||
lock (queue)
|
||||
{
|
||||
if (!assets.ContainsKey(assetName))
|
||||
{
|
||||
queue.Enqueue(new ContentLoad(assetName, type));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Called whenever a batch of assets should be loaded from the queue. Safe to call once every frame.
|
||||
/// </summary>
|
||||
void Update()
|
||||
{
|
||||
if (queue.Count > 0)
|
||||
{
|
||||
if (thread == null || !thread.IsAlive)
|
||||
{
|
||||
ThreadStart threadStart = new ThreadStart(LoadBatch);
|
||||
thread = new Thread(threadStart);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void UnloadAll()
|
||||
{
|
||||
foreach (KeyValuePair<string, IDisposable> asset in assets)
|
||||
{
|
||||
asset.Value.Dispose();
|
||||
assets.Remove(asset.Key);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user