Exemple #1
0
        protected virtual Cmd HandleNextMoveCmd(Cmd cmd)
        {
            MovementCmd movementCmd = (MovementCmd)cmd;
            Coordinate  to          = movementCmd.Coordinates[1];

            bool isLastCmdInSequence = movementCmd.IsLastCmdInSequence;

            const bool considerIdleStateAsValid = true;

            if (!m_dataController.IsValidAndEmpty(to, considerIdleStateAsValid))
            {
                if (m_failedMoveAttempts < m_maxFailedMoveAttempts)
                {
                    //Do not move if there is voxel actor or voxel bomb in one of active states. just wait a little bit
                    return(null);
                }
            }
            CmdResultCode result = m_dataController.Move(to, isLastCmdInSequence, EatOrDestroyCallback);

            if (result != CmdResultCode.Success)
            {
                RaiseCmdFailed(cmd, result);
            }

            return(cmd);
        }
Exemple #2
0
        protected virtual void OnConvert(Cmd cmd)
        {
            ChangeParamsCmd changeParams = (ChangeParamsCmd)cmd;
            int             type         = changeParams.IntParams[0];

            bool isVisible = m_controlledVoxel != null;

            if (isVisible)
            {
                m_controlledVoxel.Kill();
            }

            CmdResultCode noFail = m_dataController.Convert(type, DieCallback);

            if (noFail != CmdResultCode.Success)
            {
                throw new InvalidOperationException();
            }

            if (isVisible)
            {
                VoxelData voxelData = m_voxelMap.Map.Get(m_dataController.Coordinate);
                MapPos    mapPos    = m_dataController.Coordinate.MapPos;
                int       weight    = m_dataController.Coordinate.Weight;
                AcquireVoxel(voxelData, mapPos, weight);
            }
        }
Exemple #3
0
        private void ExecuteCommand(Cmd cmd)
        {
            if (cmd.Code == CmdCode.Spawn)
            {
                Coordinate[]  coordinates;
                CmdResultCode noFail = m_dataController.PerformSpawnAction(out coordinates);
                if (noFail != CmdResultCode.Success)
                {
                    throw new InvalidOperationException();
                }

                for (int i = 0; i < coordinates.Length; ++i)
                {
                    Coordinate coordinate = coordinates[i];
                    MapPos     mapPos     = coordinate.MapPos;

                    MapCell   cell = m_voxelMap.Map.Get(coordinate.Row, coordinate.Col, coordinate.Weight);
                    VoxelData data = cell.GetVoxelDataAt(coordinate.Altitude);

                    m_createdVoxels.Add(new VoxelDataCellPair(data, cell));

                    int weight = coordinate.Weight;
                    if (m_voxelMap.IsVisible(mapPos, weight))
                    {
                        AcquireVoxel(data, mapPos, weight);
                    }
                }
            }
        }
Exemple #4
0
        /// <summary>
        /// 连续指令结束
        /// </summary>
        /// <param name="iixServer"></param>
        /// <param name="pg"></param>
        /// <returns></returns>
        public static CmdResultCode SequenceEnd(IIXServer iixServer, PgSelectCode pg)
        {
            CmdResultCode cmdRes = CmdResultCode.Other;

            //查询当前屏幕是否在集合中存在
            OLEDPanel panel = Global.ListOLEDPanel.Where(info => info.PanelPos == iixServer.AssociatedPanelPos).FirstOrDefault();

            if (panel != null)
            {
                if (panel.CmdResWork == CmdResultCode.Success)
                {
                    cmdRes = iixServer.DmrSvrApi.SequenceEnd(pg);
                    iixServer.LatestResult = cmdRes.ToString();

                    if (cmdRes == CmdResultCode.Success)
                    {
                        iixServer.SetSequenceEnd(pg);
                        Log.GetInstance().NormalWrite(string.Format("[{0}]连续指令[{1}]结束成功", iixServer.Ip, pg.ToString()));
                    }
                    else
                    {
                        Log.GetInstance().ErrorWrite(string.Format("[{0}]连续指令[{1}]结束失败,Error:{2}", iixServer.Ip, pg.ToString(), cmdRes.ToString()));
                    }
                }
                else
                {
                    cmdRes = panel.CmdResWork;
                    Log.GetInstance().ErrorWrite(string.Format("[{0}]连续指令结束失败,Error:{1}", iixServer.Ip, cmdRes.ToString()));
                }
            }

            Global.UpdateDgv(ip: iixServer.Ip, pgPrimary: OutlineStateCode.Stable.ToString(), latestResult: iixServer.LatestResult);

            return(cmdRes);
        }
