Exemplo n.º 1
0
        public void AddAnimation(Drawable sprite_anim)
        {
            SceneUnit temp = new SceneUnit();

            temp.m_sprite = sprite_anim;
            m_animList.Add(temp);
        }
Exemplo n.º 2
0
    public void SceneUnit2ARUnit(SceneUnit unit)    //直接放置某个对象
    {
        Vector3 transScreenPos = Camera.main.WorldToScreenPoint(unit.thisT.position);
        Vector2 screenPos      = new Vector2(transScreenPos.x, transScreenPos.y);

        ScreenPoint2ARUnit(unit, screenPos);
    }
Exemplo n.º 3
0
 public void AddAnimation(Drawable sprite_anim, SoundEffect sound)
 {
     SceneUnit temp = new SceneUnit();
     temp.m_sprite = sprite_anim;
     temp.m_sound = sound;
     m_animList.Add(temp);
 }
Exemplo n.º 4
0
        public void Update()
        {
            if (m_scene_state != DrawableState.Finished)
            {
                if (m_currUnit.m_sprite.Draw_State == DrawableState.Finished)
                {
                    m_played_sound = false;
                    if (m_animQ.Count == 0)          // Ran out of animations to perform, reset stuff
                    {
                        m_currUnit.m_sprite.Reset(); // So it wont stay finished for the next time around
                        m_scene_state = DrawableState.Finished;
                        return;
                    }
                    else // On to the next animation
                    {
                        float x, y;
                        x = m_currUnit.m_sprite.X_Pos;
                        y = m_currUnit.m_sprite.Y_Pos;
                        m_currUnit.m_sprite.Reset(); // So it wont stay finished for the next time around
                        m_currUnit = m_animQ.Dequeue();
                        m_currUnit.m_sprite.X_Pos = x;
                        m_currUnit.m_sprite.Y_Pos = y;
                    }
                }

                if (!m_played_sound && m_currUnit.m_sound != null)
                {
                    m_currUnit.m_sound.Play();
                    m_played_sound = true;
                }

                // Update current Animation
                m_currUnit.m_sprite.Update();
            }
        }
    public void Move(SceneUnit sceneUnit, bool isUp)
    {
        int beforeNo = _sceneUnitList.IndexOf(sceneUnit);
        int afterNo  = beforeNo + (isUp ? -1 : 1);

        _sceneUnitList[beforeNo] = _sceneUnitList[afterNo];
        _sceneUnitList[afterNo]  = sceneUnit;
    }
Exemplo n.º 6
0
        public void AddAnimation(Drawable sprite_anim, SoundEffect sound)
        {
            SceneUnit temp = new SceneUnit();

            temp.m_sprite = sprite_anim;
            temp.m_sound  = sound;
            m_animList.Add(temp);
        }
Exemplo n.º 7
0
    public void ScreenPoint2ARUnit(SceneUnit unit, Vector2 screenPos)    //对于屏幕上一点,放置某个物体
    {
        StartCoroutine(_WaitForDepthAndFindPlane(unit, screenPos));

        // 由于可能会等待一段时间, 播放一个小动画以提醒用户.
        UIManager.Instance.Open(UIID.TouchEffect);
        Vector2 normalizedPosition = screenPos;

        normalizedPosition.x /= Screen.width;
        normalizedPosition.y /= Screen.height;
        UIManager.Instance.SetRectAnchor(UIID.TouchEffect, normalizedPosition);
    }
Exemplo n.º 8
0
    public void RemoveSceneCat(int id, bool immediatly = true)
    {
        //
        if (!_SceneUnitList.ContainsKey(id))
        {
            return;
        }

        SceneUnit unit = _SceneUnitList[id];

        unit.OnUnInit(immediatly);

        _SceneUnitList.Remove(id);
    }
Exemplo n.º 9
0
    public void CleanAll()
    {
        List <int> ids = new List <int>(_SceneUnitList.Keys);

        for (int i = ids.Count - 1; i >= 0; i--)
        {
            //foreach (int id in _SceneUnitList.Keys) {
            SceneUnit unit = _SceneUnitList[ids[i]];

            unit.OnUnInit(false);

            _SceneUnitList.Remove(ids[i]);
        }
    }
