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; }
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"); } } }