mirror of
https://git.do.srb2.org/STJr/UltimateZoneBuilder.git
synced 2025-01-18 14:31:50 +00:00
working on visual mode
This commit is contained in:
parent
04b86253e4
commit
95f6dcee6a
7 changed files with 102 additions and 22 deletions
BIN
Resources/Crosshair.png
Normal file
BIN
Resources/Crosshair.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.4 KiB |
|
@ -649,6 +649,7 @@
|
|||
<None Include="Resources\Cut.png" />
|
||||
<None Include="Resources\Close.png" />
|
||||
<Compile Include="Editing\EditingManager.cs" />
|
||||
<EmbeddedResource Include="Resources\Crosshair.png" />
|
||||
<Content Include="Resources\DB2.ico" />
|
||||
<Compile Include="General\BinaryHeap.cs" />
|
||||
<Compile Include="Geometry\Plane.cs" />
|
||||
|
|
|
@ -48,7 +48,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
|||
#region ================== Constants
|
||||
|
||||
// Object picking interval
|
||||
private double PICK_INTERVAL = 200.0d;
|
||||
private double PICK_INTERVAL = 100.0d;
|
||||
|
||||
#endregion
|
||||
|
||||
|
@ -101,7 +101,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
|||
// This picks a new target
|
||||
private void PickTarget()
|
||||
{
|
||||
// Make ray
|
||||
// Find the object we are aiming at
|
||||
Vector3D start = CameraPosition;
|
||||
Vector3D delta = CameraTarget - CameraPosition;
|
||||
delta = delta.GetFixedLength(General.Settings.ViewDistance);
|
||||
|
@ -110,27 +110,35 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
|||
// Object changed?
|
||||
if(newtarget.geometry != target.geometry)
|
||||
{
|
||||
// Hide previous info
|
||||
General.Interface.HideInfo();
|
||||
|
||||
// Any result?
|
||||
if(newtarget.geometry != null)
|
||||
{
|
||||
if(newtarget.geometry is VisualSidedef)
|
||||
{
|
||||
if(!(target.geometry is VisualSidedef)) General.Interface.HideInfo();
|
||||
VisualSidedef vsd = (newtarget.geometry as VisualSidedef);
|
||||
General.Interface.ShowLinedefInfo(vsd.Sidedef.Line);
|
||||
}
|
||||
else if(newtarget.geometry is VisualFloor)
|
||||
{
|
||||
if(!(target.geometry is VisualFloor) && !(target.geometry is VisualCeiling)) General.Interface.HideInfo();
|
||||
VisualFloor vf = (newtarget.geometry as VisualFloor);
|
||||
General.Interface.ShowSectorInfo(vf.Sector.Sector);
|
||||
}
|
||||
else if(newtarget.geometry is VisualCeiling)
|
||||
{
|
||||
if(!(target.geometry is VisualFloor) && !(target.geometry is VisualCeiling)) General.Interface.HideInfo();
|
||||
VisualCeiling vc = (newtarget.geometry as VisualCeiling);
|
||||
General.Interface.ShowSectorInfo(vc.Sector.Sector);
|
||||
}
|
||||
else
|
||||
{
|
||||
General.Interface.HideInfo();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
General.Interface.HideInfo();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -171,6 +179,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
|
|||
// Done rendering geometry
|
||||
renderer.FinishGeometry();
|
||||
|
||||
// Render crosshair
|
||||
renderer.RenderCrosshair();
|
||||
|
||||
// Present!
|
||||
renderer.Finish();
|
||||
}
|
||||
|
|
|
@ -70,6 +70,7 @@ namespace CodeImp.DoomBuilder.Data
|
|||
// Special images
|
||||
private ImageData missingtexture3d;
|
||||
private ImageData hourglass3d;
|
||||
private ImageData crosshair;
|
||||
|
||||
// Used images
|
||||
private Dictionary<long, long> usedimages;
|
||||
|
@ -90,6 +91,7 @@ namespace CodeImp.DoomBuilder.Data
|
|||
public bool IsDisposed { get { return isdisposed; } }
|
||||
public ImageData MissingTexture3D { get { return missingtexture3d; } }
|
||||
public ImageData Hourglass3D { get { return hourglass3d; } }
|
||||
public ImageData Crosshair3D { get { return crosshair; } }
|
||||
internal ICollection<MatchingTextureSet> TextureSets { get { return texturesets; } }
|
||||
internal OthersTextureSet OthersTextureSet { get { return othertextures; } }
|
||||
|
||||
|
@ -123,6 +125,8 @@ namespace CodeImp.DoomBuilder.Data
|
|||
missingtexture3d.LoadImage();
|
||||
hourglass3d = new ResourceImage("Hourglass3D.png");
|
||||
hourglass3d.LoadImage();
|
||||
crosshair = new ResourceImage("Crosshair.png");
|
||||
crosshair.LoadImage();
|
||||
}
|
||||
|
||||
// Disposer
|
||||
|
@ -135,6 +139,10 @@ namespace CodeImp.DoomBuilder.Data
|
|||
Unload();
|
||||
missingtexture3d.Dispose();
|
||||
missingtexture3d = null;
|
||||
hourglass3d.Dispose();
|
||||
hourglass3d = null;
|
||||
crosshair.Dispose();
|
||||
crosshair = null;
|
||||
|
||||
// Done
|
||||
isdisposed = true;
|
||||
|
|
|
@ -55,5 +55,6 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
|
||||
// Rendering methods
|
||||
void AddGeometry(VisualGeometry g);
|
||||
void RenderCrosshair();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,7 +43,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
|
||||
private const int RENDER_PASSES = 4;
|
||||
private const float PROJ_NEAR_PLANE = 1f;
|
||||
|
||||
private const float CROSSHAIR_SCALE = 0.1f;
|
||||
#endregion
|
||||
|
||||
#region ================== Variables
|
||||
|
@ -57,6 +57,9 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
// Frustum
|
||||
private ProjectedFrustum2D frustum;
|
||||
|
||||
// Crosshair
|
||||
private FlatVertex[] crosshairverts;
|
||||
|
||||
// Geometry to be rendered.
|
||||
// Each Dictionary in the array is a render pass.
|
||||
// Each BinaryHeap in the Dictionary contains all geometry that needs
|
||||
|
@ -103,12 +106,13 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
|
||||
#endregion
|
||||
|
||||
#region ================== Methods
|
||||
#region ================== Management
|
||||
|
||||
// This is called before a device is reset
|
||||
// (when resized or display adapter was changed)
|
||||
public override void UnloadResource()
|
||||
{
|
||||
crosshairverts = null;
|
||||
}
|
||||
|
||||
// This is called resets when the device is reset
|
||||
|
@ -117,9 +121,42 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
{
|
||||
}
|
||||
|
||||
// This makes screen vertices for display
|
||||
private void CreateCrosshairVerts(Size texturesize)
|
||||
{
|
||||
// Determine coordinates
|
||||
float width = (float)General.Map.Graphics.Viewport.Width;
|
||||
float height = (float)General.Map.Graphics.Viewport.Height;
|
||||
float size = (float)height * CROSSHAIR_SCALE;
|
||||
RectangleF rect = new RectangleF((width - size) / 2, (height - size) / 2, size, size);
|
||||
|
||||
// Make vertices
|
||||
crosshairverts = new FlatVertex[4];
|
||||
crosshairverts[0].x = rect.Left;
|
||||
crosshairverts[0].y = rect.Top;
|
||||
crosshairverts[0].c = -1;
|
||||
crosshairverts[0].u = 1f / texturesize.Width;
|
||||
crosshairverts[0].v = 1f / texturesize.Height;
|
||||
crosshairverts[1].x = rect.Right;
|
||||
crosshairverts[1].y = rect.Top;
|
||||
crosshairverts[1].c = -1;
|
||||
crosshairverts[1].u = 1f - 1f / texturesize.Width;
|
||||
crosshairverts[1].v = 1f / texturesize.Height;
|
||||
crosshairverts[2].x = rect.Left;
|
||||
crosshairverts[2].y = rect.Bottom;
|
||||
crosshairverts[2].c = -1;
|
||||
crosshairverts[2].u = 1f / texturesize.Width;
|
||||
crosshairverts[2].v = 1f - 1f / texturesize.Height;
|
||||
crosshairverts[3].x = rect.Right;
|
||||
crosshairverts[3].y = rect.Bottom;
|
||||
crosshairverts[3].c = -1;
|
||||
crosshairverts[3].u = 1f - 1f / texturesize.Width;
|
||||
crosshairverts[3].v = 1f - 1f / texturesize.Height;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region ================== General
|
||||
#region ================== Presentation
|
||||
|
||||
// This creates the projection
|
||||
internal void CreateProjection()
|
||||
|
@ -178,7 +215,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
|
||||
#endregion
|
||||
|
||||
#region ================== Presenting
|
||||
#region ================== Start / Finish
|
||||
|
||||
// This starts rendering
|
||||
public bool Start()
|
||||
|
@ -197,6 +234,10 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
|
||||
// Matrices
|
||||
ApplyMatrices();
|
||||
|
||||
// Create crosshair vertices
|
||||
if(crosshairverts == null)
|
||||
CreateCrosshairVerts(new Size(General.Map.Data.Crosshair3D.Width, General.Map.Data.Crosshair3D.Height));
|
||||
|
||||
// Ready
|
||||
return true;
|
||||
|
@ -226,23 +267,19 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, false);
|
||||
graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false);
|
||||
graphics.Device.SetRenderState(RenderState.TextureFactor, -1);
|
||||
|
||||
// SOLID PASS
|
||||
graphics.Shaders.World3D.Begin();
|
||||
graphics.Shaders.World3D.WorldViewProj = viewproj;
|
||||
|
||||
// SOLID PASS
|
||||
graphics.Shaders.World3D.BeginPass(0);
|
||||
RenderSinglePass((int)RenderPass.Solid);
|
||||
graphics.Shaders.World3D.EndPass();
|
||||
graphics.Shaders.World3D.End();
|
||||
|
||||
// MASK PASS
|
||||
graphics.Device.SetRenderState(RenderState.AlphaTestEnable, true);
|
||||
graphics.Shaders.World3D.Begin();
|
||||
graphics.Shaders.World3D.WorldViewProj = viewproj;
|
||||
graphics.Shaders.World3D.BeginPass(0);
|
||||
RenderSinglePass((int)RenderPass.Mask);
|
||||
graphics.Shaders.World3D.EndPass();
|
||||
graphics.Shaders.World3D.End();
|
||||
|
||||
// ALPHA PASS
|
||||
graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, true);
|
||||
|
@ -250,26 +287,21 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
graphics.Device.SetRenderState(RenderState.ZWriteEnable, false);
|
||||
graphics.Device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha);
|
||||
graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha);
|
||||
graphics.Shaders.World3D.Begin();
|
||||
graphics.Shaders.World3D.WorldViewProj = viewproj;
|
||||
graphics.Shaders.World3D.BeginPass(0);
|
||||
RenderSinglePass((int)RenderPass.Alpha);
|
||||
graphics.Shaders.World3D.EndPass();
|
||||
graphics.Shaders.World3D.End();
|
||||
|
||||
// ADDITIVE PASS
|
||||
graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.One);
|
||||
graphics.Shaders.World3D.Begin();
|
||||
graphics.Shaders.World3D.WorldViewProj = viewproj;
|
||||
graphics.Shaders.World3D.BeginPass(0);
|
||||
RenderSinglePass((int)RenderPass.Additive);
|
||||
graphics.Shaders.World3D.EndPass();
|
||||
graphics.Shaders.World3D.End();
|
||||
|
||||
// Remove references
|
||||
graphics.Shaders.World3D.Texture1 = null;
|
||||
|
||||
// Done
|
||||
graphics.Shaders.World3D.End();
|
||||
geometry = null;
|
||||
}
|
||||
|
||||
|
@ -343,7 +375,7 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
|
||||
#endregion
|
||||
|
||||
#region ================== Geometry
|
||||
#region ================== Rendering
|
||||
|
||||
// This collects a visual sector's geometry for rendering
|
||||
public void AddGeometry(VisualGeometry g)
|
||||
|
@ -363,6 +395,33 @@ namespace CodeImp.DoomBuilder.Rendering
|
|||
}
|
||||
}
|
||||
|
||||
// This renders the crosshair
|
||||
public void RenderCrosshair()
|
||||
{
|
||||
// Set renderstates
|
||||
graphics.Device.SetRenderState(RenderState.CullMode, Cull.None);
|
||||
graphics.Device.SetRenderState(RenderState.ZEnable, false);
|
||||
graphics.Device.SetRenderState(RenderState.AlphaBlendEnable, true);
|
||||
graphics.Device.SetRenderState(RenderState.AlphaTestEnable, false);
|
||||
graphics.Device.SetRenderState(RenderState.SourceBlend, Blend.SourceAlpha);
|
||||
graphics.Device.SetRenderState(RenderState.DestinationBlend, Blend.InverseSourceAlpha);
|
||||
graphics.Device.SetRenderState(RenderState.TextureFactor, -1);
|
||||
graphics.Device.SetTransform(TransformState.World, Matrix.Identity);
|
||||
graphics.Device.SetTransform(TransformState.Projection, Matrix.Identity);
|
||||
graphics.Device.SetTransform(TransformState.View, Matrix.Identity);
|
||||
|
||||
// Draw
|
||||
graphics.Shaders.Display2D.Begin();
|
||||
if(General.Map.Data.Crosshair3D.Texture == null) General.Map.Data.Crosshair3D.CreateTexture();
|
||||
graphics.Device.SetTexture(0, General.Map.Data.Crosshair3D.Texture);
|
||||
graphics.Shaders.Display2D.Texture1 = General.Map.Data.Crosshair3D.Texture;
|
||||
graphics.Shaders.Display2D.SetSettings(1.0f, 1.0f, 0.0f, 1.0f, true);
|
||||
graphics.Shaders.Display2D.BeginPass(1);
|
||||
graphics.Device.DrawUserPrimitives<FlatVertex>(PrimitiveType.TriangleStrip, 0, 2, crosshairverts);
|
||||
graphics.Shaders.Display2D.EndPass();
|
||||
graphics.Shaders.Display2D.End();
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
|
BIN
Source/Resources/Crosshair.png
Normal file
BIN
Source/Resources/Crosshair.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.4 KiB |
Loading…
Reference in a new issue