Exemple #5
0
        protected virtual void OnDiminish()
        {
            int           previousAltitude = m_dataController.ControlledData.Altitude;
            CmdResultCode noFail           = m_dataController.Diminish(ExpandCallback);

            if (noFail != CmdResultCode.Success)
            {
                throw new InvalidOperationException();
            }
            if (m_controlledVoxel == null)
            {
                CollapseEatExpandClear(m_currentTick);
            }
            else
            {
                Vector3 position = m_voxelMap.GetWorldPosition(m_dataController.Coordinate);
                m_controlledVoxel.Diminish(position, m_currentTick, m_currentCmdDuration);

                int newAltitude = m_dataController.ControlledData.Altitude;
                m_controlledVoxel.ChangeAltitude(previousAltitude, newAltitude, m_currentCmdDuration, 0);

                float duration = (m_dataController.Abilities.DiminishDuration) * GameConstants.MatchEngineTick;
                EatAndExpand(m_currentTick, duration);
            }
        }
Exemple #6
0
        /// <summary>
        /// 转换PG
        /// </summary>
        /// <param name="iixServer"></param>
        /// <returns></returns>
        public static CmdResultCode TableRotation(IIXServer iixServer)
        {
            CmdResultCode cmdRes = CmdResultCode.Other;

            //查询当前屏幕是否在集合中存在
            OLEDPanel panel = Global.ListOLEDPanel.Where(info => info.PanelPos == iixServer.AssociatedPanelPos).FirstOrDefault();

            if (panel != null)
            {
                if (panel.CmdResWork == CmdResultCode.Success)
                {
                    cmdRes = iixServer.DmrSvrApi.TableRotation();
                    iixServer.LatestResult = cmdRes.ToString();

                    if (cmdRes == CmdResultCode.Success)
                    {
                        iixServer.SetTableRotation();
                        Log.GetInstance().NormalWrite(string.Format("[{0}]转换PG成功", iixServer.Ip));
                    }
                    else
                    {
                        Log.GetInstance().ErrorWrite(string.Format("[{0}]转换PG失败,Error:{1}", iixServer.Ip, cmdRes.ToString()));
                    }
                }
                else
                {
                    cmdRes = panel.CmdResWork;
                    Log.GetInstance().ErrorWrite(string.Format("[{0}]转换PG失败,Error:{1}", iixServer.Ip, cmdRes.ToString()));
                }
            }

            Global.UpdateDgv(ip: iixServer.Ip, pgPrimary: iixServer.OutlineState[0].ToString(), pgSecondary: iixServer.OutlineState[1].ToString(), latestResult: iixServer.LatestResult);

            return(cmdRes);
        }
Exemple #7
0
        protected virtual void OnGrow()
        {
            int           previousAltitude = m_dataController.ControlledData.Altitude;
            CmdResultCode noFail           = m_dataController.Grow(EatOrDestroyCallback, CollapseCallback);

            if (noFail != CmdResultCode.Success)
            {
                throw new InvalidOperationException();
            }
            if (m_controlledVoxel == null)
            {
                CollapseEatExpandClear(m_currentTick);
            }
            else
            {
                m_controlledVoxel.Health = m_dataController.Abilities.DefaultHealth;//  // m_dataController.ControlledData.Health;
                Vector3 position = m_voxelMap.GetWorldPosition(m_dataController.Coordinate);
                m_controlledVoxel.Grow(position, m_currentTick, m_currentCmdDuration);

                int newAltitude = m_dataController.ControlledData.Altitude;
                m_controlledVoxel.ChangeAltitude(previousAltitude, newAltitude, m_currentCmdDuration, 0);

                float duration = (m_dataController.Abilities.GrowDuration) * GameConstants.MatchEngineTick;
                Collapse(m_currentTick, duration);
            }
        }
