public void Set(OrderImpulse order, CharacterSystem originUnit, Vector3 targetPosition) { _order = order; _originUnit = originUnit; _targetPosition = targetPosition; _integrateUnitFound = false; }
public void EndCurrentImpulseOrder() { _physic.ResetImpulses(); _debug_useGravity = false; if (_pendingOrder.Count > 0) { _pendingOrder.RemoveAt(0); } if (_currentOrder._orderType == Order.OrderType.IMPULSE) { OrderImpulse orderInpulse = _currentOrder as OrderImpulse; if (orderInpulse._endWorldPos != Vector3.zero) { _correctPosition = orderInpulse._endWorldPos; } else { orderInpulse._endWorldPos = transform.position; _correctPosition = orderInpulse._endWorldPos; _currentOrder = orderInpulse; } } }
public void Set(OrderImpulse order, CharacterSystem originUnit, CharacterSystem targetUnit) { _order = order; _originUnit = originUnit; _targetUnit = targetUnit; _integrateUnitFound = false; if (originUnit == _targetUnit) { StartCoroutine(InitiateDestruction()); return; } }
public void ExecuteOrder(Order order) { transform.position = _correctPosition; _currentOrder = order; switch (order._orderType) { case Order.OrderType.IMPULSE: OrderImpulse orderImpulse = order as OrderImpulse; /* * _debug_useGravity = true; * _physic.AddImpulse(orderImpulse._impulse); */ StartCoroutine(ExecuteImpulseOrder(orderImpulse)); break; } }
/* COOROUTINES */ IEnumerator ExecuteImpulseOrder(OrderImpulse order) { // Start order execution // Initialise oder _orderState = OrderState.INITIALISING; // Execute order _debug_useGravity = true; _physic.AddImpulse(order._impulse); // Wait until order is executed _orderState = OrderState.EXECUTING; // Wait for a base delay float delayMin = 0.1f; while (delayMin > 0 && _orderState != OrderState.FINALISING_BY_NODE) { delayMin -= Time.deltaTime; yield return null; } // If not stop on node during base delay if(_orderState != OrderState.FINALISING_BY_NODE) { // Wait for the unit to stop _orderState = OrderState.EXECUTING; while (!(_orderState == OrderState.FINALISING_BY_COLLISION || _orderState == OrderState.FINALISING_BY_NODE)) { yield return null; } } // Reset gravity _physic.ResetGravity(); // Reset all impulses _physic.ResetImpulses(); // Stop applying gravity _debug_useGravity = false; if (order._endWorldPos == Vector3.zero) { order._endWorldPos = transform.position; } // Open a new path if the travel do not finish on an already existing node if(_currentNode == null && _lastNode != null) { _lastNode.AddFrontNode(this, order); } else { StartCoroutine("CorrectPosition"); } // End order execution _orderState = OrderState.IDLE; yield return null; }
/* COOROUTINES */ IEnumerator ExecuteImpulseOrder(OrderImpulse order) { // Get origine position Vector3 startPos = transform.position; float startTime = Time.fixedTime; // Create an order transmiter GameObject orderTransmiter = Instantiate(_orderTransmiterPrefab); // Place the order transmiter in the scenne orderTransmiter.transform.position = startPos; // Activate it orderTransmiter.SetActive(true); // Configure order system OrderSystem orderSystem = orderTransmiter.GetComponent <OrderSystem>(); if (_backUnit != null) { orderSystem.Set(_storredOrder as OrderImpulse, this, _backUnit); } else { orderSystem.Set(_storredOrder as OrderImpulse, this, transform.position); } // Execute order _debug_useGravity = true; _physic.AddImpulse(order._impulse); float delayMin = 0.1f; while (delayMin > 0) { delayMin -= Time.deltaTime; yield return(null); } // Wait for the unit to stop to compleate the process _orderCompleated = false; while (!_orderCompleated) { yield return(null); } // End impulse order EndCurrentImpulseOrder(); _currentOrder._travelTime = Time.fixedTime - startTime; /* * // Reconfigure order system * if (_backUnit != null && !orderSystem._integrateUnitFound) { * orderSystem.Set(_storredOrder as OrderImpulse, this, _backUnit); * } */ orderSystem.Initialise(); // Reset current order _storredOrder = _currentOrder; _currentOrder = new Order(); yield return(null); }
/* COOROUTINES */ IEnumerator ExecuteImpulseOrder(OrderImpulse order) { // Get origine position Vector3 startPos = transform.position; float startTime = Time.fixedTime; // Create an order transmiter GameObject orderTransmiter = Instantiate(_orderTransmiterPrefab); // Place the order transmiter in the scenne orderTransmiter.transform.position = startPos; // Activate it orderTransmiter.SetActive(true); // Configure order system OrderSystem orderSystem = orderTransmiter.GetComponent<OrderSystem>(); if (_backUnit != null) { orderSystem.Set(_storredOrder as OrderImpulse, this, _backUnit); } else { orderSystem.Set(_storredOrder as OrderImpulse, this, transform.position); } // Execute order _debug_useGravity = true; _physic.AddImpulse(order._impulse); float delayMin = 0.1f; while (delayMin > 0) { delayMin -= Time.deltaTime; yield return null; } // Wait for the unit to stop to compleate the process _orderCompleated = false; while (!_orderCompleated) { yield return null; } // End impulse order EndCurrentImpulseOrder(); _currentOrder._travelTime = Time.fixedTime - startTime; /* // Reconfigure order system if (_backUnit != null && !orderSystem._integrateUnitFound) { orderSystem.Set(_storredOrder as OrderImpulse, this, _backUnit); } */ orderSystem.Initialise(); // Reset current order _storredOrder = _currentOrder; _currentOrder = new Order(); yield return null; }
/* COOROUTINES */ IEnumerator ExecuteImpulseOrder(OrderImpulse order) { // Start order execution // Initialise oder _orderState = OrderState.INITIALISING; // Execute order _debug_useGravity = true; _physic.AddImpulse(order._impulse); // Wait until order is executed _orderState = OrderState.EXECUTING; // Wait for a base delay float delayMin = 0.1f; while (delayMin > 0 && _orderState != OrderState.FINALISING_BY_NODE) { delayMin -= Time.deltaTime; yield return(null); } // If not stop on node during base delay if (_orderState != OrderState.FINALISING_BY_NODE) { // Wait for the unit to stop _orderState = OrderState.EXECUTING; while (!(_orderState == OrderState.FINALISING_BY_COLLISION || _orderState == OrderState.FINALISING_BY_NODE)) { yield return(null); } } // Reset gravity _physic.ResetGravity(); // Reset all impulses _physic.ResetImpulses(); // Stop applying gravity _debug_useGravity = false; if (order._endWorldPos == Vector3.zero) { order._endWorldPos = transform.position; } // Open a new path if the travel do not finish on an already existing node if (_currentNode == null && _lastNode != null) { _lastNode.AddFrontNode(this, order); } else { StartCoroutine("CorrectPosition"); } // End order execution _orderState = OrderState.IDLE; yield return(null); }