Example #1
0
    /// <summary>
    /// 开始回放
    /// </summary>
    /// <param name="vo"></param>
    public static void StartReplay(BattleReplayVO vo)
    {
#if UNITY_EDITOR
        BattleManager.logClear();
#endif  //  UNITY_EDITOR

        BattleManager.Instance.BattleStartTime = DateTimeUtil.UnixTimestampMSToDateTime(vo.battleStartTime);

        _recordData = vo;

        _operation.Clear();
        //  REMARK:把List转换为LinkedList,提高remove的效率。
        foreach (var op in vo.battleInputs)
        {
            _operation.AddLast(new OpPlaceSoldier()
            {
                frame       = op.frame,
                operationId = op.battleOperationType,
                x           = op.battleOperationPlaceSoldierVO.x,
                y           = op.battleOperationPlaceSoldierVO.y,
                soldierId   = op.battleOperationPlaceSoldierVO.cid
            });
        }

        //  设置随机数种子(TODO:类型不一致)
        BattleRandom.SetSeed((int)vo.seed);

        //  从0帧开始
        _frame = 0;

        _battleEnded = false;
    }
Example #2
0
    /// <summary>
    /// 开始录像
    /// </summary>
    /// <param name="attacker"></param>
    /// <param name="defender"></param>
    public static void StartRecord()
    {
#if UNITY_EDITOR
        BattleManager.logClear();
#endif  //  UNITY_EDITOR

        BattleManager.Instance.BattleStartTime = ServerTime.Instance.Now();

        _battleEnded = false;
        _frame       = 0;
        _recordData  = new BattleReplayVO()
        {
            seed            = BattleRandom.Range(0, 0xffff),
            battleStartTime = DateTimeUtil.DateTimeToUnixTimestampMS(BattleManager.Instance.BattleStartTime),
        };
        BattleRandom.SetSeed((int)_recordData.seed);
    }
Example #3
0
    public void Create(WorldType worldType, CampVO defender = null, CampVO attacker = null, BattleReplayVO replayVO = null)
    {
        this.worldType = worldType;

        IsoMap.Instance.Clear();
        GameBulletManager.Instance.Init();
        GameEffectManager.Instance.Init();
        GameSkillManager.Instance.Init();
        UpdateManager.Instance.Clear();
        DelayManager.Instance.Init();
        BattleManager.Instance.Init();
        PoolManager.Instance.Clear();
        ResourceManager.Instance.ClearCache();

        //  初始化数据
        if (defender != null)
        {
            DataCenter.Instance.Defender = defender;
        }
        if (attacker != null)
        {
            DataCenter.Instance.Attacker = attacker;
        }

        //  REMARK:录像模式或回放模式从这里开始处理(之前的模块释放完毕,开始放置建筑之前。)
        if (worldType == WorldType.Battle)
        {
            GameRecord.StartRecord();
        }
        else if (worldType == WorldType.Replay)
        {
            Assert.Should(replayVO != null);
            DataCenter.Instance.Attacker = replayVO.attacker;
            DataCenter.Instance.Defender = replayVO.defender;
            GameRecord.StartReplay(replayVO);
        }

        //  添加建筑
        for (int i = 0; i < DataCenter.Instance.Defender.buildings.Count; i++)
        {
            var buildingVO  = DataCenter.Instance.Defender.buildings[i];
            var entityModel = DataCenter.Instance.FindEntityModelById(buildingVO.cid);
            Assert.Should(entityModel != null);
            var tileEntity = TileEntity.Create(OwnerType.Defender, entityModel);
            tileEntity.buildingVO = buildingVO;
            tileEntity.SetTilePosition(new TilePoint(buildingVO.x, buildingVO.y));
            IsoMap.Instance.ForceAddEntity(tileEntity);
        }

        //  添加工人,士兵(仅在建造模式下)
        if (worldType == WorldType.Home)
        {
            foreach (var armyVo in DataCenter.Instance.Defender.armies)
            {
                for (int i = 0; i < armyVo.amount; i++)
                {
                    var actor      = DataCenter.Instance.FindEntityModelById(armyVo.cid);
                    var tileEntity = TileEntity.Create(OwnerType.Defender, actor);
                    tileEntity.SetTilePosition(new TilePoint(0, 0));
                    IsoMap.Instance.ForceAddEntity(tileEntity);
                }
            }
            //  TODO:临时
            for (int i = 0; i < DataCenter.Instance.Defender.player.maxWorker; i++)
            {
                var actor      = DataCenter.Instance.FindEntityModelByResourceName("Pworker");
                var tileEntity = TileEntity.Create(OwnerType.Defender, actor);
                tileEntity.SetTilePosition(new TilePoint(5, 5));
                IsoMap.Instance.ForceAddEntity(tileEntity);
                tileEntity.HideEntity();
            }

            //计算最大人口
            DataCenter.Instance.TotalSpace = 0;
            foreach (var buildingVo in DataCenter.Instance.Defender.buildings)
            {
                var model = DataCenter.Instance.FindEntityModelById(buildingVo.cid);
                if (EntityTypeUtil.IsBarracks(model))
                {
                    DataCenter.Instance.TotalSpace += model.spaceProvide;
                }
            }
            //计算已使用人口
            DataCenter.Instance.SpaceUsed = 0;
            foreach (var armyVo in DataCenter.Instance.Defender.armies)
            {
                var model = DataCenter.Instance.FindEntityModelById(armyVo.cid);
                DataCenter.Instance.SpaceUsed += model.spaceUse * armyVo.amount;
            }
        }

        //把资源平均分配到资源库
        AverageResourceStorageComponents(ResourceType.Gold);
        AverageResourceStorageComponents(ResourceType.Oil);

        switch (worldType)
        {
        case WorldType.Battle:
            IsoMap.Instance.InitGuardAreaMap();
            IsoMap.Instance.ShowGuardAreaMap(false);
            CurrentWorldMode = new IsoWorldModeAttack();
            BattleManager.Instance.PreStartBattle();
            BattleUIManager.Instance.ShowBattleUI();
            break;

        case WorldType.Replay:
            CurrentWorldMode = new IsoWorldModeReplay();
            BattleManager.Instance.PreStartBattle();
            BattleManager.Instance.StartBattle();       //  TODO:暂时先放这里
            BattleUIManager.Instance.ShowReplayUI();
            break;

        case WorldType.Visit:
            CurrentWorldMode = new IsoWorldModeVisit();
            break;

        case WorldType.Home:
            CurrentWorldMode = new IsoWorldModeBuilder();
            HomeLandManager.Instance.ShowMyHomeLandUI();
            break;
        }
    }
 public BattleResultCommand(BattleResultVO battleResult, BattleReplayVO battleReplay)
 {
     this.battleResult = battleResult;
     this.battleReplay = battleReplay;
 }