Exemple #8
0
        protected override bool GetSuitableData(SearchAroundContext ctx, VoxelData unitData, int row, int col, out int altitude)
        {
            altitude = int.MinValue;
            MapCell cell = m_taskEngine.MatchEngine.Map.Get(row, col, ctx.m_weight);

            if (cell.Last == null)
            {
                return(false);
            }

            if (cell.Last == unitData)
            {
                altitude = cell.Last.Prev.Altitude;
            }
            else
            {
                altitude = cell.Last.Altitude;
            }

            Coordinate    coordinate = new Coordinate(row, col, altitude, ctx.m_weight);
            CmdResultCode result     = m_dataController.CanSplit4(
                m_dataController.ControlledData.Type,
                m_dataController.ControlledData.Health,
                coordinate);

            return(result == CmdResultCode.Success);
        }
Exemple #9
0
 private void OnCmdExecuted(CmdResultCode cmdErrorCode)
 {
     m_unit.CmdExecuted -= OnCmdExecuted;
     if (cmdErrorCode == CmdResultCode.Success)
     {
         OnCompleted();
     }
     else
     {
         OnFailed();
     }
 }
Exemple #10
0
        protected void RaiseCmdFailed(Cmd cmd, CmdResultCode errorCode)
        {
            if (cmd != null)
            {
                cmd.ErrorCode = errorCode;
            }

            GoToIdleState();
            if (CmdExecuted != null)
            {
                CmdExecuted(errorCode);
            }
        }
Exemple #11
0
        protected virtual void OnSplit4(Cmd cmd)
        {
            if (m_controlledVoxel != null)
            {
                m_controlledVoxel.Split4(m_currentTick, cmd.Duration * GameConstants.MatchEngineTick);
            }
            Coordinate[]  coordinates;
            CmdResultCode noFail = m_dataController.Split4(out coordinates, ExpandCallback, DieCallback);

            if (noFail != CmdResultCode.Success)
            {
                throw new InvalidOperationException();
            }


            int visibleCount = 0;

            for (int i = 0; i < coordinates.Length; ++i)
            {
                Coordinate coordinate = coordinates[i];
                //Voxel cloneActor = null;
                if (m_voxelMap.IsVisible(coordinate.MapPos, coordinate.Weight))
                {
                    VoxelData voxelData = m_voxelMap.Map.Get(coordinate);
                    // cloneActor =
                    AcquireVoxel(voxelData, coordinate.MapPos, coordinate.Weight);
                    visibleCount++;
                }
            }

            m_eatCommands.Clear();
            //clear needed because voxel already reflected current Health value during AcquireReleaseVisibility method call
            //no execution of eat commands required in this case

            if (visibleCount == 0)
            {
                CollapseEatExpandClear(m_currentTick);
            }
            else
            {
                /*This code should be moved to Split4 Animation OnBeforeCompleted event handler*/
                Collapse(m_currentTick, 0);
                EatAndExpand(m_currentTick, 0);
            }
        }
Exemple #12
0
        /// <summary>
        /// 修改时间
        /// </summary>
        /// <param name="iixServer"></param>
        /// <param name="dateTime"></param>
        /// <returns></returns>
        public static CmdResultCode AdjustPCTime(IIXServer iixServer, DateTimeInfo dateTime)
        {
            CmdResultCode cmdRes = CmdResultCode.Other;

            cmdRes = iixServer.DmrSvrApi.AdjustPCTime(dateTime);
            iixServer.LatestResult = cmdRes.ToString();

            if (cmdRes == CmdResultCode.Success)
            {
                Log.GetInstance().NormalWrite(string.Format("[{0}]修改时间成功", iixServer.Ip));
            }
            else
            {
                Log.GetInstance().ErrorWrite(string.Format("[{0}]修改时间失败,Error:{1}", iixServer.Ip, cmdRes.ToString()));
            }

            return(cmdRes);
        }
