public void SetHarvestState(HarvestState newState) { harvestState = newState; switch (harvestState) { case HarvestState.MoveToField: var order = new MovePositionOrder(); order.executor = selfUnit; order.movePosition = resourcesField.transform.position + new Vector3(Random.Range(-randomFieldDistance, randomFieldDistance), 0, Random.Range(-randomFieldDistance, randomFieldDistance)); // todo change to proportion of resource field size selfUnit.AddOrder(order, false, isReceivedEventNeeded: false); break; case HarvestState.Harvest: harvestTimeLeft = selfUnit.data.harvestTime; break; case HarvestState.MoveToRefinery: var orderBack = new MovePositionOrder(); orderBack.movePosition = nearestRefinery.CarryOutResourcesPoint.position; selfUnit.AddOrder(orderBack, false, isReceivedEventNeeded: false); break; case HarvestState.CarryOutResources: carryOutTimeLeft = selfUnit.data.harvestCarryOutTime; addedToRefineryResources = 0; break; } }
public void ShuffleUnitsOnExit(Vector3 origin, Unit askedFromUnit, int depth = 0) { var colliders = Physics.OverlapCapsule(origin, origin + Vector3.up * 20f, 1f); for (int i = 0; i < colliders.Length; i++) { var unit = colliders[i].GetComponent <Unit>(); if (unit && askedFromUnit != unit && unit.IsInMyTeam(selfUnit) && unit.data.moveType == askedFromUnit.data.moveType) // && !unit.HasOrders() // has orders was needed to prevent stopping units who just moved near exit point, but works bad { int randomizeDirection = Random.Range(0, 2); var direction = randomizeDirection == 0 ? 1 : -1; var moveOrder = new MovePositionOrder(); moveOrder.movePosition = unit.transform.position + (3f * direction * unit.transform.right); if (depth < 2) { ShuffleUnitsOnExit(moveOrder.movePosition, unit, depth + 1); } unit.AddOrder(moveOrder, false); } } }
public override Order Clone() { MovePositionOrder order = new MovePositionOrder { movePosition = movePosition }; return(order); }
public void ExitUnit(Unit unit) { SetUnitCarryState(unit, false); var randomedX = Mathf.Sin(Random.Range(-1f, 1f) * Mathf.PI); var randomedZ = Mathf.Cos(Random.Range(-1f, 1f) * Mathf.PI); unit.transform.position = transform.position + new Vector3(randomedX, 0f, randomedZ); var order = new MovePositionOrder(); order.movePosition = unit.transform.position + new Vector3(randomedX, 0f, randomedZ) * 2f; unit.AddOrder(order, false, false); carryingUnits.Remove(unit); }
void SpawnCurrentUnit(UnitData unitData) { var spawnedUnit = SpawnController.SpawnUnit(unitData, selfUnit.OwnerPlayerId, spawnPoint); if (spawnedUnit.GetComponent <Harvester>()) // resource harvesters have their own code to move to the resource field. { return; } var order = new MovePositionOrder { movePosition = moveWaypoint.position }; if (unitData.moveType == UnitData.MoveType.Flying) { order.movePosition += new Vector3(Random.Range(-3f, 3f), 0f, Random.Range(-3f, 3f)); } spawnedUnit.AddOrder(order, false); ShuffleUnitsOnExit(order.movePosition, selfUnit); }