public async Task <ActionResult <Resupply> > PostResupply(Resupply resupply) { _context.ActivityDomains.Add(resupply); await _context.SaveChangesAsync(); return(CreatedAtAction("GetResupply", new { id = resupply.Id }, resupply)); }
public async Task <IActionResult> PutResupply(long id, Resupply resupply) { if (id != resupply.Id) { return(BadRequest()); } _context.Entry(resupply).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ResupplyExists(id)) { return(NotFound()); } else { throw; } } return(NoContent()); }
private void Start() { var idle = new Idle(this); var moveToSupply = new MoveToSupply(this); var moveToSupplyWait = new MoveToSupplyWait(this); var moveToTarget = new MoveToTarget(this); var moveToDock = new MoveToDock(this); var requestTarget = new RequestTarget(this, manager); var descendToTarget = new DescendToTarget(this); var ascendFromTarget = new AscendFromTarget(this); var descendToSupply = new DescendToSupply(this); var descendToSupplyWait = new DescendToSupplyWait(this); var ascendFromSupply = new AscendFromSupply(this); var descendToDock = new DescendToDock(this); var ascendToTransHeight = new AscendToTransHeight(this); var waitAtSupply = new WaitAtSupply(this); var alignToSupply = new AlignToSupply(this); var alignToSupplyWait = new AlignToSupplyWait(this); var alignToDock = new AlignToDock(this); var alignToTarget = new AlignToTarget(this); var resupply = new Resupply(this); var buildBlock = new BuildBlock(this); var navigateToDock = new NavigateToDock(this); var navigateToSupply = new NavigateToSupply(this); var navigateToSupplyWait = new NavigateToSupplyWait(this); var navigateToTarget = new NavigateToTarget(this); _stateMachine.AddTransition(idle, requestTarget, IsRunning()); _stateMachine.AddTransition(requestTarget, ascendToTransHeight, AssignedTarget()); _stateMachine.AddTransition(requestTarget, navigateToDock, WaitForTarget()); _stateMachine.AddTransition(navigateToDock, moveToDock, ApproxNaviTargetPos); _stateMachine.AddTransition(moveToDock, alignToDock, ReachedDockXZ()); _stateMachine.AddTransition(alignToDock, descendToDock, ReachedNaviTargetRot); _stateMachine.AddTransition(descendToDock, idle, ReachedNaviTargetPos); _stateMachine.AddTransition(ascendToTransHeight, navigateToSupply, ReachedNaviPosSupplyIsCurrent()); _stateMachine.AddTransition(ascendToTransHeight, navigateToSupplyWait, ReachedNaviPosSupplyIsWait()); _stateMachine.AddTransition(navigateToSupply, moveToSupply, ApproxNaviTargetPos); _stateMachine.AddTransition(moveToSupply, alignToSupply, ReachedSupplyXZ()); _stateMachine.AddTransition(navigateToSupplyWait, moveToSupplyWait, ApproxNaviTargetPos); _stateMachine.AddTransition(moveToSupplyWait, navigateToSupply, ReachedNaviPosSupplyIsCurrent()); _stateMachine.AddTransition(moveToSupplyWait, alignToSupplyWait, ReachedNaviPosSupplyIsWait()); _stateMachine.AddTransition(alignToSupplyWait, navigateToSupply, ReachedNaviRotSupplyIsCurrent()); _stateMachine.AddTransition(alignToSupplyWait, descendToSupplyWait, ReachedNaviRotSupplyIsWait()); _stateMachine.AddTransition(alignToSupply, descendToSupply, ReachedSupplyRot()); _stateMachine.AddTransition(descendToSupplyWait, waitAtSupply, ReachedSupplyWait()); _stateMachine.AddTransition(waitAtSupply, navigateToSupply, WaitForSupplyFinished()); _stateMachine.AddTransition(descendToSupply, resupply, ReachedSupplyPosIsCurrent()); _stateMachine.AddTransition(resupply, ascendFromSupply, () => true); _stateMachine.AddTransition(ascendFromSupply, navigateToTarget, ReachedTransHeight()); _stateMachine.AddTransition(navigateToTarget, moveToTarget, ApproxNaviTargetPos); _stateMachine.AddTransition(moveToTarget, alignToTarget, ReachedTargetXZ()); _stateMachine.AddTransition(alignToTarget, descendToTarget, ReachedTargetRot()); _stateMachine.AddTransition(descendToTarget, buildBlock, ReachedTarget()); _stateMachine.AddTransition(buildBlock, ascendFromTarget, () => true); _stateMachine.AddTransition(ascendFromTarget, requestTarget, ReachedTransHeight()); _stateMachine.AddTransition(ascendFromTarget, navigateToDock, BatteryLow()); _stateMachine.SetState(idle); Func <bool> IsRunning() => () => running && IsCharged(); Func <bool> AssignedTarget() => () => target != null; Func <bool> WaitForTarget() => () => target == null && Vector3.Distance(transform.position, dock.position) > PosTolerance; Func <bool> ReachedSupplyXZ() => () => target != null && supply != null && ReachedNaviTargetPos(); Func <bool> ReachedSupplyWait() => () => target != null && supply != null && ReachedNaviTargetPos(); Func <bool> WaitForSupplyFinished() => () => target != null && supply != null && supply.IsDroneCurrent(this); Func <bool> ReachedTargetXZ() => () => target != null && ReachedNaviTargetPos(); Func <bool> ReachedTargetRot() => () => target != null && ReachedNaviTargetRot(); Func <bool> ReachedDockXZ() => () => target == null && ReachedNaviTargetPos(); Func <bool> ReachedTarget() => () => target != null && ReachedNaviTargetPos(); Func <bool> ReachedSupplyPosIsCurrent() => () => supply != null && ReachedNaviTargetPos() && supply.IsDroneCurrent(this) && Vector3.Distance(transform.position, supply.GetDroneAssignedTransform(this).position) <= PosTolerance; Func <bool> ReachedSupplyRot() => () => supply != null && ReachedNaviTargetRot(); Func <bool> ReachedTransHeight() => () => Mathf.Abs(transform.position.y - TransHeight) < PosTolerance; Func <bool> BatteryLow() => () => ReachedTransHeight()() && _battery <= BatteryThreshold; Func <bool> ReachedNaviPosSupplyIsCurrent() => () => supply.IsDroneCurrent(this) && ReachedNaviTargetPos(); Func <bool> ReachedNaviPosSupplyIsWait() => () => supply.IsDroneWaiting(this) && ReachedNaviTargetPos(); Func <bool> ReachedNaviRotSupplyIsCurrent() => () => supply.IsDroneCurrent(this) && ReachedNaviTargetRot(); Func <bool> ReachedNaviRotSupplyIsWait() => () => supply.IsDroneWaiting(this) && ReachedNaviTargetRot(); bool ApproxNaviTargetPos() => Vector3.Distance(transform.position, _naviTarget.position) <= NavTolerance; bool ReachedNaviTargetPos() => Vector3.Distance(transform.position, _naviTarget.position) <= PosTolerance; bool ReachedNaviTargetRot() => Mathf.Abs(transform.eulerAngles.y - _naviTarget.rotation.eulerAngles.y) <= RotTolerance; }
internal void Update() { Status.Update(); Resupply.Update(); ExpeditionStatus.Update(RawData.Expedition); var rState = FleetState.None; var rSortie = KanColleGame.Current.Sortie; if (rSortie?.Fleet == this || Port.Fleets.CombinedFleetType != CombinedFleetType.None && rSortie?.Fleet.ID == 1 && ID == 2) { rState |= FleetState.Sortie; } else if (ExpeditionStatus.Expedition != null) { rState |= FleetState.Expedition; } else { rState |= FleetState.Idle; } Ship[] rShipsToBeRepaired = null; if ((rState & FleetState.Idle) != 0) { if (r_Ships.Any(r => r.Fuel.Current < r.Fuel.Maximum || r.Bullet.Current < r.Bullet.Maximum)) { rState |= FleetState.Unsupplied; } if (r_Ships.Any(r => Port.RepairDocks.Values.Any(rpDock => rpDock.Ship == r))) { rState |= FleetState.Repairing; } if ((rState & FleetState.Repairing) == 0 && r_Ships.Any(r => (r.State & ShipState.HeavilyDamaged) != 0)) { rState |= FleetState.HeavilyDamaged; } if (r_Ships.Count > 0 && (ShipType)r_Ships[0].Info.Type.ID == ShipType.RepairShip) { rShipsToBeRepaired = r_Ships.Take(2 + r_Ships[0].EquipedEquipment.Count(r => r.Info.Type == EquipmentType.ShipRepairFacility)) .Where(r => r.DamageState != ShipDamageState.FullyHealthy && r.DamageState < ShipDamageState.ModeratelyDamaged && !Port.RepairDocks.Values.Any(rpDock => rpDock.Ship == r)).ToArray(); if (rShipsToBeRepaired.Length > 0) { rState |= FleetState.AnchorageRepair; } } } if ((rState & FleetState.Sortie) == 0) { ConditionRegeneration.Update(); } else { ConditionRegeneration.Reset(); } if ((rState & FleetState.AnchorageRepair) != 0) { AnchorageRepair.Update(rShipsToBeRepaired); } else if ((State & FleetState.AnchorageRepair) != 0) { AnchorageRepair.Stop(); } var rConditionType = ShipConditionType.HighMorale; foreach (var rShip in Ships) { if (rConditionType < rShip.ConditionType) { rConditionType = rShip.ConditionType; } } switch (rConditionType) { case ShipConditionType.HighMorale: rState |= FleetState.HighMorale; break; case ShipConditionType.ModerateTired: rState |= FleetState.ModerateTired; break; case ShipConditionType.SeriouslyTired: rState |= FleetState.SeriouslyTired; break; } State = rState; }
internal void Update() { Status.Update(); Resupply.Update(); ExpeditionStatus.Update(RawData.Expedition); var rState = FleetState.None; var rSortie = KanColleGame.Current.Sortie; if (rSortie?.Fleet == this || Port.Fleets.CombinedFleetType != CombinedFleetType.None && rSortie?.Fleet.ID == 1 && ID == 2) { rState |= FleetState.Sortie; } else if (ExpeditionStatus.Expedition != null) { rState |= FleetState.Expedition; } else { rState |= FleetState.Idle; } Ship[] rShipsToBeRepaired = null; if ((rState & FleetState.Idle) == FleetState.Idle) { if (r_Ships.Any(r => r.Fuel.Current < r.Fuel.Maximum || r.Bullet.Current < r.Bullet.Maximum)) { rState |= FleetState.Unsupplied; } if (r_Ships.Any(r => Port.RepairDocks.Values.Any(rpDock => rpDock.Ship == r))) { rState |= FleetState.Repairing; } if (r_Ships.Any(r => (r.State & ShipState.HeavilyDamaged) == ShipState.HeavilyDamaged)) { rState |= FleetState.HeavilyDamaged; } if (r_Ships.Count > 0 && (ShipType)r_Ships[0].Info.Type.ID == ShipType.RepairShip) { rShipsToBeRepaired = r_Ships.Take(2 + r_Ships[0].EquipedEquipment.Count(r => r.Info.Type == EquipmentType.ShipRepairFacility)) .Where(r => r.HP.Current != r.HP.Maximum && r.HP.Current / (double)r.HP.Maximum > .5 && !Port.RepairDocks.Values.Any(rpDock => rpDock.Ship == r)).ToArray(); if (rShipsToBeRepaired.Length > 0) { rState |= FleetState.AnchorageRepair; } } } if ((rState & FleetState.Sortie) == 0) { ConditionRegeneration.Update(); } else { ConditionRegeneration.Reset(); } if ((rState & FleetState.AnchorageRepair) == FleetState.AnchorageRepair) { AnchorageRepair.Update(rShipsToBeRepaired); } else if ((State & FleetState.AnchorageRepair) == FleetState.AnchorageRepair) { AnchorageRepair.Stop(); } State = rState; }