Exemple #13
0
        /// <summary>
        /// 更新License
        /// </summary>
        /// <param name="iixServer"></param>
        /// <param name="licenseFile"></param>
        /// <returns></returns>
        public static CmdResultCode UpdateLicense(IIXServer iixServer, string licenseFile)
        {
            CmdResultCode cmdRes = CmdResultCode.Other;

            cmdRes = iixServer.DmrSvrApi.UpdateLicense(licenseFile);
            iixServer.LatestResult = cmdRes.ToString();

            if (cmdRes == CmdResultCode.Success)
            {
                Log.GetInstance().NormalWrite(string.Format("[{0}]更新License成功", iixServer.Ip));
            }
            else
            {
                Log.GetInstance().ErrorWrite(string.Format("[{0}]更新License失败,Error:{1}", iixServer.Ip, cmdRes.ToString()));
            }

            return(cmdRes);
        }
Exemple #14
0
        protected virtual void OnStateChanged(Cmd cmd)
        {
            ChangeParamsCmd changeParamsCmd = (ChangeParamsCmd)cmd;

            VoxelDataState prevState = m_dataController.GetVoxelDataState();

            CmdResultCode noFail = m_dataController.SetVoxelDataState((VoxelDataState)changeParamsCmd.IntParams[1]);

            if (noFail != CmdResultCode.Success)
            {
                throw new InvalidOperationException();
            }

            if (m_controlledVoxel != null)
            {
                m_controlledVoxel.OnStateChanged(prevState, m_dataController.GetVoxelDataState());
            }
        }
Exemple #15
0
        /// <summary>
        /// 切断和 SlavePC 的连接
        /// </summary>
        /// <param name="iixServer"></param>
        /// <returns></returns>
        public static CmdResultCode Disconnect(IIXServer iixServer)
        {
            CmdResultCode cmdRes = CmdResultCode.Other;

            cmdRes = iixServer.DmrSvrApi.Disconnect();
            iixServer.LatestResult = cmdRes.ToString();

            if (cmdRes == CmdResultCode.Success)
            {
                iixServer.ConnState = ConnectionCode.Disconnect;
                Log.GetInstance().NormalWrite(string.Format("关闭[{0}]服务端成功", iixServer.Ip));
            }
            else
            {
                Log.GetInstance().ErrorWrite(string.Format("关闭[{0}]服务端成功,Error:{1}", iixServer.Ip, cmdRes.ToString()));
            }

            Global.UpdateDgv(ip: iixServer.Ip, connOpen: iixServer.ConnState.ToString(), latestResult: iixServer.LatestResult);

            return(cmdRes);
        }
Exemple #16
0
        /// <summary>
        /// 获取Capture(获取拍摄数据)处理结果
        /// </summary>
        /// <param name="iixServer"></param>
        /// <param name="pg"></param>
        /// <returns></returns>
        public static CmdResultCode GetCaptureResult(IIXServer iixServer, PgSelectCode pg)
        {
            CmdResultCode cmdRes = CmdResultCode.Other;

            //查询当前屏幕是否在集合中存在
            OLEDPanel panel = Global.ListOLEDPanel.Where(info => info.PanelPos == iixServer.AssociatedPanelPos).FirstOrDefault();

            if (panel != null)
            {
                //如果上一次的检测结果是正确的才继续执行当前的工作
                if (panel.CmdResWork == CmdResultCode.Success)
                {
                    cmdRes = iixServer.DmrSvrApi.GetCaptureResult(pg);
                    iixServer.LatestResult = cmdRes.ToString();

                    if (cmdRes == CmdResultCode.Success)
                    {
                        Log.GetInstance().NormalWrite(string.Format("获取[{0}]Capture(获取拍摄数据)处理结果成功", iixServer.Ip));
                    }
                    else
                    {
                        Log.GetInstance().ErrorWrite(string.Format("获取[{0}]Capture(获取拍摄数据)处理结果失败,Error:{1}", iixServer.Ip, cmdRes.ToString()));
                    }

                    //修改执行结果
                    panel.CmdResWork = cmdRes;
                }
                else
                {
                    cmdRes = panel.CmdResWork;

                    Log.GetInstance().ErrorWrite(string.Format("获取[{0}]Capture(获取拍摄数据)处理结果失败,Error:{1}", iixServer.Ip, cmdRes.ToString()));
                }
            }

            Global.UpdateDgv(ip: iixServer.Ip, latestResult: iixServer.LatestResult);

            return(cmdRes);
        }
