Example #1
0
 /// <summary>
 /// 道具被使用完后,释放该点的使用权。
 /// </summary>
 /// <param name="prop">完成使命的道具</param>
 private void PropOnTouchFinishedEvent(PropBase prop)
 {
     if (propPointDict.ContainsKey(prop))
     {
         propPointDict.Remove(prop);
         prop.OnTouchFinishedEvent -= PropOnTouchFinishedEvent;
     }
 }
Example #2
0
 // 外部回调函数
 private void OnStabIn()        //之所以不使用 dropImmediate 是因为 drop 之后 muscle被置为 disable 将无法触发之后的 Couroutine
 {
     holdingProp = currentProp; // 武器嵌入场景中
     //actorParts.puppet.RemoveMuscleRecursive(lastProp.muscle, true, false, MuscleRemoveMode.Sever);
     lastProp.Drop();
     currentProp = null;
     DisableDetector();
 }
Example #3
0
    private void GetPropCom(Transform transform)
    {
        PropBase com = transform.GetComponent <PropBase>();

        if (com == null)
        {
            return;
        }

        m_allPropsInScene.Add(com.PropId, com);
    }
Example #4
0
 // actorMng 转发函数
 /// <summary>
 /// 在技能释途中 根据 动作的准确来修改显示效果以及 其伤害参数等
 /// </summary>
 public void OnSkill(Vector3 skillTarPos, float bias, PropBase prop)
 {
     if (state)
     {
         state.OnSkill(bias);
     }
     if (effectMng)
     {
         effectMng.OnSkill(skillTarPos, bias, prop);
     }
 }
Example #5
0
 void Intract()
 {
     //We set up the input "OculusTouchpad" in the Input manager
     if (Input.GetButtonDown("Jump") || OVRInput.GetDown(OVRInput.Button.PrimaryTouchpad))
     {
         selectVisual.ClearObject();
         //Check if you are holding something you can throw first
         if (inHand != null)
         {
             inHand.Release(controllerRef.forward, throwForce);
             inHand = null;
             //We do this check here to prevent Errors if you have nothing selected
         }
         else if (selectedObject != null)
         {
             //Check if you can pick up the selected object second
             if (selectedObject.GetComponent <PickUp> ())
             {
                 //Beacuse PickUp is a child of PropBase, we can ask InHand to store selectedObject as PickUp, rather than use GetComponent
                 inHand = selectedObject as PickUp;
                 inHand.Store(holdingRef);
                 //If non of the above were valid then simple call the trigger function of the selected object
             }
             else
             {
                 selectedObject.Trigger();
             }
         }
         //If you have a object that you need to hold down a button to intract with
     }
     else if (Input.GetButton("Jump") && selectedObject != null || OVRInput.Get(OVRInput.Button.PrimaryTouchpad) && selectedObject != null)
     {
         selectedObject.Pulse();
         //When you are not pressing down the touchpad button, the selected object can be updated
     }
     else if (pointerOver != null)
     {
         if (pointerOver.GetComponent <PropBase> ())
         {
             selectedObject = pointerOver.GetComponent <PropBase> ();
         }
         else
         {
             selectedObject = null;
         }
     }
     else
     {
         selectedObject = null;
     }
 }
Example #6
0
 /// <summary>
 /// 掉落道具的协程
 /// </summary>
 private IEnumerator FallProp(ParachuteManager parachute, PropBase prop, Point endPoint)
 {
     parachute.transform.rotation = endPoint.rotation;
     parachute.endPos             = endPoint.position + connectOffset;
     parachute.startPos           = parachute.endPos + new Vector3(0, fallDistance, 0);
     parachute.Play();
     prop.transform.rotation = endPoint.rotation;
     while (parachute.isActiveAndEnabled)
     {
         prop.transform.position = parachute.transform.position - connectOffset;
         yield return(null);
     }
     prop.transform.position = endPoint.position;
 }
