Skip to content
Snippets Groups Projects
Select Git revision
  • 9311adfcd6320fa2040521fe8546caf5e09ea2c7
  • 5.4 default protected
  • 5.5
  • dev/5.5
  • dev/5.4
  • dev/5.3_downgrade
  • feature/experimenttime_hack
  • 5.3 protected
  • _IntenSelect5.3
  • IntenSelect5.3
  • 4.27 protected
  • 4.26 protected
  • 5.0 protected
  • 4.22 protected
  • 4.21 protected
  • UE5.4-2024.1
  • UE5.4-2024.1-rc1
  • UE5.3-2023.1-rc3
  • UE5.3-2023.1-rc2
  • UE5.3-2023.1-rc
20 results

VirtualRealityPawn.cpp

Blame
  • project.js 5.43 KiB
    import * as Zdog from "zdog";
    import { Model } from "./model.js";
    import { Move } from "./command.js";
    
    class Project {
      constructor() {
        this.model = new Model();
        this.addLine(0, 2000, 0, 0, 0);
      }
    
      // Draw things only once, then toggle visibility if needed. TODO!
    
      renderAll() {
        window.illo.children = []; // Is this ok to do? NO. TODO!
        this.refreshGridLines();
        this.model.drawAllShapes(); // Good idea? NO. TODO!
      }
    
      refreshGridLines() {
        // Get grid size or default to 10
        if (
          !Number.isInteger(parseInt(localStorage.getItem("settingsGridSize"), 10))
        ) {
          localStorage.setItem("settingsGridSize", "10");
        }
        let gridSize = parseInt(localStorage.getItem("settingsGridSize"), 10);
    
        // Remove old grid if exists
        if (window.illoGridGroup) {
          window.illo.removeChild(window.illoGridGroup);
        }
    
        if (localStorage.getItem("settingsGridDisplay") == "off") return;
    
        // New grid
        window.illoGridGroup = new Zdog.Group({
          addTo: window.illo,
        });
        let gridRenderLimit = 250;
        let minMaxGridPoint = parseInt(gridRenderLimit / gridSize) * gridSize;
    
        // Horizontal lines
        for (var x = -minMaxGridPoint; x < minMaxGridPoint; x += gridSize) {
          var color = "#bbbbbb";
          if (x == 0) {
            color = "#111111";
          }
          new Zdog.Shape({
            addTo: window.illoGridGroup,
            path: [
              {
                y: -gridRenderLimit,
                x: x,
                z: 0,
              },
              {
                y: gridRenderLimit,
                x: x,
                z: 0,
              },
            ],
            stroke: 0.5,
            color: color,
          });
          new Zdog.Shape({
            addTo: window.illoGridGroup,
            path: [
              {
                y: x,
                x: -gridRenderLimit,
                z: 0,
              },
              {
                y: x,
                x: gridRenderLimit,
                z: 0,
              },
            ],
            stroke: 0.5,
            color: color,
          });
        }
    
        // Vertical center line
        /*new Zdog.Shape({
          addTo: window.illoGridGroup,
          path: [
            {
              y: 0,
              x: 0,
              z: -gridRenderLimit,
            },
            {
              y: 0,
              x: 0,
              z: gridRenderLimit,
            },
          ],
          stroke: 0.5,
          color: "#111111",
        });*/
      }
    
      addLine(flow, speed, toX, toY, toZ) {
        if (flow < this.model.currentCoordinates().e) {
          flow = this.model.currentCoordinates().e;
        }
        var newLine = new Move(flow, speed, toX, toY, toZ);
        //window.currentProject.model.append(newLine);
        this.model.append(newLine);
      }
    
      addArc(flow, speed, size, directionXY, directionZ, curvature) {
        const prevCoords = this.model.currentCoordinates();
        var nextStartHeight = 0;
        const steps = Math.min(size, 50);
        const flowStep = (flow - prevCoords.e) / steps;
        const angle = 90;
        for (var i = 0; i <= steps; i++) {
          var sub_angle = (i / steps) * angle * 0.017453292519943295; // (angle / 180) * Math.PI;
          var xi = size * (1 - Math.cos(sub_angle));
          var zi = size * Math.sin(sub_angle);
          if (nextStartHeight == 0 && xi > 4) nextStartHeight = zi;
          if (
            (curvature == "1" && directionZ == "2") ||
            (curvature == "2" && directionZ == "1")
          ) {
            var tempX = xi;
            xi = zi;
            zi = tempX;
          }
          switch (directionXY) {
            default:
              var newX = prevCoords.x + xi;
              var newY = prevCoords.y;
              break;
            case "2":
              var newX = prevCoords.x;
              var newY = prevCoords.y + xi;
              break;
            case "3":
              var newX = prevCoords.x - xi;
              var newY = prevCoords.y;
              break;
            case "4":
              var newX = prevCoords.x;
              var newY = prevCoords.y - xi;
              break;
          }
          switch (directionZ) {
            default:
              var newZ = prevCoords.z + zi;
              break;
            case "2":
              var newZ = prevCoords.z - zi;
              break;
            case "3":
              var newZ = prevCoords.z;
              switch (directionXY) {
                default:
                  var newX = prevCoords.x + zi;
                  var newY = prevCoords.y + xi;
                  break;
                case "2":
                  var newX = prevCoords.x - zi;
                  var newY = prevCoords.y + xi;
                  break;
                case "3":
                  var newX = prevCoords.x - zi;
                  var newY = prevCoords.y - xi;
                  break;
                case "4":
                  var newX = prevCoords.x + zi;
                  var newY = prevCoords.y - xi;
                  break;
              }
              break;
          }
          var newMove = new Move(
            prevCoords.e + flowStep * i,
            speed,
            newX,
            newY,
            newZ
          );
          this.model.append(newMove);
        }
      }
    
      playbackDelay() {
        return new Promise((resolve) => {
          setTimeout(resolve, 250);
        });
      }
    
      async drawPlaybackStart() {
        console.log("start simulation");
        document.getElementById("playViewButton").lastChild.nodeValue = " Stop";
        window.stopPlayback = false;
    
        var cmd;
        var i = 0;
        while ((cmd = this.model.commands[i])) {
          this.model.selectCommand(i);
          await this.playbackDelay();
          this.model.deselectCommand(i);
          i++;
          if (window.stopPlayback) {
            break;
          }
        }
    
        console.log("stop simulation");
        document.getElementById("playViewButton").lastChild.nodeValue = " Simulate";
      }
    
      drawPlaybackStop() {
        window.stopPlayback = true;
      }
    }
    
    export { Project };