Attempted at fixing 2D camera system.
This commit is contained in:
parent
5f04dfd73a
commit
051f3b04b5
@ -10,12 +10,15 @@ namespace RecrownedAthenaeum.ContentReaders
|
||||
{
|
||||
class NinePatchDataReader : ContentTypeReader<NinePatch>
|
||||
{
|
||||
public static GraphicsDevice graphicsDevice;
|
||||
|
||||
protected override NinePatch Read(ContentReader input, NinePatch existingInstance)
|
||||
{
|
||||
if (graphicsDevice == null) graphicsDevice = Configuration.GraphicsDeviceManager.GraphicsDevice;
|
||||
Texture2D texture;
|
||||
using (MemoryStream stream = new MemoryStream(input.ReadBytes(input.ReadInt32())))
|
||||
{
|
||||
texture = Texture2D.FromStream(Configuration.GraphicsDeviceManager.GraphicsDevice, stream);
|
||||
texture = Texture2D.FromStream(graphicsDevice, stream);
|
||||
}
|
||||
NinePatchData ninePatchData = JsonConvert.DeserializeObject<NinePatchData>(Encoding.ASCII.GetString(input.ReadBytes(input.ReadInt32())));
|
||||
NinePatch ninePatch = new NinePatch(texture, ninePatchData.left, ninePatchData.right, ninePatchData.bottom, ninePatchData.top);
|
||||
|
@ -1,4 +1,5 @@
|
||||
using Microsoft.Xna.Framework.Content;
|
||||
using Microsoft.Xna.Framework;
|
||||
using Microsoft.Xna.Framework.Content;
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using Newtonsoft.Json;
|
||||
using RecrownedAthenaeum.Data;
|
||||
@ -10,13 +11,16 @@ namespace RecrownedAthenaeum.ContentReaders
|
||||
{
|
||||
class TextureAtlasDataReader : ContentTypeReader<TextureAtlas>
|
||||
{
|
||||
public static GraphicsDevice graphicsDevice;
|
||||
|
||||
protected override TextureAtlas Read(ContentReader input, TextureAtlas existingInstance)
|
||||
{
|
||||
if (graphicsDevice == null) graphicsDevice = Configuration.GraphicsDeviceManager.GraphicsDevice;
|
||||
TextureAtlasData atlasData;
|
||||
Texture2D atlasTexture;
|
||||
using (MemoryStream stream = new MemoryStream(input.ReadBytes(input.ReadInt32())))
|
||||
{
|
||||
atlasTexture = Texture2D.FromStream(Configuration.GraphicsDeviceManager.GraphicsDevice, stream);
|
||||
atlasTexture = Texture2D.FromStream(graphicsDevice, stream);
|
||||
}
|
||||
string serialized = Encoding.ASCII.GetString(input.ReadBytes(input.ReadInt32()));
|
||||
atlasData = JsonConvert.DeserializeObject<TextureAtlasData>(serialized);
|
||||
|
@ -51,8 +51,8 @@
|
||||
<Reference Include="System.Xml" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Camera\Camera3D.cs" />
|
||||
<Compile Include="Camera\Camera2D.cs" />
|
||||
<Compile Include="View\Camera3D.cs" />
|
||||
<Compile Include="View\Camera2D.cs" />
|
||||
<Compile Include="ContentSystem\ContentData.cs" />
|
||||
<Compile Include="ContentSystem\ContentManagerController.cs" />
|
||||
<Compile Include="ContentSystem\IContentPathResolver.cs" />
|
||||
|
@ -51,7 +51,6 @@ namespace RecrownedAthenaeum.Render
|
||||
if (began) throw new InvalidOperationException("Begin is being called twice before being ended.");
|
||||
if (disposed) throw new ObjectDisposedException(this.GetType().Name);
|
||||
this.primitiveType = primitiveType;
|
||||
verticesPerPrimitive = 0;
|
||||
switch (primitiveType)
|
||||
{
|
||||
case PrimitiveType.LineList: verticesPerPrimitive = 2; break;
|
||||
|
@ -89,16 +89,22 @@ namespace RecrownedAthenaeum.Render
|
||||
for (int i = 0; i < corners.Length; i++)
|
||||
{
|
||||
corners[i] = Vector2.Transform(corners[i], rotMat);
|
||||
}
|
||||
}
|
||||
|
||||
for (int i = 0; i < corners.Length; i++)
|
||||
{
|
||||
corners[i].X += x;
|
||||
corners[i].Y += y;
|
||||
}
|
||||
}
|
||||
|
||||
primitiveBatch.AddVertex(corners[0], color);
|
||||
primitiveBatch.AddVertex(corners[1], color);
|
||||
primitiveBatch.AddVertex(corners[2], color);
|
||||
primitiveBatch.AddVertex(corners[3], color);
|
||||
primitiveBatch.AddVertex(corners[0], color);
|
||||
|
||||
primitiveBatch.Flush();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -129,13 +129,13 @@ namespace RecrownedAthenaeum.ScreenSystem
|
||||
{
|
||||
graphics.GraphicsDevice.SetRenderTarget(previousScreenRenderTarget);
|
||||
graphics.GraphicsDevice.Clear(previousScreen.BackgroundColor);
|
||||
spriteBatch.Begin(SpriteSortMode.Deferred, null, null, null, null, null, camera.TransformationMatrix);
|
||||
spriteBatch.Begin(effect: camera.BasicEffect);
|
||||
previousScreen.Draw(spriteBatch);
|
||||
spriteBatch.End();
|
||||
graphics.GraphicsDevice.SetRenderTarget(null);
|
||||
Screen.UpdatePreviousScreenFrame(previousScreenRenderTarget);
|
||||
}
|
||||
spriteBatch.Begin(SpriteSortMode.Deferred, null, null, null, null, null, camera.TransformationMatrix);
|
||||
spriteBatch.Begin(effect: camera.BasicEffect);
|
||||
Screen.Draw(spriteBatch);
|
||||
spriteBatch.End();
|
||||
}
|
||||
|
@ -48,7 +48,7 @@ namespace RecrownedAthenaeum.UI.Modular
|
||||
if (scissorBounds != null)
|
||||
{
|
||||
batch.End();
|
||||
batch.Begin(SpriteSortMode.Deferred, null, null, null, scissorRasterizer, null, camera?.TransformationMatrix);
|
||||
batch.Begin(effect: camera?.BasicEffect);
|
||||
scissorBounds.Width = bounds.Width;
|
||||
scissorBounds.Height = bounds.Height;
|
||||
scissorBounds.X = bounds.X;
|
||||
@ -72,7 +72,7 @@ namespace RecrownedAthenaeum.UI.Modular
|
||||
{
|
||||
batch.GraphicsDevice.ScissorRectangle = scissorBounds;
|
||||
batch.End();
|
||||
batch.Begin(SpriteSortMode.Deferred, null, null, null, null, null, camera?.TransformationMatrix);
|
||||
batch.Begin(effect: camera?.BasicEffect);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -28,6 +28,7 @@ namespace RecrownedAthenaeum.Camera
|
||||
{
|
||||
projectionMatrix = Matrix.CreateOrthographic(this.graphicsDevice.Viewport.Width, this.graphicsDevice.Viewport.Height, 0, 1);
|
||||
CenterPosition = new Vector2(0, 0);
|
||||
upDirection = Vector3.Down;
|
||||
Apply();
|
||||
}
|
||||
|
||||
@ -37,6 +38,7 @@ namespace RecrownedAthenaeum.Camera
|
||||
/// </summary>
|
||||
public override void Apply()
|
||||
{
|
||||
position.Z = 0;
|
||||
lookAt = new Vector3(Position, 1f);
|
||||
base.Apply();
|
||||
}
|
||||
@ -64,9 +66,7 @@ namespace RecrownedAthenaeum.Camera
|
||||
/// <param name="move">Magnitude of how much to move per axis.</param>
|
||||
public void MoveCamera(Vector2 move)
|
||||
{
|
||||
Console.WriteLine(move);
|
||||
Position += move;
|
||||
Console.WriteLine(Position);
|
||||
}
|
||||
}
|
||||
}
|
@ -53,20 +53,27 @@ namespace RecrownedAthenaeum.Camera
|
||||
/// </summary>
|
||||
protected GraphicsDevice graphicsDevice;
|
||||
|
||||
/// <summary>
|
||||
/// The basic effect that contains the transformations.
|
||||
/// </summary>
|
||||
public BasicEffect BasicEffect { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Constructs 3D camera with an orthographic projection matrix with dimensions of graphics devices viewport. All changes to matrices should have apply called after changes.
|
||||
/// </summary>
|
||||
/// <param name="graphicsDevice">The graphics device to use. Will use graphics device from <see cref="Configuration"/>'s graphics device manager if this is null which it is by default.</param>
|
||||
public Camera3D(GraphicsDevice graphicsDevice = null)
|
||||
{
|
||||
this.graphicsDevice = graphicsDevice ?? (Configuration.GraphicsDeviceManager.GraphicsDevice);
|
||||
|
||||
graphicsDevice = graphicsDevice ?? (Configuration.GraphicsDeviceManager.GraphicsDevice);
|
||||
this.graphicsDevice = graphicsDevice;
|
||||
worldMatrix = Matrix.Identity;
|
||||
lookAt = Vector3.Forward;
|
||||
upDirection = Vector3.Up;
|
||||
|
||||
GraphicsDevice gDevice = this.graphicsDevice;
|
||||
projectionMatrix = Matrix.Identity;
|
||||
|
||||
BasicEffect = new BasicEffect(graphicsDevice);
|
||||
BasicEffect.TextureEnabled = true;
|
||||
Apply();
|
||||
}
|
||||
|
||||
@ -77,6 +84,10 @@ namespace RecrownedAthenaeum.Camera
|
||||
{
|
||||
ViewMatrix = Matrix.CreateLookAt(position, lookAt, upDirection);
|
||||
TransformationMatrix = projectionMatrix * ViewMatrix * worldMatrix;
|
||||
|
||||
BasicEffect.World = worldMatrix;
|
||||
BasicEffect.View = ViewMatrix;
|
||||
BasicEffect.Projection = projectionMatrix;
|
||||
}
|
||||
|
||||
/// <summary>
|
Loading…
Reference in New Issue
Block a user