Example #7
0
    /// <summary>
    /// 产生道具
    /// </summary>
    private void SpawnProp()
    {
        Point currentPoint = GetEmptyPoint();

        if (currentPoint == null)
        {
            return;
        }
        Timer.Start();  // 确定有位置后重新计时
        PropBase currentProp = GetProp();

        propPointDict.Add(currentProp, currentPoint);                  // 道具添加到已使用字典里
        currentProp.OnTouchFinishedEvent += PropOnTouchFinishedEvent;  // 添加道具被使用的监听事件
        StartCoroutine(FallProp(parachutePool.GetNextObject().GetComponent <ParachuteManager>(), currentProp, currentPoint));
    }
Example #8
0
 /// <summary>
 /// Dropping/Picking up normally works in the fixed update cycle where joints can be properly connected. Use this to drop a prop immediatelly.
 /// </summary>
 public void DropImmediate()
 {
     if (lastProp == null)
     {
         return;
     }
     //actorParts.puppet.RemoveMuscleRecursive(lastProp.muscle, true, false, MuscleRemoveMode.Sever);
     if (lastProp.propHandler)// 没有drop过
     {
         lastProp.Drop();
     }
     actorParts.puppet.RemoveMuscle(muscles[0]);
     currentProp = null;
     lastProp    = null;
 }
Example #9
0
    private void AttachProp(PropBase prop)
    {
        // 确保 肌肉 的位置和 target的位置一致
        muscles[0].target.localPosition    = defaultLocalPos;
        muscles[0].target.localEulerAngles = defaultLocalEular;
        muscles[0].transform.position      = muscles[0].target.position;
        muscles[0].transform.rotation      = muscles[0].target.rotation;

        prop.PickUp(this);
        actorParts.puppet.AddMuscle(muscles[0]);
        if (prop.additionalPinTarget != null)
        {
            actorParts.puppet.AddMuscle(muscles[1]);
        }
    }
Example #10
0
 public void OnStateChange(Global.BodyAction newBodyAction)
 {
     if (newBodyAction != Global.BodyAction.SKILL)
     {
         if (isSkilling)
         {
             isSkilling = false;
             Invoke("TrailFade", 2.0f);
             StartCoroutine("slerpEmission");
         }
     }
     else
     {
         isSkilling = true;
         CancelInvoke("TrailFade");
         StopCoroutine("slerpEmission");
         prop = am.actorParts.propHandlers[0].currentProp;
         rSlashTarTrail.gameObject.SetActive(true);
     }
 }
Example #11
0
    void FixedUpdate()
    {
        fixedUpdateCalled = true;
        // if(holdingProp&&muscles[0].transform.gameObject.activeSelf)
        //     actorParts.puppet.RemoveMuscle(muscles[0]); // 当前为 holding状态 并且 muscle没有被 remove ,则进行 remove
        if (currentProp == lastProp)
        {
            return;
        }

        // Dropping current prop
        if (currentProp == null)
        {
            DropImmediate();
        }

        // Picking up to an empty slot
        else if (lastProp == null)
        {
            MeleeProp m = currentProp as MeleeProp;
            if (m != null) // 是近战武器
            {
                if (m.edgeCol)
                {
                    EnableDetector(m.edgeCol);           // 有刀刃
                }
            }
            AttachProp(currentProp);
        }

        // Switching props
        else if (lastProp != null && currentProp != null)
        {
            // actorParts.puppet.RemoveMuscleRecursive(lastProp.muscle, true, false, MuscleRemoveMode.Sever);
            // AttachProp(currentProp);
        }
        lastProp = currentProp;
    }
Example #12
0
 // Effects
 public void OnSkill(Vector3 skillTarPos, float bias, PropBase p)
 {
     prop = p;
     prop.EmissionIntensity            = Mathf.MoveTowards(prop.EmissionIntensity, bias * 2, 0.05f);
     rSlashTarTrail.transform.position = skillTarPos;
 }
Example #13
0
 public void AddProp(PropBase prop)
 {
     PropList.Add(prop);
     PropList.Sort((prop1, prop2) => prop1.CalcPropPriority - prop2.CalcPropPriority);
     prop.CalcHeroProp(this);
 }
