/// <summary> /// 添加门控制脚本 /// </summary> private static DepDoors AddWallDoors(DepDoors depDoors, Transform DoorContainer) { foreach (Transform child in DoorContainer) { DoorAccessItem item = GetDoorAccessItem(child); if (item != null) { depDoors.DoorList.Add(item); } } return(depDoors); }
/// <summary> /// 清除门的信息 /// </summary> private void ClearLastDoor() { if (DoorItem == null) { return; } ObjectModel_DoorAccess access = model.GetComponent <ObjectModel_DoorAccess>(); access.IsAccessInDoor = false; access.DoorItem = null; DoorItem.ConstantOff(); DoorItem = null; }
/// <summary> /// 添加门控制脚本 /// </summary> private static DepDoors AddChildDoorManage(Transform DoorContainer) { DepDoors depDoors = DoorContainer.gameObject.AddMissingComponent <DepDoors>(); DepNode node = DoorContainer.GetComponentInParent <DepNode>(); node.InitDoor(depDoors); foreach (Transform child in DoorContainer) { DoorAccessItem item = GetDoorAccessItem(child); if (item != null) { depDoors.DoorList.Add(item); } } return(depDoors); }
private void GiveRayF() { if (model != null) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; //Vector3 screenSpace; if (Physics.Raycast(ray, out hit, float.MaxValue, mask.value)) { float normalY = hit.point.y + model.transform.gameObject.GetSize().y / 2; model.transform.position = new Vector3(hit.point.x, normalY, hit.point.z);; } else { if (model.activeInHierarchy) { model.SetActive(false); Debug.Log("Ray can't find floor..."); } } if (Physics.Raycast(ray, out hit, float.MaxValue)) { DoorAccessItem item = hit.transform.GetComponent <DoorAccessItem>(); if (item == null && hit.transform.childCount > 0) { item = hit.transform.GetChild(0).GetComponent <DoorAccessItem>(); } if (item) { ClearLastDoor(); DoorItem = item; ObjectModel_DoorAccess access = model.GetComponent <ObjectModel_DoorAccess>(); access.IsAccessInDoor = true; access.DoorItem = item; item.ConstantOn(Color.green); } else { ClearLastDoor(); } } else { ClearLastDoor(); } } }
/// <summary> /// 更换当前区域下,门的开关状态 /// </summary> /// <param name="state"></param> private void PushDoorStateInfo(DoorAccessState state) { DoorAccessState door = DoorStateList.Find(i => i.DoorId == state.DoorId && i.Dev.Id == state.Dev.Id); if (door != null) { door.Abutment_CardState = state.Abutment_CardState; } else { DoorStateList.Add(state); } if (FactoryDepManager.currentDep == null) { return; } string parentId = state.Dev.ParentId.ToString(); if (IsDepDev(FactoryDepManager.currentDep, parentId)) { DevNode dev = RoomFactory.Instance.GetCreateDevById(state.Dev.DevID, int.Parse(parentId)); if (dev != null) { DoorAccessDevController doorAccess = dev as DoorAccessDevController; if (doorAccess) { DoorAccessItem doorItem = doorAccess.DoorItem; if (doorItem == null) { Log.Error("DoorAccessManage.PushDoorStateInfo.DoorAcessItem is null:" + doorAccess.Info == null? "devinfo id is null":doorAccess.Info.Id.ToString()); return; } doorItem.ChangeDoorState(state); if (!DepDoorList.Contains(doorItem)) { DepDoorList.Add(doorItem); } } } } }
private static DoorAccessItem GetDoorAccessItem(Transform child) { if (!child.name.ToLower().Contains("door")) { return(null); } DoorAccessItem item = null; if (child.childCount == 0) { item = child.gameObject.AddMissingComponent <DoorAccessItem>(); if (IsNormalDoor(false, child)) { GameObject leftDoor = child.gameObject; item.Init(true, leftDoor, null); } else { item.InitRollingDoor(); } } else if (child.childCount == 2) { item = child.gameObject.AddMissingComponent <DoorAccessItem>(); GameObject leftDoor = child.GetChild(0).gameObject; GameObject rightDoor = child.GetChild(1).gameObject; item.Init(false, leftDoor, rightDoor); } var colliders = child.FindComponentsInChildren <MeshCollider>(); foreach (MeshCollider collider in colliders) { //collider.enabled = false;//防止妨碍进入 //GameObject.Destroy(collider);//防止妨碍进入 collider.convex = true; collider.isTrigger = true; } return(item); }
/// <summary> /// 显示当前区域门的状态 /// </summary> /// <param name="currentDep"></param> private void ShowDepDoors(DepNode currentDep) { List <DoorAccessState> doorStates = DoorStateList.FindAll(dev => dev.Dev.ParentId == currentDep.NodeID); if (doorStates != null && doorStates.Count != 0) { foreach (var door in doorStates) { DevNode dev = RoomFactory.Instance.GetCreateDevById(door.Dev.DevID, (int)door.Dev.ParentId); DoorAccessDevController devController = dev as DoorAccessDevController; if (devController != null) { DoorAccessItem doorItem = devController.DoorItem; doorItem.ChangeDoorState(door); if (!DepDoorList.Contains(doorItem)) { DepDoorList.Add(doorItem); } } } } }
public void InitDoorItem(DoorAccessItem door) { DoorItem = door; }
/// <summary> /// 根据区域下门的ID,获取门 /// </summary> /// <param name="doorId"></param> /// <returns></returns> public DoorAccessItem GetDoorItem(string doorId) { DoorAccessItem door = DoorList.Find(i => i.DoorID == doorId); return(door); }