Exemple #17
0
        /// <summary>
        /// 设置Panel显示Raster图像
        /// </summary>
        /// <param name="iixServer"></param>
        /// <param name="pg"></param>
        /// <param name="color"></param>
        /// <param name="isFactory"></param>
        /// <returns></returns>
        public static CmdResultCode SetRasterImage(IIXServer iixServer, PgSelectCode pg, Color color, bool isFactory)
        {
            CmdResultCode cmdRes = CmdResultCode.Other;

            //查询当前屏幕是否在集合中存在
            OLEDPanel panel = Global.ListOLEDPanel.Where(info => info.PanelPos == iixServer.AssociatedPanelPos).FirstOrDefault();

            if (panel != null)
            {
                //如果上一次的检测结果是正确的才继续执行当前的工作
                if (panel.CmdResWork == CmdResultCode.Success)
                {
                    cmdRes = iixServer.DmrSvrApi.SetRasterImage(pg, color.R, color.G, color.B, isFactory);
                    iixServer.LatestResult = cmdRes.ToString();

                    if (cmdRes == CmdResultCode.Success)
                    {
                        Log.GetInstance().NormalWrite(string.Format("设置[{0}]Panel显示Raster图像成功", iixServer.Ip));
                    }
                    else
                    {
                        Log.GetInstance().ErrorWrite(string.Format("设置[{0}]Panel显示Raster图像失败,Error:{1}", iixServer.Ip, cmdRes.ToString()));
                    }

                    //修改执行结果
                    panel.CmdResWork = cmdRes;
                }
                else
                {
                    cmdRes = panel.CmdResWork;

                    Log.GetInstance().ErrorWrite(string.Format("设置[{0}]Panel显示Raster图像失败,Error:{1}", iixServer.Ip, cmdRes.ToString()));
                }
            }

            Global.UpdateDgv(ip: iixServer.Ip, latestResult: iixServer.LatestResult);

            return(cmdRes);
        }
Exemple #18
0
        protected virtual void OnAddAssignment(Cmd cmd)
        {
            CreateAssignmentCmd addCmd = (CreateAssignmentCmd)cmd;

            if (addCmd.CreatePreview)
            {
                CmdResultCode noFail = m_dataController.CreatePreview(addCmd.PreviewType, addCmd.PreviewCoordinate);
                if (noFail != CmdResultCode.Success)
                {
                    throw new InvalidOperationException();
                }

                Coordinate coordinate = addCmd.PreviewCoordinate;
                //Voxel cloneActor = null;
                if (m_voxelMap.IsVisible(coordinate.MapPos, coordinate.Weight))
                {
                    Debug.Assert(m_controlledVoxel.Owner == addCmd.TargetPlayerIndex);
                    VoxelData voxelData = m_voxelMap.Map.GetPreview(addCmd.TargetPlayerIndex, coordinate);
                    AcquireVoxel(voxelData, coordinate.MapPos, coordinate.Weight);
                }
            }
        }
Exemple #19
0
        /// <summary>
        /// 关闭 SlavePC 所管理的 Device
        /// </summary>
        /// <param name="iixServer"></param>
        /// <returns></returns>
        public static CmdResultCode Close(IIXServer iixServer)
        {
            CmdResultCode cmdRes = CmdResultCode.Other;

            cmdRes = iixServer.DmrSvrApi.Close();
            iixServer.LatestResult = cmdRes.ToString();

            if (cmdRes == CmdResultCode.Success)
            {
                iixServer.ConnState = ConnectionCode.Close;
                iixServer.SetCloseFinished();
                Log.GetInstance().NormalWrite(string.Format("关闭[{0}]所管理的Device成功", iixServer.Ip));
            }
            else
            {
                Log.GetInstance().ErrorWrite(string.Format("关闭[{0}]所管理的Device失败,Error:{1}", iixServer.Ip, cmdRes.ToString()));
            }

            Global.UpdateDgv(ip: iixServer.Ip, connOpen: iixServer.ConnState.ToString(), pgPrimary: iixServer.OutlineState[0].ToString(), pgSecondary: iixServer.OutlineState[1].ToString(), latestResult: iixServer.LatestResult);

            return(cmdRes);
        }
