--- /dev/null
+/*
+ * Sixth 3D engine demos. Author: Svjatoslav Agejenko.
+ * This project is released under Creative Commons Zero (CC0) license.
+ *
+*/
+
+package eu.svjatoslav.sixth.e3d.examples;
+
+import eu.svjatoslav.sixth.e3d.geometry.Point2D;
+import eu.svjatoslav.sixth.e3d.geometry.Point3D;
+import eu.svjatoslav.sixth.e3d.geometry.Rectangle;
+import eu.svjatoslav.sixth.e3d.gui.Avatar;
+import eu.svjatoslav.sixth.e3d.gui.ViewFrame;
+import eu.svjatoslav.sixth.e3d.gui.ViewPanel;
+import eu.svjatoslav.sixth.e3d.gui.textEditorComponent.LookAndFeel;
+import eu.svjatoslav.sixth.e3d.gui.textEditorComponent.TextEditComponent;
+import eu.svjatoslav.sixth.e3d.math.Transform;
+import eu.svjatoslav.sixth.e3d.renderer.raster.Color;
+import eu.svjatoslav.sixth.e3d.renderer.raster.ShapeCollection;
+import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.basic.line.LineAppearance;
+import eu.svjatoslav.sixth.e3d.renderer.raster.shapes.composite.wireframe.Grid2D;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URISyntaxException;
+import java.util.stream.Collectors;
+
+public class TextEditorDemo2 {
+
+ public static void main(final String[] args) {
+ try {
+ new TextEditorDemo2().build();
+ } catch (URISyntaxException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public void build() throws URISyntaxException, IOException {
+ final ViewFrame viewFrame = new ViewFrame();
+ final ViewPanel viewPanel = viewFrame.getViewPanel();
+
+ final ShapeCollection shapeCollection = viewFrame.getViewPanel()
+ .getRootShapeCollection();
+
+ setAvatarLocation(viewPanel);
+
+ addGrid(shapeCollection);
+
+ addCity(viewPanel, shapeCollection);
+ }
+
+ private void addCity(ViewPanel viewPanel, ShapeCollection shapeCollection) throws URISyntaxException, IOException {
+ int citySize = 4000;
+ for (int z = -citySize; z< citySize; z+= 1000 ){
+ for (int x = -citySize; x< citySize; x+= 1000 ){
+ addBuilding(viewPanel, shapeCollection, x, z);
+ }
+ }
+ }
+
+
+ private static void addGrid(ShapeCollection shapeCollection) {
+ final Transform transform = new Transform(new Point3D(0, 100, 0), 0,
+ Math.PI / 2);
+
+ final Rectangle rectangle = new Rectangle(10000);
+ final LineAppearance appearance = new LineAppearance(10, new Color(
+ "00b3ad"));
+
+ shapeCollection.addShape(new Grid2D(transform, rectangle, 50, 50, appearance));
+ }
+
+
+ private void addBuilding(ViewPanel viewPanel, ShapeCollection shapeCollection, double x, double z) throws URISyntaxException, IOException {
+ Transform transform = new Transform(new Point3D(x, -390, z-200));
+ addTextEditor(viewPanel, shapeCollection, transform);
+
+ transform = new Transform(new Point3D(x, -390, z+200),Math.PI, 0);
+ addTextEditor(viewPanel, shapeCollection, transform);
+
+ transform = new Transform(new Point3D(x-200, -390, z),Math.PI/2, 0);
+ addTextEditor(viewPanel, shapeCollection, transform);
+
+ transform = new Transform(new Point3D(x+200, -390, z),Math.PI/2*3f, 0);
+ addTextEditor(viewPanel, shapeCollection, transform);
+ }
+
+ private void addTextEditor(ViewPanel viewPanel, ShapeCollection shapeCollection, Transform transform) throws IOException {
+ LookAndFeel lookAndFeel = getLookAndFeel();
+
+ final TextEditComponent textEditor = new TextEditComponent(
+ transform,
+ viewPanel,
+ new Point2D(400, 1000),
+ lookAndFeel
+ );
+
+ String text = getResourceFileAsString("demo.txt");
+
+ textEditor.setText(text);
+ textEditor.goToLine((int)(Math.random()*200f));
+ shapeCollection.addShape(textEditor);
+ }
+
+ private LookAndFeel getLookAndFeel() {
+ LookAndFeel lookAndFeel = new LookAndFeel();
+ lookAndFeel.background = new Color(20, 20, 50, 150);
+ lookAndFeel.tabStopBackground = lookAndFeel.background;
+ lookAndFeel.foreground = new Color(150, 150, 255,250);
+ return lookAndFeel;
+ }
+
+ static String getResourceFileAsString(String fileName) throws IOException {
+ ClassLoader classLoader = ClassLoader.getSystemClassLoader();
+ try (InputStream is = classLoader.getResourceAsStream(fileName)) {
+ if (is == null) return null;
+ try (InputStreamReader isr = new InputStreamReader(is);
+ BufferedReader reader = new BufferedReader(isr)) {
+ return reader.lines().collect(Collectors.joining(System.lineSeparator()));
+ }
+ }
+ }
+
+ private static void setAvatarLocation(ViewPanel viewPanel) {
+ Avatar avatar = viewPanel.getAvatar();
+ avatar.setLocation(new Point3D(500, -300, -800));
+ avatar.setAngleXZ(0.6);
+ avatar.setAngleYZ(-0.5);
+ }
+}