/// <summary> /// 道具被使用完后,释放该点的使用权。 /// </summary> /// <param name="prop">完成使命的道具</param> private void PropOnTouchFinishedEvent(PropBase prop) { if (propPointDict.ContainsKey(prop)) { propPointDict.Remove(prop); prop.OnTouchFinishedEvent -= PropOnTouchFinishedEvent; } }
// 外部回调函数 private void OnStabIn() //之所以不使用 dropImmediate 是因为 drop 之后 muscle被置为 disable 将无法触发之后的 Couroutine { holdingProp = currentProp; // 武器嵌入场景中 //actorParts.puppet.RemoveMuscleRecursive(lastProp.muscle, true, false, MuscleRemoveMode.Sever); lastProp.Drop(); currentProp = null; DisableDetector(); }
private void GetPropCom(Transform transform) { PropBase com = transform.GetComponent <PropBase>(); if (com == null) { return; } m_allPropsInScene.Add(com.PropId, com); }
// actorMng 转发函数 /// <summary> /// 在技能释途中 根据 动作的准确来修改显示效果以及 其伤害参数等 /// </summary> public void OnSkill(Vector3 skillTarPos, float bias, PropBase prop) { if (state) { state.OnSkill(bias); } if (effectMng) { effectMng.OnSkill(skillTarPos, bias, prop); } }
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; } }
/// <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; }
/// <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)); }
/// <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; }
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]); } }
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); } }
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; }
// 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; }
public void AddProp(PropBase prop) { PropList.Add(prop); PropList.Sort((prop1, prop2) => prop1.CalcPropPriority - prop2.CalcPropPriority); prop.CalcHeroProp(this); }
public void AddAdvPropRelation(PropBase prop) { prop.AddParentProp(this.mAdvProp); }
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); } } } }