Beispiel #1
0
        protected void IsNewOrder(RightClickInfoToUnits _info)
        {
            switch (_info.type)
            {
            case RC_InfoType.None:      // if just a false parameter passing then return
                return;

            case RC_InfoType.pos:
                isResources.Value      = isEnemy.Value = false;
                outputMoveVector.Value = _info.newPos;
                outputMoveTarget.Value = null;      // clear the target for ai script to use vector as move target
                break;

            case RC_InfoType.enemyTar:
                isResources.Value      = false;
                isEnemy.Value          = true;
                outputMoveTarget.Value = _info.newTar;
                break;

            case RC_InfoType.resource:
                isResources.Value      = true;
                isEnemy.Value          = false;
                outputMoveTarget.Value = _info.newTar;
                break;
            }
            isRunning.Value = _info.isRun;
            if (isRunning.Value)
            {
                outputUnitSpeed.Value = inputUnitRunSpeed.Value;
            }
            else
            {
                outputUnitSpeed.Value = inputUnitWalkSpeed.Value;
            }
        }
 /********************************
 * --- Functions
 ********************************/
 protected virtual void ReceiveNewOrder(RightClickInfoToUnits _info)
 {
     if (selectionCircle != null)    // if this object has been selected
     {
         if (newOrder != null)
         {
             newOrder(_info);
         }
     }
 }
 protected void IsNewOrder(RightClickInfoToUnits _info)
 {
     // only use event as a triger
     isNewOrder = true;
 }
Beispiel #4
0
        protected virtual void Detect_New_pos()
        {
            //	double click judgement
            if (timer > 0)
            {
                timer -= Time.deltaTime;
            }
            else if (timer <= 0 && timerTriger) // insure this function only execute once
            {
                if (rightClickInfoType != RC_InfoType.None)
                {// if there are some ords
                    if (mousRBTiggerTwiceFlag)
                    {
                        isRunning = true;
                    }
                    else
                    {
                        isRunning = false;
                    }
                    if (newOrder != null)
                    {// if there are subscribers
                        var _info = new RightClickInfoToUnits
                        {
                            isRun = isRunning
                            ,
                            type = rightClickInfoType
                            ,
                            newPos = newFloorPos
                            ,
                            newTar = targetOBJ
                        };
                        newOrder(_info);   // sent a event to tell subscriber is a new order
                    }
                }
                timerTriger        = mousRBTiggerOnceFlag = mousRBTiggerTwiceFlag = false; // reset flags
                rightClickInfoType = RC_InfoType.None;
            }
            bool _mRb = Input.GetMouseButton(1);

            //	set a bool vaule and judge left mouse button
            //	only triger one cycle for each time left mouse button has been pusshed down
            //	do this is because sometimes Input.GetMouseButtonUp (0) miss value from mouse button
            if (_mRb & !mousRBTiggerOnceFlag)   // if mouse button been hit
            {
                mousRBTiggerOnce     = true;
                mousRBTiggerOnceFlag = true;
                if (!timerTriger)   // if timer is not ticking
                {
                    timerTriger = true;
                    timer       = 0.3f; // start timer
                }
                else
                {
                    mousRBTiggerTwiceFlag = true;   // double click before timer finish
                }
            }
            else if (!_mRb) // if mouse button has been release
            {
                mousRBTiggerOnceFlag = false;
            }

            //	if right mouse button has been click then give mouse clcik postion to calculate path
            if (mousRBTiggerOnce)
            {
                //Debug.Log("mouseHIt");
                mousRBTiggerOnce = false;
                Vector3    mousHitPos;
                Quaternion roteTo;

                if (RTS_Right_Mouse_Point_Select(_mRb))
                {// if not hit floor
                    rightClickInfoType = RC_InfoType.enemyTar;
                    //Debug.Log("---objHit");
                }
                else if (Public_Functions.Mous_Click_Get_Pos_Dir(Camera.main, transform, LayerMask.GetMask(RightClickOrderLayerName), out mousHitPos, out roteTo))
                {// if hit floor
                    newFloorPos        = mousHitPos;
                    rightClickInfoType = RC_InfoType.pos;
                    //Debug.Log("--------------------floorHit");
                }
                else
                {
                    //Debug.Log("------------------------------------hitnothing");
                }
            }
        }