Beispiel #1
0
    public int GetNextScene(Enums.GameMode gameMode, int currSceneIndex)
    {
        foreach (SceneList sl in allGameScenes)
        {
            if (sl.gameMode == gameMode)
            {
                for (int i = 0; i < sl.sceneBuildIndex.Count - 1; ++i)
                {
                    if (sl.sceneBuildIndex[i] == currSceneIndex)
                    {
                        return(sl.sceneBuildIndex[i + 1]);
                    }
                }
            }
        }

        return(0);
    }
        public IEnumerable <RecordModel> GetTopThree(Enums.GameMode gameMode, Enums.Difficulty difficulty)
        {
            List <RecordModel> topThree = new List <RecordModel>();
            var query = from record in Records.OrderBy(x => x.Score)
                        where record.GameMode == gameMode && record.Difficulty == difficulty
                        select record as RecordModel;

            while (topThree.Count < 4)
            {
                foreach (var record in query)
                {
                    topThree.Add(record);
                }
                if (topThree.Count == query.Count())
                {
                    break;
                }
            }
            return(topThree.OrderByDescending(x => x.Score));
        }
    void HandleDragAndDrop(Enums.GameMode game_mode)
    {
        // Handles pick up part of drag and drop
        if (Input.GetButtonDown("Fire1"))
        {
            var        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            var        layerMask = 1 << 8;      //only raycast to layer 8

            if (Physics.Raycast(ray.origin, ray.direction, out hit, Mathf.Infinity, layerMask))
            {
                objectBeingDragged = hit.transform;

                if (objectBeingDragged.GetComponent <Die>())
                {
                    objectBeingDragged.position += new Vector3(0, grabHeight, 0);
                }
                else
                {
                    objectBeingDragged.position += new Vector3(0, grabHeight, 0);
                }
                objectBeingDraggedOriginalRotation = objectBeingDragged.rotation;

                initial_object_pos      = objectBeingDragged.transform.position;
                intermediate_object_pos = objectBeingDragged.transform.position;
                cumulative_distance     = 0f;
            }
        }


        // Handles drop part of drag and drop
        if (Input.GetButtonUp("Fire1"))
        {
            if (objectBeingDragged != null)
            {
                if (objectBeingDragged.GetComponent <Die>())
                {
                    Rigidbody rigidbody = objectBeingDragged.GetComponent <Rigidbody>();

                    var final_object_pos = objectBeingDragged.transform.position;

                    float roll_vigor = Mathf.Clamp(cumulative_distance / 2, 1f, 5f);

                    var calculated_torque = roll_vigor * Vector3.Cross(intermediate_object_pos, final_object_pos) * 1000;
                    rigidbody.AddTorque(calculated_torque, ForceMode.Impulse);


                    var calculated_force = (final_object_pos - intermediate_object_pos).normalized *
                                           rigidbody.mass *
                                           roll_vigor *
                                           100;
                    calculated_force.y  = 50f;
                    calculated_force.z *= 2f;
                    calculated_force.x *= 2f;

                    rigidbody.AddForce(calculated_force, ForceMode.Force);
                }

                // If objectBeingDragged is a hex tile, snap to grid.
                if (objectBeingDragged.GetComponent <HexTile>())
                {
                    RaycastHit hit;
                    var        layerMask = 1 << 9;              //check if we hit a hex cell
                    if (Physics.Raycast(objectBeingDragged.position, -Vector3.up, out hit, Mathf.Infinity, layerMask))
                    {
                        Vector3 new_pos = new Vector3(hit.transform.position.x, 0f, hit.transform.position.z);
                        objectBeingDragged.position = new_pos;
                        objectBeingDragged.rotation = Quaternion.Euler(-90, 0, 0);
                    }
                }
                else if (objectBeingDragged.GetComponent <NumberToken>())
                {
                    RaycastHit hit;
                    var        layerMask = 1 << 9;              //check if we hit a hex cell
                    if (Physics.Raycast(objectBeingDragged.position, -Vector3.up, out hit, Mathf.Infinity, layerMask))
                    {
                        Vector3 new_pos = new Vector3(hit.transform.position.x, 0f, hit.transform.position.z);
                        objectBeingDragged.position = new_pos;
                        objectBeingDragged.rotation = Quaternion.Euler(-90, 0, 0);
                    }
                }
            }

            objectBeingDragged = null;
        }

        // Handles drag part of drag and drop.
        if (Input.GetButton("Fire1"))
        {
            if (objectBeingDragged != null)
            {
                // track the path distance we have dragged this object.
                var object_pos = objectBeingDragged.transform.position;
                cumulative_distance    += Vector3.Distance(intermediate_object_pos, object_pos);
                intermediate_object_pos = object_pos;

                var        ray2 = Camera.main.ScreenPointToRay(Input.mousePosition);
                RaycastHit hit;
                var        layerMask = 1 << 8;
                layerMask = ~layerMask;                 // invert to exclude layer 8
                if (Physics.Raycast(ray2.origin, ray2.direction, out hit, Mathf.Infinity, layerMask))
                {
                    objectBeingDragged.position = hit.point;

                    if (objectBeingDragged.GetComponent <Die>())
                    {
                        objectBeingDragged.position += new Vector3(0, grabHeight, 0);
                    }
                    else
                    {
                        objectBeingDragged.position += new Vector3(0, grabHeight, 0);
                    }
                    //objectBeingDragged.rotation = objectBeingDraggedOriginalRotation;
                }
                else                  // resets rotation to prevent crazy rotation from gravity
                {
                    objectBeingDragged.position += new Vector3(0, 0, 0);
                    //objectBeingDragged.rotation = objectBeingDraggedOriginalRotation;
                }


                if (Input.GetKey("q"))
                {
                    objectBeingDragged.transform.Rotate(Vector3.forward * Time.deltaTime * 75);
                }
                else if (Input.GetKey("e"))
                {
                    objectBeingDragged.transform.Rotate(-Vector3.forward * Time.deltaTime * 75);
                }

                if (Input.GetKeyUp("f"))
                {
                    var rotation = objectBeingDragged.rotation;
                    objectBeingDragged.rotation = Quaternion.Euler(rotation.eulerAngles.x + 180, rotation.eulerAngles.y, rotation.eulerAngles.z);
                }


                CmdSetAuth(objectBeingDragged.GetComponent <NetworkIdentity>().netId, GetComponent <NetworkIdentity>());
            }
        }
    }