Ejemplo n.º 1
0
    /// <summary>
    /// 开启闪烁
    /// </summary>
    /// <param name="flashColor"></param>
    /// <param name="frequency">Flashing frequency (times per second)</param>
    public void FlashingOn(Color flashColor, float frequency)
    {
        bool isbool = MonitorRangeManager.IsBelongtoCurrentDep(depNode);

        if (isbool)
        {
            SetRendererEnable(true);
        }
        Highlighter h          = gameObject.AddMissingComponent <Highlighter>();
        Color       colorStart = flashColor;
        Color       colorEnd   = new Color(colorStart.r, colorStart.g, colorStart.b, 0);

        h.FlashingOn(colorStart, colorEnd, frequency);
    }
    private void LoadBuildingOfPerson(HistoryManController controller)
    {
        LocationHistoryPath_M path_m = controller.GetComponent <LocationHistoryPath_M>();
        DepNode depnodeNow           = MonitorRangeManager.GetDepNodeBuild(path_m.depnode);

        if (depnodeNow != null)
        {
            BuildingBox box = depnodeNow.GetComponent <BuildingBox>();
            if (box)
            {
                box.LoadBuilding((nNode) => {
                    FactoryDepManager.Instance.SetAllColliderIgnoreRaycastOP(true);
                }, false);
            }
        }
    }
    /// <summary>
    /// 计算历史轨迹人员的所在区域
    /// </summary>
    public void ShowArea()
    {
        //List<Position> ps = MultHistoryPlayUI.Instance.GetPositionsByPersonnel(personnel);

        List <Position> ps = LocationHistoryUITool.GetPositionsByPersonnel(personnel);

        if (ps != null)
        {
            if (currentPointIndex < ps.Count && currentPointIndex > -1)
            {
                Position p          = ps[currentPointIndex];
                DepNode  depnodeT   = RoomFactory.Instance.GetDepNodeById((int)p.TopoNodeId);
                DepNode  depnodePri = MonitorRangeManager.GetDepNodeBuild(depnode);
                DepNode  depnodeNow = MonitorRangeManager.GetDepNodeBuild(depnodeT);

                if (depnodeNow != null && depnodePri != depnodeNow && LocationHistoryManager.Instance.CurrentFocusController == historyManController)
                {
                    BuildingBox box = depnodeNow.GetComponent <BuildingBox>();
                    if (box)
                    {
                        box.LoadBuilding((nNode) =>
                        {
                            FactoryDepManager.Instance.SetAllColliderIgnoreRaycastOP(true);
                        }, false);
                        //LocationManager.Instance.TransparentPark();
                        //return;
                    }
                }

                depnode = depnodeT;
                if (depnode)
                {
                    LocationHistoryUITool.SetItemArea(personnel, depnode.NodeName);
                }
            }
        }
    }
    public void CreateArea()
    {
        DepNode parentDep = FactoryDepManager.currentDep;//当前区域,要在当前区域下创建子区域(告警区域)

        if (parentDep == null)
        {
            Log.Error("RangeEditWindow.CreateArea", "depnodeT == null");
            return;
        }
        if (parentDep.TopoNode == null)
        {
            Log.Error("RangeEditWindow.CreateArea", "depnodeT.TopoNode == null");
            return;
        }

        if (parentDep.TopoNode.Type == AreaTypes.范围 ||
            parentDep.TopoNode.Type == AreaTypes.分组 ||
            parentDep.TopoNode.Type == AreaTypes.CAD ||
            parentDep.TopoNode.Type == AreaTypes.大楼 ||
            parentDep.TopoNode.Type == AreaTypes.机房
            )
        {
            UGUIMessageBox.Show("不能在该区域类型下创建子区域,类型:" + parentDep.TopoNode.Type + ",请切换到楼层或者厂区。");
            return;
        }

        Log.Info("RangeEditWindow.CreateArea", string.Format("type:{0},name:{1}", parentDep.TopoNode.Type, parentDep.TopoNode.Name));

        PhysicalTopology p = CreateDefaultArea();

        TransformM tm        = parentDep.TopoNode.Transfrom;
        Vector3    centerPos = Vector3.zero;

        if (tm != null)
        {
            Log.Info("RangeEditWindow.CreateArea", string.Format("SX:{0},SY:{1},SZ:{2}", tm.SX, tm.SY, tm.SZ));
            centerPos = new Vector3((float)(tm.SX / 2f), (float)(tm.SY / 2), (float)(tm.SZ / 2));//父物体的尺寸的一半也就是父物体的中心
        }

        //if(RoomFactory.Instance.FactoryType==FactoryTypeEnum.BaoXin)
        //{
        //    pos2D = new Vector3(LocationManager.Instance.axisZero.x,pos2D.y, LocationManager.Instance.axisZero.z);
        //}

        //Vector3 buildPos = Vector3.zero;
        //buildPos = -LocationManager.GetRealSizeVector(pos2D);

        p.ParentId = parentDep.TopoNode.Id;

        //判断是否是楼层或楼层以下级别的,是的话,设置IsRelative="true"
        bool b = MonitorRangeManager.IsBelongtoFloor(parentDep);

        Log.Info("RangeEditWindow.CreateArea", string.Format("IsBelongtoFloor:{0}", b));
        if (b)//如果是楼层及楼层以下级别就设置成相对的
        {
            p.IsRelative           = true;
            p.Transfrom.IsRelative = true;
        }
        else
        {
            p.IsRelative           = false;
            p.Transfrom.IsRelative = false;
            //pos2D = new Vector3((float)tm.X, (float)tm.Y, (float)tm.Z);
            centerPos = Vector3.zero;
            GetRealPos(parentDep, ref centerPos);
        }
        //Vector3 pos = parentDep.monitorRangeObject.transform.position;
        Vector3 realpos = centerPos;

        if (parentDep.TopoNode.Type == AreaTypes.楼层)//宝信项目坐标系偏移,应该也是兼容其他项目的
        {
            realpos.x += parentDep.TopoNode.InitBound.MinX;
            realpos.z += parentDep.TopoNode.InitBound.MinY;
        }

        SetAreaTransform(p, realpos);

        Loom.StartSingleThread(() =>
        {
            Log.Info("RangeEditWindow.CreateArea", string.Format("realpos:{0}", realpos));
            PhysicalTopology newArea = CommunicationObject.Instance.AddMonitorRange(p);//发送信息给服务端
            Loom.DispatchToMainThread(() =>
            {
                try
                {
                    if (newArea != null && newArea.Transfrom != null)
                    {
                        var newT = newArea.Transfrom;
                        Log.Info("RangeEditWindow.CreateArea", string.Format("newPos:({0},{1},{2})", newT.X, newT.Y, newT.Z));

                        RangeNode parentRangeNode = parentDep.monitorRangeObject.rangeNode;//区域的根节点
                        RangeNode newNode         = parentRangeNode.NewNode();

                        MonitorRangeManager.Instance.CreateRangesByRootNode(newArea, newNode);
                        MonitorRangeObject monitorRangeObject = newNode.rangeObject;
                        monitorRangeObject.SetIsNewAdd(true);
                        monitorRangeObject.SetEditEnable(true);
                        monitorRangeObject.SetRendererEnable(true);
                        //monitorRangeObject.SetSelectedUI(true);
                        newNode.rangeObject.gameObject.layer = LayerMask.NameToLayer(Layers.Range);
                        EditorObjectSelection.Instance.ClearSelection(false);
                        EditorObjectSelection.Instance.SetSelectedObjects(new List <GameObject>()
                        {
                            monitorRangeObject.gameObject
                        }, false);
                        //if (depnodeT.ChildNodes == null)
                        //{
                        //    //depnodeT.ChildNodes.Add()
                        RangeController rangeController = RoomFactory.Instance.AddRange(parentDep, newArea);
                        //}
                        Debug.LogError("CreateArea:成功!");
                        rangeController.monitorRangeObject = monitorRangeObject;
                        Show(monitorRangeObject);
                        MonitorRangeManager.Instance.AddRangeToList(monitorRangeObject);
                        //PersonnelTreeManage.Instance.areaDivideTree.RefreshShowAreaDivideTree();
                        PersonnelTreeManage.Instance.areaDivideTree.AddAreaChild(parentDep.TopoNode, newArea);
                        //monitorRangeObject.Focus();
                    }
                    else//else要有
                    {
                        UGUIMessageBox.Show("服务端创建子区域失败!");
                    }
                }
                catch (Exception e)
                {
                    Log.Error("RangeEditWindow.CreateArea", "" + e);
                }
            });
        });
    }
Ejemplo n.º 5
0
 /// <summary>
 /// 计算区域在XZ平面,到位置点最短距离的点的坐标
 /// </summary>
 /// <param name="point">位置点</param>
 /// <param name="verts">区域底面顶点集合(顺,逆时针都可以)</param>
 /// <returns></returns>
 public Vector2 PointForPointToPolygon(Vector2 point)
 {
     return(MonitorRangeManager.PointForPointToPolygon(point, XZpointList));
 }