/* 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; using System.Collections; using System.Collections.Generic; using System.Linq; using MessagePack; using Newtonsoft.Json; using Unity.Mathematics; using static Unity.Mathematics.math; // [MessagePackObject, JsonObject(MemberSerialization.OptIn), EntityTypeRestriction(HullType.Ship), Order(-100)] // public class TowingControllerData : ControllerData // { // public override IBehavior CreateInstance(ItemManager context, Entity entity, EquippedItem item) // { // return new TowingController(context, this, entity, item); // } // } // // public class TowingController : ControllerBase, IBehavior, IPersistentBehavior // { // // private TowingControllerData _data; // private EquippedItem Item { get; } // private bool _taskStarted; // // public TowingController(ItemManager itemManager, TowingControllerData data, Entity entity, EquippedItem item) : base(itemManager, data, entity) // { // _data = data; // Item = item; // } // // public new bool Execute(float delta) // { // if (Task != null) // { // if (!_taskStarted) // { // MoveTo(Task.Station, true, OnPickup); // _taskStarted = true; // } // } // return base.Execute(delta); // } // // // void OnZoneArrival() // // { // // var towingTask = _context.ItemData.Get(Task); // // // // _entity.SetMessage("Entering pickup phase."); // // // // MoveTo(_context.ItemData.Get(towingTask.Station), true, OnPickup); // // } // // void OnPickup() // { // Task.Station.SetParent(Entity); // // Entity.SetMessage("Entering delivery phase."); // // MoveTo(() => // { // var orbitParent = Zone.GetOrbitPosition(Task.OrbitParent); // var parentToUs = Entity.Position.xz - orbitParent; // return orbitParent + normalize(parentToUs) * Task.OrbitDistance; // }, () => Zone.GetOrbitVelocity(Task.OrbitParent), OnDelivery); // } // // void OnDelivery() // { // Task.Station.RemoveParent(); // // Entity.SetMessage("Target delivered. Returning Home."); // // var orbit = Zone.CreateOrbit(Task.OrbitParent, Entity.Position.xz); // Task.Station.OrbitData = orbit.ID; // // FinishTask(); // _taskStarted = false; // } // // public PersistentBehaviorData Store() // { // return new TowingControllerPersistence // { // Task = Task // }; // } // // public void Restore(PersistentBehaviorData data) // { // var towingControllerPersistence = data as TowingControllerPersistence; // Task = towingControllerPersistence.Task; // } // } // // public class TowingControllerPersistence : PersistentBehaviorData // { // [JsonProperty("task"), Key(0)] // public StationTowing Task; // }