Exemplo n.º 1
0
    private void DetectGrabUnit()
    {
        if (GrabUnit != null)
        {
            ActionUnit grab = GrabUnit.GetComponent <ActionUnit>();
            GameTile   tile = board.GetTile(InputUtils.GetTouchRayMouse());
            if (_isGrab)
            {
                if (tile != null)
                {
                    // GrabUnit.transform.localPosition = new Vector3(tile.transform.localPosition.x,
                    // 1,
                    // tile.transform.localPosition.z);

                    if (Physics.Raycast(InputUtils.GetTouchRayMouse(), out RaycastHit hit))
                    {
                        GrabUnit.transform.localPosition = new Vector3(hit.point.x,
                                                                       1,
                                                                       hit.point.z);
                    }
                }
            }
            if (InputUtils.Mouse1Free())
            {
                if (_isGrab)
                {
                    if (tile == null)
                    {
                        tile = board.GetTileByCordinate(GrabUnit.transform.localPosition);
                    }
                    bool newPos = true;
                    _isGrab = false;
                    grab.EnterGrabMode(false);
                    GrabUnit.transform.localPosition = new Vector3(tile.transform.localPosition.x,
                                                                   1,
                                                                   tile.transform.localPosition.z);
                    GrabUnit.transform.localPosition += Vector3.down;
                    if (tile.ActionUnit != null)
                    {
                        if (tile.ActionUnit.UnitID != grab.UnitID)
                        {
                            newPos = false;
                            MainMenuControl.Instance.ShowUserMessage(UserMessageManager.MES_OTHER_UNIT, 1f);
                        }
                        else
                        {
                            //no change
                        }
                    }
                    else
                    {
                        // if (!tile.PrepareTile)
                        // {
                        //     int unitOnBoard = ActionUnitManger.Instance.GetAll().Where(x => x.enabled && x.Group == 0 && !x.TilePos.PrepareTile && x.UnitID != grab.UnitID).Count();
                        //     if (unitOnBoard + 1 > Profile.GameModeCtrl.GetMaxSpawn())
                        //     {
                        //         newPos = false;
                        //         MainMenuControl.Instance.ShowUserMessage(UserMessageManager.MES_LIMIT_UNIT, 1f);
                        //     }
                        // }
                    }
                    if (newPos)
                    {
                        //change reference
                        grab.TilePos.ActionUnit = null;
                        grab.TilePos            = tile;
                        tile.ActionUnit         = grab;
                        if (!grab.TilePos.PrepareTile)
                        {
                            UnitLevelManager.Instance.ValidLevelUpUnit(grab);
                        }
                        Debug.Log("Formation new pos");
                        FormationManager.Instance.ApplyFormation();
                    }
                    else
                    {
                        //exists unit so return grab to origin position
                        GrabUnit.transform.localPosition = new Vector3(grab.TilePos.transform.localPosition.x,
                                                                       GrabUnit.transform.localPosition.y,
                                                                       grab.TilePos.transform.localPosition.z);
                    }
                }
                GrabUnit       = null;
                _accumGrabTime = 0;
            }
            else if (!_isGrab)
            {
                _accumGrabTime += Time.deltaTime;
                if (_accumGrabTime > 0.3f)
                {
                    grab.EnterGrabMode(true);
                    GrabUnit.transform.localPosition += Vector3.up;
                    _isGrab = true;
                }
            }
        }
    }