Example #14
0
 public void AddAdvPropRelation(PropBase prop)
 {
     prop.AddParentProp(this.mAdvProp);
 }
Example #15
0
    void PlayScene()
    {
        if (m_curStage == Stage.Start)
        {
            float distance = m_carStartEndPos.x - m_car.transform.localPosition.x;

            if (distance > 0.1f)
            {
                if (timer > 4)
                {
                    m_car.transform.Translate(new Vector2(1, 0) * 10f * Time.deltaTime);
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_drive"], m_car.gameObject);
                }
                if (timer > 4.5)
                {
                    m_girl.Cross();
                }
            }
            else
            {
                m_girl.Die();
                if (!m_audioCarHitBody)
                {
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_hit_body"], m_car.gameObject);
                    m_audioCarHitBody = true;
                }

                // 上方文字提示
                if (s_firstGrilDie)
                {
                    UICommentory.Instance.SetTips("小美!!!天哪怎么会这样!");
                    s_firstGrilDie = false;
                }
            }
        }

        if (m_curStage == Stage.BadEnd)
        {
            float distance = m_carBadEndPos.x - m_car.transform.localPosition.x;

            if (distance > 0.1f)
            {
                if (timer > 4)
                {
                    m_car.transform.Translate(new Vector2(1, 0) * 10f * Time.deltaTime);
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_drive"], m_car.gameObject);
                }
            }
            else
            {
                m_hero.Die(); //男主死亡
                if (!m_audioCarHitBody)
                {
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_hit_body"], m_car.gameObject);
                    m_audioCarHitBody = true;
                }

                ResultView.Instance.gameObject.SetActive(true);
                ResultView.Instance.SetTips(ResultType.BAD);
            }
        }

        if (m_curStage == Stage.Stage1)
        {
            float carDistance = m_carStage1EndPos.x - m_car.transform.localPosition.x;
            if (carDistance > 0.1f)
            {
                if (timer > 4)
                {
                    m_car.transform.Translate(new Vector2(1, 0) * 10f * Time.deltaTime);
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_drive"], m_car.gameObject);
                }
            }
            else
            {
                AudioManager.Instance.StopSoundByGO(m_car.gameObject);
            }

            float steelDistance = m_steelStage1EndPos.y - m_steel.transform.localPosition.y;
            if (steelDistance < -0.1f)
            {
                if (timer > 8)
                {
                    m_steel.transform.Translate(new Vector2(0, -1) * 10f * Time.deltaTime);
                }
            }
            else
            {
                m_girl.Die();
                AudioManager.Instance.PlaySoundByGO(AudioData.DATA["metal_drop"], m_girl.gameObject);

                // 地上的扳手显示出来
                PropBase prop = PropMgr.Instance.GetProp(208);
                prop.gameObject.SetActive(!prop.IsOver);

                // 上面的扳手表现消失
                GameObject.Find("MainCanvas/Main/Panel1/Steel/wrentch").SetActive(false);
            }
        }

        if (m_curStage == Stage.Stage2)
        {
            float carDistance = m_carStage2EndPos.x - m_car.transform.localPosition.x;
            if (carDistance > 0.1f)
            {
                if (timer > 4)
                {
                    m_car.transform.Translate(new Vector2(1, 0) * 10f * Time.deltaTime);
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_drive"], m_car.gameObject);
                }
            }
            else
            {
                AudioManager.Instance.StopSoundByGO(m_car.gameObject);
            }

            float car2Distance = m_car2Stage2EndPos.x - m_car2.transform.localPosition.x;
            if (car2Distance < -0.1f)
            {
                if (timer > 6)
                {
                    m_car2.transform.Translate(new Vector2(-1, 0) * 10f * Time.deltaTime);
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_drive"], m_car2.gameObject);
                }
            }
            else
            {
                if (!m_audioCarHitCar)
                {
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_hit_car"], m_car2.gameObject);
                    m_audioCarHitCar = true;
                }
            }

            float steelDistance = m_steelStage1EndPos.y - m_steel.transform.localPosition.y;
            if (steelDistance < -0.1f)
            {
                if (timer > 8)
                {
                    m_steel.transform.Translate(new Vector2(0, -1) * 10f * Time.deltaTime);
                }
            }

            // 显示女主头上的离开按钮
            PropMgr.Instance.GetProp(209).gameObject.SetActive(true);
        }

        if (m_curStage == Stage.Stage3)
        {
            float carDistance = m_carGoodEndPos.x - m_car.transform.localPosition.x;
            if (carDistance > 0.1f)
            {
                if (timer > 4)
                {
                    m_car.transform.Translate(new Vector2(1, 0) * 10f * Time.deltaTime);
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_drive"], m_car.gameObject);
                }
                if (timer > 4.5)
                {
                    m_girl.Cross();
                }
            }
            else
            {
                AudioManager.Instance.StopSoundByGO(m_car.gameObject);
            }

            float car2Distance = m_car2Stage2EndPos.x - m_car2.transform.localPosition.x;
            if (car2Distance < -0.1f)
            {
                if (timer > 6)
                {
                    m_car2.transform.Translate(new Vector2(-1, 0) * 10f * Time.deltaTime);
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_drive"], m_car2.gameObject);
                }
            }
            else
            {
                if (!m_audioCarHitCar)
                {
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_hit_car"], m_car2.gameObject);
                    m_audioCarHitCar = true;
                }
            }

            float steelDistance = m_steelStage1EndPos.y - m_steel.transform.localPosition.y;
            if (steelDistance < -0.1f)
            {
                if (timer > 8)
                {
                    m_steel.transform.Translate(new Vector2(0, -1) * 10f * Time.deltaTime);

                    // 显示女主头上的离开按钮
                    PropMgr.Instance.GetProp(209).gameObject.SetActive(true);
                }
            }



            //todo 女主生还
        }

        if (m_curStage == Stage.Stage4)
        {
            float carDistance = m_carGoodEndPos.x - m_car.transform.localPosition.x;
            if (carDistance > 0.1f)
            {
                if (timer > 4)
                {
                    m_car.transform.Translate(new Vector2(1, 0) * 10f * Time.deltaTime);
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_drive"], m_car.gameObject);
                }
            }
            else
            {
                AudioManager.Instance.StopSoundByGO(m_car.gameObject);
            }

            float car2Distance = m_car2Stage2EndPos.x - m_car2.transform.localPosition.x;
            if (car2Distance < -0.1f)
            {
                if (timer > 6)
                {
                    m_car2.transform.Translate(new Vector2(-1, 0) * 10f * Time.deltaTime);
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_drive"], m_car2.gameObject);
                }
            }
            else
            {
                if (!m_audioCarHitCar)
                {
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_hit_car"], m_car2.gameObject);
                    m_audioCarHitCar = true;
                }
            }

            float steelDistance = m_steelStage1EndPos.y - m_steel.transform.localPosition.y;
            if (steelDistance < -0.1f)
            {
                if (timer > 8)
                {
                    m_steel.transform.Translate(new Vector2(0, -1) * 10f * Time.deltaTime);
                }
            }
            else
            {
                //todo 女主死亡
                m_girl.Die();
                AudioManager.Instance.PlaySoundByGO(AudioData.DATA["metal_drop"], m_girl.gameObject);
            }
        }

        if (m_curStage == Stage.BadEnd2)
        {
            float carDistance = m_carGoodEndPos.x - m_car.transform.localPosition.x;
            if (carDistance > 0.1f)
            {
                if (timer > 4)
                {
                    m_car.transform.Translate(new Vector2(1, 0) * 10f * Time.deltaTime);
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_drive"], m_car.gameObject);
                }
            }
            else
            {
                AudioManager.Instance.StopSoundByGO(m_car.gameObject);
            }

            float car2Distance = m_car2GoodEndPos.x - m_car2.transform.localPosition.x;
            if (car2Distance < -0.1f)
            {
                if (timer > 6)
                {
                    m_car2.transform.Translate(new Vector2(-1, 0) * 10f * Time.deltaTime);
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_drive"], m_car2.gameObject);
                }
            }
            else
            {
                if (!m_audioCarHitCar)
                {
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_hit_body"], m_car2.gameObject);
                    m_audioCarHitCar = true;
                    m_hero.Die(); //男主死亡

                    ResultView.Instance.gameObject.SetActive(true);
                    ResultView.Instance.SetTips(ResultType.BAD);
                }
            }

            float steelDistance = m_steelStage1EndPos.y - m_steel.transform.localPosition.y;
            if (steelDistance < -0.1f)
            {
                if (timer > 8)
                {
                    m_steel.transform.Translate(new Vector2(0, -1) * 10f * Time.deltaTime);
                }
            }
            else
            {
                //todo 女主死亡
                m_girl.Die();
                AudioManager.Instance.PlaySoundByGO(AudioData.DATA["metal_drop"], m_girl.gameObject);
            }
        }

        if (m_curStage == Stage.NormalEnd)
        {
            float carDistance = m_carGoodEndPos.x - m_car.transform.localPosition.x;
            if (carDistance > 0.1f)
            {
                if (timer > 4)
                {
                    m_car.transform.Translate(new Vector2(1, 0) * 10f * Time.deltaTime);
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_drive"], m_car.gameObject);
                }
                if (timer > 4.5)
                {
                    m_girl.Cross();
                }
            }
            else
            {
                AudioManager.Instance.StopSoundByGO(m_car.gameObject);
            }

            float car2Distance = m_car2Stage2EndPos.x - m_car2.transform.localPosition.x;
            if (car2Distance < -0.1f)
            {
                if (timer > 6)
                {
                    m_car2.transform.Translate(new Vector2(-1, 0) * 10f * Time.deltaTime);
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_drive"], m_car2.gameObject);
                }
            }
            else
            {
                if (!m_audioCarHitCar)
                {
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_hit_car"], m_car2.gameObject);
                    m_audioCarHitCar = true;
                }
            }


            float steelDistance = m_steelStage1EndPos.y - m_steel.transform.localPosition.y;
            if (steelDistance < -0.1f)
            {
                if (timer > 8)
                {
                    m_steel.transform.Translate(new Vector2(0, -1) * 10f * Time.deltaTime);
                }
            }
        }

        if (m_curStage == Stage.GoodEnd)
        {
            float carDistance = m_carGoodEndPos.x - m_car.transform.localPosition.x;
            if (carDistance > 0.1f)
            {
                if (timer > 4)
                {
                    m_car.transform.Translate(new Vector2(1, 0) * 10f * Time.deltaTime);
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_drive"], m_car.gameObject);
                }
                if (timer > 4.5)
                {
                    m_girl.Cross();
                }
            }
            else
            {
                AudioManager.Instance.StopSoundByGO(m_car.gameObject);
            }

            float car2Distance = m_car2GoodEndPos.x - m_car2.transform.localPosition.x;
            if (car2Distance < -0.1f)
            {
                if (timer > 6)
                {
                    m_car2.transform.Translate(new Vector2(-1, 0) * 10f * Time.deltaTime);
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_drive"], m_car2.gameObject);
                }
            }
            else
            {
                if (!m_audioCarHitCar)
                {
                    AudioManager.Instance.PlaySoundByGO(AudioData.DATA["car_hit_body"], m_car2.gameObject);
                    m_audioCarHitCar = true;
                    m_hero.Die(); //男主死亡


                    ResultView.Instance.gameObject.SetActive(true);
                    ResultView.Instance.SetTips(ResultType.GOOD);
                }
            }

            float steelDistance = m_steelStage1EndPos.y - m_steel.transform.localPosition.y;
            if (steelDistance < -0.1f)
            {
                if (timer > 8)
                {
                    m_steel.transform.Translate(new Vector2(0, -1) * 10f * Time.deltaTime);
                }
            }
        }
    }