예제 #1
0
    void Move(int entity)
    {
        MoveCmp moveCmp = Storage.GetComponent <MoveCmp>(entity);
        //Rigidbody rigidbody = Storage.GetComponent<RigidbodyCmp>(entity).rigidbody;
        MoveControls moveControls = moveCmp.moveControls;

        float force = moveCmp.move_speed * Time.fixedDeltaTime * 100;

        if (Input.GetKey(moveControls.Forvard) || Input.GetKey(moveControls.Backward) && Input.GetKey(moveControls.Left) || Input.GetKey(moveControls.Rigt))
        {
            force /= (float)Math.Sqrt(2);
        }

        /*if (Input.GetKey(moveControls.Forvard))
         *  rigidbody.AddRelativeForce(new Vector3(force, 0, 0));
         * else if (Input.GetKey(moveControls.Backward))
         *  rigidbody.AddRelativeForce(new Vector3(-force, 0, 0));
         *
         * if (Input.GetKey(moveControls.Left))
         *  rigidbody.AddRelativeForce(new Vector3(0, 0, force));
         * else if (Input.GetKey(moveControls.Rigt))
         *  rigidbody.AddRelativeForce(new Vector3(0, 0, -force));
         *
         *
         * Vector2 gorizontal_speed = new Vector2(rigidbody.velocity.x, rigidbody.velocity.z);
         *
         * if (gorizontal_speed.magnitude > moveCmp.max_move_speed)
         * {
         *  gorizontal_speed = gorizontal_speed.normalized * moveCmp.max_move_speed;
         *  rigidbody.velocity = new Vector3(gorizontal_speed.x, rigidbody.velocity.y, gorizontal_speed.y);
         * }*/
    }
    protected override void onProcess(int familiesUpdateCount)
    {
        MoveControls    controls = _controlSystemGO.First().GetComponent <MoveControls>();
        SelectorPointer sp       = _selectorPointerGO.First().GetComponent <SelectorPointer>();

        if (sp.selectionChanged)
        {
            List <GameObject> controlled = sp.selectedGO.FindAll(go => go.CompareTag(controls.controlledTag));

            if (controlled.Count > 0)
            {
                controls.controlled = new List <MoveToDestination>();
                foreach (GameObject go in controlled)
                {
                    controls.controlled.Add(go.GetComponent <MoveToDestination>());
                }
            }
            else
            {
                controls.destination = sp.pointerPosition;
                foreach (MoveToDestination mtd in controls.controlled)
                {
                    mtd.currentDestination = controls.destination;
                }
            }
        }
    }
예제 #3
0
    void Move(int entity)
    {
        FPSCmp       fPSCmp       = Storage.GetComponent <FPSCmp>(entity);
        MoveControls moveControls = fPSCmp.moveControls;

        float   force       = fPSCmp.move_force * Time.fixedDeltaTime * 100;
        Vector3 forceVector = Vector3.zero;

        if (Input.GetKey(moveControls.Forvard) || Input.GetKey(moveControls.Backward) && Input.GetKey(moveControls.Left) || Input.GetKey(moveControls.Rigt))
        {
            force /= (float)Math.Sqrt(2);
        }

        if (Input.GetKey(moveControls.Forvard))
        {
            forceVector.x = force;
        }
        else if (Input.GetKey(moveControls.Backward))
        {
            forceVector.x = -force;
        }

        if (Input.GetKey(moveControls.Left))
        {
            forceVector.z = force;
        }
        else if (Input.GetKey(moveControls.Rigt))
        {
            forceVector.z = -force;
        }

        forceVector /= 1000;


        fPSCmp.is_moving = forceVector.magnitude > 0.01f;



        fPSCmp.controller.Move(fPSCmp.transform.TransformDirection(forceVector));
    }