Exemplo n.º 10
0
    public void RemoveSceneUnit(SceneUnit unit, bool immediatly = true)
    {
        if (unit == null)
        {
            return;
        }

        if (unit.IsCat())
        {
            RemoveSceneCat(unit.id, immediatly);
            return;
        }
        if (!unit.IsCat())
        {
            RemoveSceneItem(unit.id, immediatly);
            return;
        }
    }
Exemplo n.º 11
0
        public void ResetScene()
        {
            for (int i = 0; i < m_animations.Length; i++)
            {
                if (m_effect == SpriteEffects.None)
                {
                    m_animList[m_animations[i]].m_sprite.Effects = SpriteEffects.None;
                }
                else
                {
                    m_animList[m_animations[i]].m_sprite.Effects = SpriteEffects.FlipHorizontally;
                }

                m_animQ.Enqueue(m_animList[m_animations[i]]);
            }

            m_currUnit = m_animQ.Dequeue(); // Grab the first animation
        }
Exemplo n.º 12
0
    public SceneUnit AddUnitComponentByType(GameObject go, UnitClassType type)
    {
        SceneUnit unit = null;

        switch (type)
        {
//		case UnitClassType.SceneCat:
//			unit = go.AddComponent<SceneCat> ();
//			break;
//		case UnitClassType.SceneCatLitter:
//			unit = go.AddComponent<SceneCatLittle> ();
//			break;
        default:
            unit = go.AddComponent <SceneUnit>();
            break;
        }

        unit.m_Type = type;
        return(unit);
    }
Exemplo n.º 13
0
        public void BuildScene(int[] animations)
        {
            m_animations = new int[animations.Length];
            m_animQ.Clear();

            for (int i = 0; i < animations.Length; i++)
            {
                m_animations[i] = animations[i];

                /*
                 * if(m_effect == SpriteEffects.None) {
                 *  temp.Effects = SpriteEffects.None;
                 * } else {
                 *  temp.Effects = SpriteEffects.FlipHorizontally;
                 * }
                 * */
                m_animQ.Enqueue(m_animList[animations[i]]);
            }

            m_currUnit = m_animQ.Dequeue(); // Grab the first animation
        }
Exemplo n.º 14
0
        public void Update()
        {
            if (m_scene_state != DrawableState.Finished)
            {
                if (m_currUnit.m_sprite.Draw_State == DrawableState.Finished)
                {
                    m_played_sound = false;
                    if (m_animQ.Count == 0) // Ran out of animations to perform, reset stuff
                    {
                        m_currUnit.m_sprite.Reset(); // So it wont stay finished for the next time around
                        m_scene_state = DrawableState.Finished;
                        return;
                    }
                    else // On to the next animation
                    {
                        float x, y;
                        x = m_currUnit.m_sprite.X_Pos;
                        y = m_currUnit.m_sprite.Y_Pos;
                        m_currUnit.m_sprite.Reset(); // So it wont stay finished for the next time around
                        m_currUnit = m_animQ.Dequeue();
                        m_currUnit.m_sprite.X_Pos = x;
                        m_currUnit.m_sprite.Y_Pos = y;
                    }
                }

                if (!m_played_sound && m_currUnit.m_sound != null)
                {
                    m_currUnit.m_sound.Play();
                    m_played_sound = true;
                }

                // Update current Animation
                m_currUnit.m_sprite.Update();
            }
        }
Exemplo n.º 15
0
 public virtual void OnMsg(SceneUnit pSender, MsgType eMsgType, System.Collections.Hashtable arParam)
 {
 }