Exemple #20
0
        /// <summary>
        /// 向Flash Memory写入文件
        /// </summary>
        /// <param name="iixServer"></param>
        /// <param name="pg"></param>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static CmdResultCode WriteFlashMemory(IIXServer iixServer, PgSelectCode pg, string fileName)
        {
            CmdResultCode cmdRes = CmdResultCode.Other;

            //查询当前屏幕是否在集合中存在
            OLEDPanel panel = Global.ListOLEDPanel.Where(info => info.PanelPos == iixServer.AssociatedPanelPos).FirstOrDefault();

            if (panel != null)
            {
                //如果上一次的检测结果是正确的才继续执行当前的工作
                if (panel.CmdResWork == CmdResultCode.Success)
                {
                    cmdRes = iixServer.DmrSvrApi.WriteFlashMemory(pg, fileName);
                    iixServer.LatestResult = cmdRes.ToString();

                    if (cmdRes == CmdResultCode.Success)
                    {
                        Log.GetInstance().NormalWrite(string.Format("[{0}]向Flash Memory写入文件[{1}]成功", iixServer.Ip, fileName));
                    }
                    else
                    {
                        Log.GetInstance().ErrorWrite(string.Format("[{0}]向Flash Memory写入文件[{1}]失败,Error:{2}", iixServer.Ip, fileName, cmdRes.ToString()));
                    }

                    //修改执行结果
                    panel.CmdResWork = cmdRes;
                }
                else
                {
                    cmdRes = panel.CmdResWork;

                    Log.GetInstance().ErrorWrite(string.Format("[{0}]向Flash Memory写入文件[{1}]失败,Error:{2}", iixServer.Ip, fileName, cmdRes.ToString()));
                }
            }

            Global.UpdateDgv(ip: iixServer.Ip, latestResult: iixServer.LatestResult);

            return(cmdRes);
        }
Exemple #21
0
        /// <summary>
        /// 获取License剩余次数的请求
        /// </summary>
        /// <param name="iixServer"></param>
        /// <returns></returns>
        public static int GetLicenseRemainingCount(IIXServer iixServer)
        {
            CmdResultCode cmdRes = CmdResultCode.Other;

            TransferCounterInfo tci = iixServer.DmrSvrApi.GetRemainingCount();

            cmdRes = tci.CmdResult;
            iixServer.LatestResult = cmdRes.ToString();

            if (cmdRes == CmdResultCode.Success)
            {
                Log.GetInstance().NormalWrite(string.Format("获取[{0}]License剩余次数[{1}]成功 ", iixServer.Ip, tci.Count));
            }
            else
            {
                Log.GetInstance().ErrorWrite(string.Format("获取[{0}]License剩余次数失败,Error:{1}", iixServer.Ip, cmdRes.ToString()));
            }

            Global.UpdateDgv(ip: iixServer.Ip, latestResult: iixServer.LatestResult);

            return(tci.Count);
        }
Exemple #22
0
        protected virtual void OnMove(Cmd cmd)
        {
            MovementCmd coordinateCmd = (MovementCmd)cmd;
            Coordinate  to            = coordinateCmd.Coordinates[1];

            bool          isLastCmd = coordinateCmd.IsLastCmdInSequence;
            CmdResultCode noFail    = m_dataController.Move(to, isLastCmd, EatOrDestroyCallback, CollapseCallback, ExpandCallback, ExplodeCallback);

            if (noFail != CmdResultCode.Success)
            {
                throw new InvalidOperationException();
            }

            VoxelData voxelData = m_dataController.ControlledData;
            MapPos    mapPos    = m_dataController.Coordinate.MapPos;
            int       weight    = m_dataController.Coordinate.Weight;

            Debug.Assert(weight == m_dataController.ControlledData.Weight);

            bool wasVisible = m_controlledVoxel != null;

            AcquireReleaseVisibility(voxelData, mapPos, weight);

            bool isVisible = m_controlledVoxel != null;

            if (wasVisible && isVisible)
            {
                m_controlledVoxel.Move(voxelData.Altitude, m_currentTick, m_currentCmdDuration);
            }
            else
            {
                m_eatCommands.Clear();
                //clear needed because voxel already reflected current Health value during AcquireReleaseVisibility method call
                //no execution of eat commands required in this case

                CollapseEatExpandClear(m_currentTick);
                Explode(0);
            }
        }
