public void Set(OrderImpulse order, CharacterSystem originUnit, Vector3 targetPosition)
 {
     _order              = order;
     _originUnit         = originUnit;
     _targetPosition     = targetPosition;
     _integrateUnitFound = false;
 }
Example #2
0
    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 Set(OrderImpulse order, CharacterSystem originUnit, CharacterSystem targetUnit)
    {
        _order              = order;
        _originUnit         = originUnit;
        _targetUnit         = targetUnit;
        _integrateUnitFound = false;

        if (originUnit == _targetUnit)
        {
            StartCoroutine(InitiateDestruction());
            return;
        }
    }
Example #5
0
    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;
    }
Example #7
0
    /* 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);
    }
 public void Set(OrderImpulse order, CharacterSystem originUnit, Vector3 targetPosition)
 {
     _order = order;
     _originUnit = originUnit;
     _targetPosition = targetPosition;
     _integrateUnitFound = false;
 }
    /* 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;
    }
Example #10
0
    /* 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);
    }