コード例 #1
0
ファイル: MoveState.cs プロジェクト: SBStudio/MagicCube
    private void OnCubeMove(CubeMoveEvent evt)
    {
        this.m_MoveEvent = evt;

        Vector3 right = AxisUtil.Axis2Direction(evt.cube.transform, evt.rightAxis);
        Vector3 up = AxisUtil.Axis2Direction(evt.cube.transform, evt.upAxis);
        Vector3 forward = AxisUtil.Axis2Direction(evt.cube.transform, evt.forwardAxis);

        m_EndRotation = Quaternion.LookRotation(forward, up);
        m_EndPosition = evt.cube.transform.position + m_EndRotation * Vector3.up * evt.cube.size * 0.5f;
    }
コード例 #2
0
ファイル: GlobalState.cs プロジェクト: SBStudio/MagicCube
    public override void OnGUI()
    {
        GUILayout.Space(50);

        if (GUILayout.Button("Go!", LogUtil.guiStyle))
        {
            if (controller.stateMachine.Get<IdleState>() != controller.stateMachine.state)
            {
                return;
            }

            controller.magicCube.enableCollision = true;

            CubeMoveEvent evt = null;
            RaycastHit raycastHit;
            if (Physics.Raycast(controller.player.cube.transform.position,
                                controller.player.transform.forward,
                                out raycastHit,
                                controller.magicCube.distance,
                                1 << LayerDefine.CUBE))
            {
                CubeItem cube = raycastHit.collider.GetComponent<CubeItem>();
                if (null != cube
                    && cube.layer == controller.magicCube.layer)
                {
                    evt = new CubeMoveEvent();
                    evt.cube = cube;
                    evt.rightAxis = AxisUtil.Direction2Axis(cube.transform, controller.player.transform.right);
                    evt.upAxis = AxisUtil.Direction2Axis(cube.transform, controller.player.transform.up);
                    evt.forwardAxis = AxisUtil.Direction2Axis(cube.transform, controller.player.transform.forward);
                }
            }

            if (null == evt)
            {
                CubeItem cube = controller.player.cube;
                evt = new CubeMoveEvent();
                evt.cube = cube;
                evt.rightAxis = AxisUtil.Direction2Axis(cube.transform, controller.player.transform.right);
                evt.upAxis = AxisUtil.Direction2Axis(cube.transform, controller.player.transform.forward);
                evt.forwardAxis = AxisUtil.Direction2Axis(cube.transform, -controller.player.transform.up);
            }

            controller.magicCube.enableCollision = false;

            if (null != evt)
            {
                if (!evt.cube.itemDict.ContainsKey(evt.upAxis))
                {
                    return;
                }

                if (ItemType.STOP == evt.cube.itemDict[evt.upAxis].id)
                {
                    controller.stateMachine.Enter<IdleState>();
                }
                else
                {
                    controller.stateMachine.Enter<MoveState>();
                    EventSystem<CubeMoveEvent>.Broadcast(evt);
                }
            }
        }
    }