Exemplo n.º 16
0
    private IEnumerator _WaitForDepthAndFindPlane(SceneUnit unit, Vector2 touchPosition)
    {
        m_findPlaneWaitingForDepth = true;

        // T打开深度摄像头等待下一次深度更新.
        m_tangoApplication.SetDepthCameraRate(TangoEnums.TangoDepthCameraRate.MAXIMUM);
        while (m_findPlaneWaitingForDepth)
        {
            yield return(null);
        }

        m_tangoApplication.SetDepthCameraRate(TangoEnums.TangoDepthCameraRate.DISABLED);


        // 下面是具体放置标记的代码, 我们游戏放置猫盆等主要参考这里.

        // 找到触摸点所在平面.
        Camera  cam = Camera.main;
        Vector3 planeCenter;
        Plane   plane;

        if (!m_pointCloud.FindPlane(cam, touchPosition, out planeCenter, out plane))
        {
            yield break;
        }

        // Ensure the location is always facing the camera.  This is like a LookRotation, but for the Y axis.
        Vector3 up = plane.normal;
        Vector3 forward;

        if (Vector3.Angle(plane.normal, cam.transform.forward) < 175)
        {
            Vector3 right = Vector3.Cross(up, cam.transform.forward).normalized;
            forward = Vector3.Cross(right, up).normalized;
        }
        else
        {
            // Normal is nearly parallel to camera look direction, the cross product would have too much
            // floating point error in it.
            forward = Vector3.Cross(up, cam.transform.right);
        }

        // 实例化 marker 对象.
//		newMarkObject = Instantiate(m_markPrefabs[m_currentMarkType],
//			planeCenter,
//			Quaternion.LookRotation(forward, up)) as GameObject;
        unit.thisT.position = planeCenter;
        unit.thisT.rotation = Quaternion.LookRotation(forward, up);
        unit.thisT.gameObject.SetActive(true);
        unit.m_timestamp = (float)m_poseController.m_poseTimestamp;

        Matrix4x4 uwTDevice = Matrix4x4.TRS(m_poseController.m_tangoPosition,
                                            m_poseController.m_tangoRotation,
                                            Vector3.one);
        Matrix4x4 uwTUnit = Matrix4x4.TRS(unit.thisT.position,
                                          unit.thisT.rotation,
                                          Vector3.one);

        unit.m_deviceT = Matrix4x4.Inverse(uwTDevice) * uwTUnit;        //用controller探测到位置和朝向后
        //,反转为原始矩阵,再用矩阵乘,则相当于把unity内的位置朝向投射到现实空间去了,之后利用闭环修正这个位置
    }
Exemplo n.º 17
0
        public void ResetScene()
        {
            for (int i = 0; i < m_animations.Length; i++)
            {
                if (m_effect == SpriteEffects.None)
                {
                    m_animList[m_animations[i]].m_sprite.Effects = SpriteEffects.None;
                }
                else
                {
                    m_animList[m_animations[i]].m_sprite.Effects = SpriteEffects.FlipHorizontally;
                }

                m_animQ.Enqueue(m_animList[m_animations[i]]);
            }

            m_currUnit = m_animQ.Dequeue(); // Grab the first animation
        }
Exemplo n.º 18
0
 /*
  * 说明: 消息传递给状态机处理
  * 参数:pSender       发送者
  *          eMsgType    消息ID
  *          arParam       参数列表
  */
 public virtual void OnMsg(SceneUnit pSender, MsgType eMsgType, Hashtable arParam = null)
 {
 }
Exemplo n.º 19
0
 /// <summary>
 /// SceneUnitを消去
 /// </summary>
 public void Remove(SceneUnit sceneUnit)
 {
     _sceneUnitList.Remove(sceneUnit);
     SaveSceneUnitList();
 }
Exemplo n.º 20
0
        public void BuildScene(int[] animations)
        {
            m_animations = new int[animations.Length];
            m_animQ.Clear();

            for (int i = 0; i < animations.Length; i++)
            {
                m_animations[i] = animations[i];
                /*
                if(m_effect == SpriteEffects.None) {
                    temp.Effects = SpriteEffects.None;
                } else {
                    temp.Effects = SpriteEffects.FlipHorizontally;
                }
                 * */
                m_animQ.Enqueue(m_animList[animations[i]]);
            }

            m_currUnit = m_animQ.Dequeue(); // Grab the first animation
        }
Exemplo n.º 21
0
 public void AddAnimation(Drawable sprite_anim)
 {
     SceneUnit temp = new SceneUnit();
     temp.m_sprite = sprite_anim;
     m_animList.Add(temp);
 }