public void InitNewSlider(BasicStuff stuff) { if (slider == null) { Debug.Log("Slider GameObject lost"); } // 是否创建新的 Slider createNewSlider(stuff); // 创建新的 slider 对象 int ID = stuff.ID; if (ID == _playerStuff.ID) { _timer.setSliderTime(ID, stuff.requireTime); _triggedEvent[ID] = _playerStuff.requireTime; } else { // 允许中间切入主动事件发生, 并且及时更新消耗最大事件 if (_triggedEvent.ContainsKey(ID)) { _triggedEvent[ID] = stuff.getWaitTime(); } _timer.setSliderTime(ID, stuff.getWaitTime()); } }
private List <int> _postiveEventList = new List <int>(); // 主动触发事件列表 #endregion private void Start() { for (int i = 0; i < stuffList.Count; i++) { BasicStuff stuff = stuffList[i]; stuff.init(this, player); if (stuff.isOrder) { stuff.gameObject.SetActive(false); _postiveEventList.Add(stuff.ID); } _triggedEvent.Add(stuff.ID, stuff.getWaitTime()); } for (int i = 0; i < toolStuffList.Count; i++) { BasicStuff stuff = toolStuffList[i]; stuff.init(this, player); _triggedEvent.Add(stuff.ID, stuff.requireTime); } _timer = TimeLine.getInstance(); // 初始化时间点 _timePointCount = 0; // 起始等待 3 s _timer.setElapseTime(3.0f); _playerStuff = player.getStuffComp(); _triggedEvent.Add(_playerStuff.ID, _playerStuff.requireTime); }
public void getEventCollision() { Vector2 targetPos = getTargetPosition(); RaycastHit2D hit = Physics2D.Linecast(_player.transform.position, targetPos, 1 << LayerMask.NameToLayer("EventStuff")); if (hit) { if (Input.GetKeyDown(KeyCode.Space)) { GameObject target = hit.collider.gameObject; //Debug.Log(target.name); BasicStuff stuff = target.GetComponent <BasicStuff>(); if (stuff == null) { Debug.LogWarning("This stuff lost its component: " + target.name); return; } if (stuff.GetEventState() == EventState.Stop && (stuff.ID < 100 || stuff.isTool)) { stuff.dealWithEvent(_playerStuff); } else if (stuff.GetEventState() == EventState.Waiting) { stuff.waitBroken(_playerStuff); } else { _tips.setTips("什么事也没有发生"); } } } }
private void hidenTriggerStuff(int ID) { BasicStuff stuff = stuffList.Find(x => x.ID == ID); if (stuff.isOrder) { stuff.gameObject.SetActive(false); } }
// 手动控制事件触发 private void CustomEvnetTrigger() { // 每隔 70 s 必定触发 int index = (int)_timer.getCurTime() / 50; if (index > _timePointCount) { Debug.Log("固定电话触发事件触发"); _timePointCount++; BasicStuff tel = stuffList.Find(x => x.isTel); stuffStartWaiting(tel); } }
private void stuffStartWaiting(BasicStuff stuff) { int ID = stuff.ID; float waitTime = stuff.getWaitTime(); InitNewSlider(stuff); // 记录需要最大时间值 if (!_triggedEvent.ContainsKey(ID)) { _triggedEvent.Add(ID, waitTime); } // 开始等待 stuff.waitStart(); }
private void choiceStuff() { if (_postiveEventList.Count <= 0) { Debug.Log("All stuffEvent has been trigged."); return; } int ID = getRandomEventID(); // 移除对象物体列表 dispatchTheEventStuff(ID); BasicStuff stuff = stuffList.Find(x => x.ID == ID); stuffStartWaiting(stuff); }
private void createNewSlider(BasicStuff stuff) { int ID = stuff.ID; Vector3 parentPos = stuff.transform.position; if (_sliderDic.ContainsKey(ID)) { // 重新激活 _sliderDic[ID].gameObject.SetActive(true); _sliderDic[ID].transform.position = new Vector3(parentPos.x + 0.3f, parentPos.y + 2.0f, parentPos.z); } else { GameObject newSlider = Instantiate(slider); newSlider.transform.position = new Vector3(parentPos.x + 0.3f, parentPos.y + 2.0f, parentPos.z); _sliderDic.Add(stuff.ID, newSlider.GetComponent <Slider>()); } }
// 设置每个 slider 对应的百分比 public void reSetSliderValue() { // 获取 _timeSliderDic Dictionary <int, float> sliderTimeDic = _timer.getSlidetDic(); List <int> sliderIDList = _timer.getSliderIDList(); if (_sliderDic.Count <= 0) { return; } for (int i = 0; i < sliderIDList.Count; i++) { int id = sliderIDList[i]; Slider slider = _sliderDic[id]; if (sliderTimeDic[id] > 0) { slider.value = sliderTimeDic[id] / _triggedEvent[id]; } else if (!_postiveEventList.Contains(id)) { BasicStuff stuff = stuffList.Find(x => x.ID == id); if (id != _playerStuff.ID) { stuff.waitFinished(); // 添加回会触发事件 if (id > 100 && !stuff.isTool) { fullBackTheEventStuff(id); } } // 将非主动事件的清理权限交给 waitingFinished if ((id > 100 && !stuff.isTool) || id == _playerStuff.ID) { eventClear(id); } } } }