trackeditor: write track to ac3d file for debugging

git-svn-id: https://svn.code.sf.net/p/speed-dreams/code/trunk@9301 30fe4595-0a0c-4342-8851-515496e4dcbd
This commit is contained in:
iobyte 2024-02-02 02:22:18 +00:00
parent 99b4b78eb0
commit 05f6220cee
2 changed files with 135 additions and 1 deletions

View File

@ -43,6 +43,7 @@ import java.beans.XMLEncoder;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
@ -77,13 +78,19 @@ import utils.Project;
import utils.Properties;
import utils.SegmentVector;
import utils.TrackData;
import utils.ac3d.Ac3d;
import utils.ac3d.Ac3dMaterial;
import utils.ac3d.Ac3dObject;
import utils.ac3d.Ac3dSurface;
import utils.circuit.Curve;
import utils.circuit.GraphicObject;
import utils.circuit.MainTrack;
import utils.circuit.ObjShapeObject;
import utils.circuit.ObjectMap;
import utils.circuit.Pits;
import utils.circuit.Point3D;
import utils.circuit.Reliefs;
import utils.circuit.Sector;
import utils.circuit.Segment;
import utils.circuit.Straight;
import utils.circuit.Surface;
@ -646,6 +653,8 @@ public class EditorFrame extends JFrame
updateRecentFiles(projectFileName);
setTitle(originalTitle + " - Project: " + projectFileName);
//writeTrack();
}
/**
@ -2999,6 +3008,131 @@ public class EditorFrame extends JFrame
this.repaint();
}
public void writeTrack()
{
if (trackData == null)
{
message("No track", "Can't write track.");
return;
}
String filename = Editor.getProperties().getPath() + sep + trackData.getHeader().getName() + "-track.ac";
Ac3d track = new Ac3d();
Ac3dMaterial material = new Ac3dMaterial("");
material.setRgb(new double[] { 0.4, 0.4, 0.4} );
material.setAmb(new double[] { 0.8, 0.8, 0.8 } );
material.setEmis(new double[] { 0.4, 0.4, 0.4 } );
material.setSpec(new double[] { 0.5, 0.5, 0.5 } );
material.setShi(50);
material.setTrans(0);
Ac3dObject world = new Ac3dObject("world", 3);
track.getMaterials().add(material);
track.setRoot(world);
Ac3dObject group = new Ac3dObject("group", 5);
group.setName("track");
world.addKid(group);
for (Segment segment : trackData.getSegments())
{
Ac3dObject object = new Ac3dObject("poly", 0);
object.setName(segment.getName());
Surface trackSurface = null;
for (Surface surface : trackData.getSurfaces())
{
if (surface.getName().equals(segment.getSurface()))
{
trackSurface = surface;
break;
}
}
if (trackSurface == null)
{
for (Surface surface : defaultSurfaces)
{
trackSurface = surface;
break;
}
}
if (trackSurface != null)
{
object.setTexture(trackSurface.getTextureName());
}
int steps;
if (segment.hasProfilSteps())
{
steps = segment.getProfilSteps();
}
else
{
steps = (int) (segment.getLength() / segment.getValidProfilStepsLength(this) + 0.5) + 1;
}
int stride = segment.points.length / steps;
for (int i = 0; i < steps; i++)
{
int offset = i * stride;
if (i == 0)
{
object.getVertices().add(new double[] { segment.getPoints()[0].x, segment.getPoints()[0].z, -segment.getPoints()[0].y } );
object.getVertices().add(new double[] { segment.getPoints()[3].x, segment.getPoints()[3].z, -segment.getPoints()[3].y } );
}
object.getVertices().add(new double[] { segment.getPoints()[offset + 1].x, segment.getPoints()[offset + 1].z, -segment.getPoints()[offset + 1].y } );
object.getVertices().add(new double[] { segment.getPoints()[offset + 2].x, segment.getPoints()[offset + 2].z, -segment.getPoints()[offset + 2].y } );
}
for (int i = 0; i < steps; i++)
{
for (int j = 0; j < 2; j++)
{
Ac3dSurface surface = new Ac3dSurface();
surface.setPolygon();
surface.setSingleSided();
surface.setSmoothShaded();
surface.setMat(0);
if (j == 0)
{
surface.addRef((i * 2) + 0, 0.0, 0.0);
surface.addRef((i * 2) + 1, 0.0, 0.0);
surface.addRef((i * 2) + 2, 0.0, 0.0);
}
else
{
surface.addRef((i * 2) + 2, 0.0, 0.0);
surface.addRef((i * 2) + 1, 0.0, 0.0);
surface.addRef((i * 2) + 3, 0.0, 0.0);
}
object.addSurface(surface);
}
}
group.addKid(object);
}
try
{
track.write(filename);
}
catch (IOException e)
{
e.printStackTrace();
}
}
// Exit when window close
protected void processWindowEvent(WindowEvent e)

View File

@ -34,7 +34,7 @@ public class Properties
private static Properties instance = new Properties();
private Vector<ActionListener> propertiesListeners = new Vector<ActionListener>();
public final String title = "sd2-trackeditor";
public final String version = "1.4.28";
public final String version = "1.4.29";
private String path;
private double imageScale = 1;