123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- import * as THREE from 'three';
- import { Hive } from './Hive.js';
- import { LineMaterial } from 'three/examples/jsm/lines/LineMaterial.js';
- import { LineGeometry } from 'three/examples/jsm/lines/LineGeometry.js';
- import { Line2 } from 'three/examples/jsm/lines/Line2.js';
- export class Waypoint {
- static collection = [];
- constructor(scene) {
- this.scene = scene;
- this.position = new THREE.Vector3();
- this.links = [];
- this.lines = [];
- this.special = null;
- }
- init() {
- }
- update(delta, timer) {
- }
- addLink(link) {
- this.links.push(link);
- }
- removeLink(link) {
- this.links.splice(this.links.indexOf(link), 1);
- return link;
- }
- rebuildLines() {
- for (let i = 0; i < this.lines.length; i++) {
- this.scene.remove(this.lines[i]);
- }
- this.lines.length = 0;
- for (let s = 0; s < this.links.length; s++) {
- let link = this.links[s];
- let line = Waypoint.buildLine(this, link);
- this.lines.push(line);
- }
- }
- addLine(link) {
- this.lines.push(Waypoint.buildLine(this, link));
- }
- removeLine(link) {
- this.rebuildLines();
- }
- contains(link) {
- return this.links.includes(link);
- }
- visitFromBee(bee) {
- if (bee.carryingHoney > 0) {
- bee.setTarget(this.links.filter(l => l instanceof Hive)[0]);
- return;
- }
- bee.setTarget(this.links[Math.floor(this.links.length * Math.random())]);
- }
- static addNewHive(scene, hive) {
- let newWaypoint = new Waypoint(scene);
- newWaypoint.position.x = hive.position.x + (30 * Math.cos((Math.PI / 2) - hive.rotation.y));
- newWaypoint.position.y = hive.position.y;
- newWaypoint.position.z = hive.position.z + (30 * Math.sin((Math.PI / 2) - hive.rotation.y));
- newWaypoint.addLink(hive);
- Waypoint.collection.push(newWaypoint);
- return newWaypoint;
- }
- static buildLine(startObj, endObj) {
- let points = [];
- points.push(new THREE.Vector3(startObj.position.x, 1.2, startObj.position.z));
- points.push(new THREE.Vector3(endObj.position.x, 1.2, endObj.position.z));
- let color = new THREE.Color();
- color.setHSL(Math.floor(360 * Math.random()) / 360, 1.0, 0.7);
- let positions = [];
- let colors = [];
- for (let w = 0; w < points.length; w++) {
- positions.push(points[w].x, points[w].y, points[w].z);
- colors.push(color.r, color.g, color.b);
- }
- let lineGeo = new LineGeometry();
- lineGeo.setPositions(positions);
- lineGeo.setColors(colors);
- let lineMat = new LineMaterial({
- color: 0xffffff,
- linewidth: 5, // in pixels
- vertexColors: true,
- //resolution: // to be set by renderer, eventually
- dashed: false
- });
- lineMat.resolution.set(window.innerWidth, window.innerHeight);
- let line = new Line2(lineGeo, lineMat);
- line.computeLineDistances();
- line.scale.set(1, 1, 1);
- return line;
- }
- }
|