public static void StartNonNewtTranslation(Entity entity) { var moveDB = entity.GetDataBlob <WarpMovingDB>(); var warpDB = entity.GetDataBlob <WarpAbilityDB>(); var positionDB = entity.GetDataBlob <PositionDB>(); var maxSpeedMS = warpDB.MaxSpeed; var powerDB = entity.GetDataBlob <EnergyGenAbilityDB>(); EnergyGenProcessor.EnergyGen(entity, entity.StarSysDateTime); positionDB.SetParent(null); Vector3 targetPosMt = moveDB.ExitPointAbsolute; Vector3 currentPositionMt = positionDB.AbsolutePosition_m; Vector3 postionDelta = currentPositionMt - targetPosMt; double totalDistance = postionDelta.Length(); var creationCost = warpDB.BubbleCreationCost; var t = totalDistance / warpDB.MaxSpeed; var tcost = t * warpDB.BubbleSustainCost; double estored = powerDB.EnergyStored[warpDB.EnergyType]; if (creationCost <= estored) { var currentVelocityMS = Vector3.Normalise(targetPosMt - currentPositionMt) * maxSpeedMS; warpDB.CurrentVectorMS = currentVelocityMS; moveDB.CurrentNonNewtonionVectorMS = currentVelocityMS; moveDB.LastProcessDateTime = entity.Manager.ManagerSubpulses.StarSysDateTime; //estore = (estore.stored - creationCost, estore.maxStore); powerDB.AddDemand(creationCost, entity.StarSysDateTime); powerDB.AddDemand(-creationCost, entity.StarSysDateTime + TimeSpan.FromSeconds(1)); powerDB.AddDemand(warpDB.BubbleSustainCost, entity.StarSysDateTime + TimeSpan.FromSeconds(1)); //powerDB.EnergyStore[warpDB.EnergyType] = estore; } }
private void ManagerSubpulses_SystemDateChangedEvent(DateTime newdate) { //if we are looking at this, then we should process it even if nothing has changed. if (IsActive && CanActive) { if (_energyGenDB.dateTimeLastProcess != newdate) { EnergyGenProcessor.EnergyGen(_entityState.Entity, newdate); } } }
public override void OnSystemTickChange(DateTime newDateTime) { //if we are looking at this, then we should process it even if nothing has changed. if (IsActive && CanActive) { if (_energyGenDB.dateTimeLastProcess != newDateTime) { EnergyGenProcessor.EnergyGen(_entityState.Entity, newDateTime); } } }