Exemple #23
0
        protected override Cmd OnTick(long tick)
        {
            m_ticksBeforeNextCommand = DataController.Abilities.ActionInterval;

            Coordinate[]  coordinates;
            CmdResultCode result = m_dataController.PerformSpawnAction(out coordinates);

            if (result == CmdResultCode.Success)
            {
                for (int i = 0; i < coordinates.Length; ++i)
                {
                    Coordinate coordinate = coordinates[i];
                    MapCell    cell       = m_dataController.Map.Get(coordinate.Row, coordinate.Col, coordinate.Weight);
                    VoxelData  data       = cell.GetVoxelDataAt(coordinate.Altitude);
                    m_createdVoxels.Add(new VoxelDataCellPair(data, cell));
                }

                Cmd cmd = new Cmd(CmdCode.Spawn, Id);
                cmd.Duration = m_ticksBeforeNextCommand;
                return(cmd);
            }
            return(null);
        }
Exemple #24
0
        /// <summary>
        /// DeMura Check(补正结果确认)开始
        /// </summary>
        /// <param name="iixServer"></param>
        /// <param name="pg"></param>
        /// <returns></returns>
        public static CmdResultCode DeMuraCheckStart(IIXServer iixServer, PgSelectCode pg)
        {
            CmdResultCode cmdRes = CmdResultCode.Other;

            //查询当前屏幕是否在集合中存在
            OLEDPanel panel = Global.ListOLEDPanel.Where(info => info.PanelPos == iixServer.AssociatedPanelPos).FirstOrDefault();

            if (panel != null)
            {
                //如果上一次的检测结果是正确的才继续执行当前的工作
                if (panel.CmdResWork == CmdResultCode.Success)
                {
                    cmdRes = iixServer.DmrSvrApi.DeMuraCheckStart(pg);
                    iixServer.LatestResult = cmdRes.ToString();

                    if (cmdRes == CmdResultCode.Success)
                    {
                        Log.GetInstance().NormalWrite(string.Format("[{0}]DeMura Check(补正结果确认)开始成功", iixServer.Ip));
                    }
                    else
                    {
                        Log.GetInstance().ErrorWrite(string.Format("[{0}]DeMura Check(补正结果确认)开始失败,Error:{1}", iixServer.Ip, cmdRes.ToString()));
                    }

                    //修改执行结果
                    panel.CmdResWork = cmdRes;
                }
                else
                {
                    cmdRes = panel.CmdResWork;

                    Log.GetInstance().ErrorWrite(string.Format("[{0}]DeMura Check(补正结果确认)开始失败,Error:{1}", iixServer.Ip, cmdRes.ToString()));
                }
            }

            return(cmdRes);
        }
Exemple #25
0
        /// <summary>
        /// 点灯
        /// </summary>
        /// <param name="iixServer"></param>
        /// <param name="pg"></param>
        /// <returns></returns>
        public static CmdResultCode PanelOn(IIXServer iixServer, PgSelectCode pg)
        {
            CmdResultCode cmdRes = CmdResultCode.Other;

            //查询当前屏幕是否在集合中存在
            OLEDPanel panel = Global.ListOLEDPanel.Where(info => info.PanelPos == iixServer.AssociatedPanelPos).FirstOrDefault();

            if (panel != null)
            {
                if (panel.CmdResWork == CmdResultCode.Success)
                {
                    cmdRes = iixServer.DmrSvrApi.PanelOn(pg);
                    iixServer.LatestResult = cmdRes.ToString();

                    if (cmdRes == CmdResultCode.Success)
                    {
                        panel.IsPanelOn     = true;
                        iixServer.IsPanelOn = true;
                        Log.GetInstance().NormalWrite(string.Format("屏[{0}]点灯成功", iixServer.AssociatedPanelPos));
                    }
                    else
                    {
                        iixServer.IsPanelOn = false;
                        Log.GetInstance().ErrorWrite(string.Format("屏[{0}]点灯失败,Error:{1}", iixServer.AssociatedPanelPos, cmdRes.ToString()));
                    }
                }
                else
                {
                    cmdRes = panel.CmdResWork;
                    Log.GetInstance().ErrorWrite(string.Format("屏[{0}]点灯失败,Error:{1}", iixServer.Ip, cmdRes.ToString()));
                }
            }

            Global.UpdateDgv(ip: iixServer.Ip, latestResult: iixServer.LatestResult);

            return(cmdRes);
        }
