コード例 #1
0
    void addOrRemoveTarget(ISelectableTarget target)
    {
        // if has 2 selected and selecting an new one, clear old selections
        if(target!=null && selection1!=null && selection2!=null){
            selection1 = selection2 = null;
        }

        // if has no first selection select it if it isnt selected as second
        if(selection1 == null){
            if(selection2!=target){
                selection1 = target;
                return;
            }

        }else if(selection1 == target){
            selection1 = null;
            return;
        }

        // if has no second selection select it if it isnt selected as first
        if(selection2 == null){
            if(selection1!=target){
                selection2 = target;
                return;
            }
        }else if(selection2 == target){
            selection2 = null;
            return;
        }
    }
コード例 #2
0
    void SelectTarget(RaycastHit h)
    {
        ISelectableTarget trg = h.collider.gameObject.GetComponent <ISelectableTarget>();

        if (trg != null)
        {
            GUIManager gui = GUIManager.instance;
            gui.trgDist.text = Mathf.CeilToInt((transform.position - h.transform.position).magnitude * 4f).ToString() + "м";
            gui.trgName.text = trg.GetName();
            gui.trgSpd.text  = (h.collider.gameObject.GetComponent <Rigidbody>().velocity.magnitude * 4f).ToString() + "мс";

            if (selectedTarget)
            {
                selectedTarget = null;
                Destroy(selMarker);
            }
            selectedTarget      = h.collider.gameObject;
            selMarker           = selectedTarget.AddComponent <SelectionMarker>();
            selMarker.markerFab = selectionMarkerFab;
            audiosource.PlayOneShot(selectTg);
        }
        else
        {
            DeselectTarget();
        }
    }
コード例 #3
0
    void UpdateTargetInfo()
    {
        ISelectableTarget trg = selectedTarget.GetComponent <ISelectableTarget>();
        GUIManager        gui = GUIManager.instance;

        gui.trgDist.text = Mathf.CeilToInt((transform.position - selectedTarget.transform.position).magnitude * 4f).ToString() + "м";
        gui.trgName.text = trg.GetName();
        gui.trgSpd.text  = (Mathf.RoundToInt(selectedTarget.GetComponent <Rigidbody>().velocity.magnitude * 4f)).ToString() + "мс";
    }
コード例 #4
0
    // Update is called once per frame
    void Update()
    {
        // select targets
        if(Input.GetMouseButtonDown(0)){
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;

            if(Physics.Raycast(ray,out hit,1000)){
                if(hit.collider.tag == "selectableTarget"){
                    //ISelectableTarget selectableTarget = (ISelectableTarget)GetComponent(typeof(ISelectableTarget));

                    ISelectableTarget selectableTarget = hit.collider.gameObject.GetComponent(typeof(ISelectableTarget)) as ISelectableTarget;
                    /*
                    ISelectableTarget selectableTarget = (ISelectableTarget)hit.collider.gameObject.GetComponent<ISelectableTarget>();
                    gameObject.getco
                    */
                    addOrRemoveTarget(selectableTarget);
                }
            }
        }

        //draw circle 1
        if(selection1!=null){
            for(int i=1; i<=circleNumberOfLines; i++){
                Vector3 pos = selection1.getPosition();
                pos.x = (pos.x + Mathf.Sin(((360/circleNumberOfLines)*i*Mathf.Deg2Rad) + drawCircleOffset )*circleDiameter);
                pos.z = (pos.z + Mathf.Cos(((360/circleNumberOfLines)*i*Mathf.Deg2Rad) + drawCircleOffset )*circleDiameter);
                lineRenderer1.SetPosition(i-1,pos);
            }
            lineRenderer1.enabled = true;
        }else{
            lineRenderer1.enabled = false;
        }

        //draw circle 2
        if(selection2!=null){
            for(int i=1; i<=circleNumberOfLines; i++){
                Vector3 pos = selection2.getPosition();
                pos.x = (pos.x + Mathf.Sin(((360/circleNumberOfLines)*i*Mathf.Deg2Rad) - drawCircleOffset )*circleDiameter);
                pos.z = (pos.z + Mathf.Cos(((360/circleNumberOfLines)*i*Mathf.Deg2Rad) - drawCircleOffset )*circleDiameter);
                lineRenderer2.SetPosition(i-1,pos);
            }
            lineRenderer2.enabled = true;
        }else{
            lineRenderer2.enabled = false;
        }

        //draw line between and to player
        if(selection1!=null && selection2!=null){
            lineRendererToPlayer.SetPosition(0,selection1.getPosition());

            Vector3[] vectors = new Vector3[2];
            vectors[0] = selection1.getPosition();
            vectors[1] = selection2.getPosition();
            Vector3 center = CenterOfVectors(vectors);

            lineRendererToPlayer.SetPosition(0,robot.transform.position);
            lineRendererToPlayer.SetPosition(1,center);

            betweenLineRenderer.SetPosition(0,selection1.getPosition());
            betweenLineRenderer.SetPosition(1,selection2.getPosition());

            // if reached target, clear selections
            if(center.z <= robot.transform.position.z){
                selection1 = selection2 = null;
            }else{
                //centerOfSelections.transform.position = center;
                // smooth
                centerOfSelections.transform.position += (center-centerOfSelections.transform.position)/center_move_easing;
            }

            centerOfSelections.renderer.enabled = false;
            betweenLineRenderer.renderer.enabled = true;
            lineRendererToPlayer.enabled = true;
        }else{

            Vector3 _tempPos = robot.transform.position;
            _tempPos.z += 30;
            //centerOfSelections.transform.position = _tempPos;

            //smooth
            centerOfSelections.transform.position += (_tempPos-centerOfSelections.transform.position)/center_move_easing;

            centerOfSelections.renderer.enabled = false;
            betweenLineRenderer.renderer.enabled = false;
            lineRendererToPlayer.enabled = false;
        }

        // animate circle
        drawCircleOffset += Time.deltaTime*circleTurnSpeed;
    }