2020-12-22 03:13:43 +00:00
|
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
|
|
|
|
|
|
|
|
|
|
using System;
|
2020-05-29 23:06:35 +01:00
|
|
|
|
using System.Collections;
|
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using MessagePack;
|
|
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
|
using RethinkDb.Driver.Ast;
|
|
|
|
|
|
using Unity.Mathematics;
|
|
|
|
|
|
using static Unity.Mathematics.math;
|
|
|
|
|
|
|
2021-02-26 19:01:47 +00:00
|
|
|
|
// [MessagePackObject, JsonObject(MemberSerialization.OptIn), EntityTypeRestriction(HullType.Ship), Order(-100)]
|
|
|
|
|
|
// public class SurveyControllerData : ControllerData
|
|
|
|
|
|
// {
|
|
|
|
|
|
// public override IBehavior CreateInstance(ItemManager context, Entity entity, EquippedItem item)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// return new SurveyController(context, this, entity, item);
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// public class SurveyController : ControllerBase<Survey>, IBehavior, IPersistentBehavior, IInitializableBehavior
|
|
|
|
|
|
// {
|
|
|
|
|
|
// private EquippedItem Item { get; }
|
|
|
|
|
|
//
|
|
|
|
|
|
// private SurveyControllerData _data;
|
|
|
|
|
|
// private bool _taskStarted;
|
|
|
|
|
|
// private ResourceScanner _scanningTool;
|
|
|
|
|
|
// private Switch _toolSwitch;
|
|
|
|
|
|
// private Guid _targetPlanet;
|
|
|
|
|
|
// private int _asteroid = -1;
|
|
|
|
|
|
//
|
|
|
|
|
|
// public SurveyController(ItemManager itemManager, SurveyControllerData data, Entity entity, EquippedItem item) : base(itemManager, data, entity)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// _data = data;
|
|
|
|
|
|
// Item = item;
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// public new void Initialize()
|
|
|
|
|
|
// {
|
|
|
|
|
|
// _scanningTool = Entity.GetBehavior<ResourceScanner>();
|
|
|
|
|
|
// // _toolSwitch = Entity.GetSwitch<ResourceScanner>();
|
|
|
|
|
|
// base.Initialize();
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// public new bool Execute(float delta)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// // var corporation = _context.ItemData.Get<Corporation>(_entity.Corporation);
|
|
|
|
|
|
// // if (surveyTask != null)
|
|
|
|
|
|
// // {
|
|
|
|
|
|
// // if (!_taskStarted)
|
|
|
|
|
|
// // {
|
|
|
|
|
|
// // if (surveyTask.Planets.Any())
|
|
|
|
|
|
// // {
|
|
|
|
|
|
// // _entity.SetMessage("Moving to survey target.");
|
|
|
|
|
|
// // NextPlanet();
|
|
|
|
|
|
// // _scanningTool.ScanTarget = _targetPlanet;
|
|
|
|
|
|
// // _scanningTool.Asteroid = _asteroid;
|
|
|
|
|
|
// // if (!corporation.PlanetSurveyFloor.ContainsKey(_targetPlanet) ||
|
|
|
|
|
|
// // corporation.PlanetSurveyFloor[_targetPlanet] + .5f < _scanningTool.MinimumDensity)
|
|
|
|
|
|
// // {
|
|
|
|
|
|
// // var planetData = _context.ItemData.Get<BodyData>(_targetPlanet);
|
|
|
|
|
|
// // MoveTo(() =>
|
|
|
|
|
|
// // {
|
|
|
|
|
|
// // var target = GetPosition(planetData, _asteroid);
|
|
|
|
|
|
// // var targetToUs = _entity.Position - target;
|
|
|
|
|
|
// // return target + normalize(targetToUs) * _scanningTool.Range / 2;
|
|
|
|
|
|
// // },
|
|
|
|
|
|
// // () => GetVelocity(planetData, _asteroid),
|
|
|
|
|
|
// // () => _entity.SetMessage("Arrived at target. Scanning for resources."));
|
|
|
|
|
|
// // _taskStarted = true;
|
|
|
|
|
|
// // }
|
|
|
|
|
|
// // else
|
|
|
|
|
|
// // surveyTask.Planets.Remove(_targetPlanet);
|
|
|
|
|
|
// // }
|
|
|
|
|
|
// // else
|
|
|
|
|
|
// // {
|
|
|
|
|
|
// // _entity.SetMessage("Survey complete. Returning Home.");
|
|
|
|
|
|
// // FinishTask();
|
|
|
|
|
|
// // }
|
|
|
|
|
|
// // }
|
|
|
|
|
|
// // else
|
|
|
|
|
|
// // {
|
|
|
|
|
|
// // if (!Moving)
|
|
|
|
|
|
// // {
|
|
|
|
|
|
// // var planetData = _context.ItemData.Get<BodyData>(_targetPlanet);
|
|
|
|
|
|
// // if ((!corporation.PlanetSurveyFloor.ContainsKey(_targetPlanet) ||
|
|
|
|
|
|
// // corporation.PlanetSurveyFloor[_targetPlanet] + .5f < _scanningTool.MinimumDensity) &&
|
|
|
|
|
|
// // length(_entity.Position - GetPosition(planetData, _asteroid)) < _scanningTool.Range)
|
|
|
|
|
|
// // {
|
|
|
|
|
|
// // _toolSwitch.Activated = true;
|
|
|
|
|
|
// // Aim.Objective = GetPosition(planetData, _asteroid);
|
|
|
|
|
|
// // Aim.Update(delta);
|
|
|
|
|
|
// // }
|
|
|
|
|
|
// // else
|
|
|
|
|
|
// // {
|
|
|
|
|
|
// // _toolSwitch.Activated = false;
|
|
|
|
|
|
// // _taskStarted = false;
|
|
|
|
|
|
// // }
|
|
|
|
|
|
// // }
|
|
|
|
|
|
// // }
|
|
|
|
|
|
// // }
|
|
|
|
|
|
// return base.Execute(delta);
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// private void NextPlanet()
|
|
|
|
|
|
// {
|
|
|
|
|
|
// var planets = Task.Planets.Select(id => Zone.Planets[id]);
|
|
|
|
|
|
// var nearestPlanet = planets.MinBy(p => lengthsq(Entity.Position.xz - GetPosition(p)));
|
|
|
|
|
|
// _asteroid = nearestPlanet is AsteroidBeltData ? Zone.NearestAsteroid(nearestPlanet.ID, Entity.Position.xz) : -1;
|
|
|
|
|
|
// _targetPlanet = nearestPlanet.ID;
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// private float2 GetPosition(BodyData planet, int asteroid = -1)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// if (planet is AsteroidBeltData)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// if(asteroid == -1) asteroid = Zone.NearestAsteroid(planet.ID, Entity.Position.xz);
|
|
|
|
|
|
// return Zone.AsteroidBelts[planet.ID].Positions[asteroid].xz;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// return Zone.GetOrbitPosition(planet.Orbit);
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// private float2 GetVelocity(BodyData planet, int asteroid = -1)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// if (planet is AsteroidBeltData)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// if(asteroid == -1) asteroid = Zone.NearestAsteroid(planet.ID, Entity.Position.xz);
|
|
|
|
|
|
// return Zone.AsteroidBelts[planet.ID].Velocities[asteroid];
|
|
|
|
|
|
// }
|
|
|
|
|
|
// return Zone.GetOrbitVelocity(planet.Orbit);
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// public PersistentBehaviorData Store()
|
|
|
|
|
|
// {
|
|
|
|
|
|
// return new SurveyControllerPersistence
|
|
|
|
|
|
// {
|
|
|
|
|
|
// Task = Task
|
|
|
|
|
|
// };
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// public void Restore(PersistentBehaviorData data)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// var surveyControllerPersistence = data as SurveyControllerPersistence;
|
|
|
|
|
|
// Task = surveyControllerPersistence.Task;
|
|
|
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
//
|
|
|
|
|
|
// public class SurveyControllerPersistence : PersistentBehaviorData
|
|
|
|
|
|
// {
|
|
|
|
|
|
// [JsonProperty("task"), Key(0)]
|
|
|
|
|
|
// public Survey Task;
|
|
|
|
|
|
// }
|