Exemple #26
0
        /// <summary>
        /// 获取Recipe
        /// </summary>
        /// <param name="iixServer"></param>
        /// <param name="recipePath"></param>
        /// <returns></returns>
        public static CmdResultCode GetRecipe(IIXServer iixServer, string recipePath)
        {
            TransferFileInfo tfi = iixServer.DmrSvrApi.GetRecipe();

            CmdResultCode cmdRes = (tfi.IsValid) ? CmdResultCode.Success : CmdResultCode.Other;

            if (tfi.IsValid)
            {
                tfi.Save(recipePath);
            }

            iixServer.LatestResult = cmdRes.ToString();

            if (cmdRes == CmdResultCode.Success)
            {
                Log.GetInstance().NormalWrite(string.Format("[{0}]获取Recipe成功", iixServer.Ip));
            }
            else
            {
                Log.GetInstance().ErrorWrite(string.Format("[{0}]获取Recipe失败,Error:{1}", iixServer.Ip, cmdRes.ToString()));
            }

            return(cmdRes);
        }
        protected override void OnEvaluating(ExpressionInfo expression, IMatchPlayerView player, IMatchUnitAssetView unit, ITaskEngine taskEngine, Action <object> callback)
        {
            CmdResultCode can = unit.DataController.CanSplit4Immediate();

            callback(can);
        }
Exemple #28
0
        /// <summary>
        /// 关灯
        /// </summary>
        /// <param name="iixServer"></param>
        /// <param name="pg"></param>
        /// <returns></returns>
        public static CmdResultCode PanelOff(IIXServer iixServer, PgSelectCode pg)
        {
            CmdResultCode cmdRes = CmdResultCode.Other;

            //查询当前屏幕是否在集合中存在
            OLEDPanel panel = Global.ListOLEDPanel.Where(info => info.PanelPos == iixServer.AssociatedPanelPos).FirstOrDefault();

            if (panel != null && panel.IsPanelOn)
            {
                cmdRes = iixServer.DmrSvrApi.PanelOff(pg);
                iixServer.LatestResult = cmdRes.ToString();

                if (cmdRes == CmdResultCode.Success)
                {
                    iixServer.IsPanelOn = false;
                    Log.GetInstance().NormalWrite(string.Format("屏[{0}]关灯成功", iixServer.AssociatedPanelPos));
                }
                else
                {
                    iixServer.IsPanelOn = true;
                    Log.GetInstance().ErrorWrite(string.Format("屏[{0}]关灯失败,Error:{1}", iixServer.AssociatedPanelPos, cmdRes.ToString()));
                }

                //如果上一个工位的检测结果是正确的才继续执行当前工位的工作
                if (panel.CmdResWork == CmdResultCode.Success)
                {
                    Global.UpdateDgv(ip: iixServer.Ip, latestResult: iixServer.LatestResult);

                    //修改执行结果
                    panel.CmdResWork = cmdRes;
                    //修改当前的工作位置
                    panel.PanelWorkPos = "工位1";
                }
                else
                {
                    cmdRes             = panel.CmdResWork;
                    panel.PanelWorkPos = "工位1";
                }

                lock (Global.ListOLEDPanel)
                {
                    //将屏从集合中移除
                    Global.ListOLEDPanel.Remove(panel);
                }

                //当所有流程执行完后关灯时添加成功/失败数
                if (panel.bRotated)
                {
                    if (cmdRes == CmdResultCode.Success)
                    {
                        Global.PassNumber++;
                    }
                    else
                    {
                        Global.FailNumber++;
                    }
                }
            }

            Global.SetNumber();

            return(cmdRes);
        }