Exemplo n.º 1
0
    protected Vector3[] GetCubeOffsets(IBlockData blockData)
    {
        var rowCount     = blockData.Row;
        var columnCount  = blockData.Column;
        var rowOffset    = rowCount / 2;
        var columnOffset = columnCount / 2;
        var offsets      = new Vector3[blockData.Cells.Length];

        for (var row = 0; row < rowCount; ++row)
        {
            for (var column = 0; column < columnCount; ++column)
            {
                var index  = (rowCount - row - 1) * columnCount + column;
                var offset = new Vector3(column - columnOffset, row - rowOffset);
                offsets[index] = new Vector3(offset.x * this.cubeSize.x, offset.y * this.cubeSize.y);
            }
        }

        var compactOffsets = new List <Vector3>();

        for (var i = 0; i < blockData.Cells.Length; ++i)
        {
            if (blockData.Cells[i] == 1)
            {
                var offset = offsets[i];
                compactOffsets.Add(offset);
            }
        }

        return(compactOffsets.ToArray());
    }
Exemplo n.º 2
0
        public string[] GetCreatedCards(IBlockData block)
        {
            switch (block.Type)
            {
            case BlockType.TRIGGER:
                return(Trigger(block));

            case BlockType.POWER:
                return(Power(block));

            default:
                return(new string[0]);
            }
        }
Exemplo n.º 3
0
 public void WithLockedDevice(IStructureData structure, IBlockData block, Action action, Action lockFailed = null)
 {
     using (var locked = ConveyorHelpers.CreateDeviceLock(ScriptRoot, ScriptRoot.GetCurrentPlayfield(), structure.GetCurrent(), block.Position))
     {
         if (locked.Success)
         {
             action();
         }
         else
         {
             lockFailed?.Invoke();
         }
     }
 }
Exemplo n.º 4
0
        /// <summary>
        /// Cards created by triggers, deathrattles, secrets, etc
        /// </summary>
        private string[] Trigger(IBlockData block)
        {
            switch (GetSourceCardId(block))
            {
            case Rogue.TradePrinceGallywix:
                return(new[]
                {
                    _gameInfo.LastPlayedCard,
                    NonCollectible.Neutral.TradePrinceGallywix_GallywixsCoinToken
                });

            case Shaman.WhiteEyes:
                return(new[] { NonCollectible.Shaman.WhiteEyes_TheStormGuardianToken });

            case Hunter.RaptorHatchling:
                return(new[] { NonCollectible.Hunter.RaptorHatchling_RaptorPatriarchToken });

            case Warrior.DirehornHatchling:
                return(new[] { NonCollectible.Warrior.DirehornHatchling_DirehornMatriarchToken });

            case Mage.FrozenClone:
                return(Repeat(block.Target?.CardId, 2));

            case Shaman.Moorabi:
            case Rogue.SonyaShadowdancer:
                return(new[] { block.Target?.CardId });

            case Neutral.HoardingDragon:
                return(Repeat(NonCollectible.Neutral.TheCoin, 2));

            case Priest.GildedGargoyle:
                return(new[] { NonCollectible.Neutral.TheCoin });

            case Druid.AstralTiger:
                return(new[] { Druid.AstralTiger });

            case Rogue.Kingsbane:
                return(new[] { Rogue.Kingsbane });

            default:
                return(new string[0]);
            }
        }
Exemplo n.º 5
0
        public IBlockDefinition GenerateBlock(IBlockData blockData = null)
        {
            IBlockDefinition previousBlock = OnGetLatestBlock();
            IBlockDefinition block         = new Block
            {
                PreviousHash = previousBlock.Hash,
                Difficulty   = OnGetDifficulty(),
                Index        = previousBlock.Index + 1,
                TimeStamp    = DateTime.UtcNow,
                Data         = blockData
            };

            IBlockDefinition newBlock = OnFindBlock(block);

            if (OnAddBlockToChain(newBlock))
            {
                peerNetwork.LatestBlockBroadcast(newBlock);
                return(newBlock);
            }
            return(null);
        }
Exemplo n.º 6
0
        public void BlockStart()
        {
            IBlockData blockData = null;
            var        parser    = new PowerParser(new MockGameInfo());

            parser.BlockStart += args => blockData = args;

            parser.Parse(new Line("Power", "D 00:33:01.7253587 PowerTaskList.DebugPrintPower() - BLOCK_START BlockType=ATTACK Entity=[entityName=Vilefin Inquisitor id=60 zone=PLAY zonePos=2 cardId=OG_006 player=2] EffectCardId= EffectIndex=0 Target=[entityName=Jade Spirit id=40 zone=PLAY zonePos=2 cardId=CFM_715 player=1] SubOption=-1"));
            Assert.IsNotNull(blockData);
            Assert.AreEqual("OG_006", blockData.CardId);
            Assert.AreEqual(60, blockData.Id);
            Assert.IsNotNull(blockData.Target);
            Assert.AreEqual(40, blockData.Target.Id);
            Assert.AreEqual("CFM_715", blockData.Target.CardId);
            Assert.AreEqual(BlockType.ATTACK, blockData.Type);

            blockData = null;
            parser.Parse(new Line("Power", "D 00:33:04.6148508 PowerTaskList.DebugPrintPower() - BLOCK_START BlockType=TRIGGER Entity=Epix EffectCardId= EffectIndex=-1 Target=0 SubOption=-1 TriggerKeyword=0"));
            Assert.IsNotNull(blockData);
            Assert.IsNull(blockData.Target);
            Assert.AreEqual(BlockType.TRIGGER, blockData.Type);
        }
Exemplo n.º 7
0
 public BlockService(IBlockDataFactory blockDataFactory)
 {
     _blockData = new BlockDataFactory().Create();
 }
Exemplo n.º 8
0
 public FullEntity(EntityData data, IBlockData parentBlock)
 {
     Data        = data;
     ParentBlock = parentBlock;
 }
Exemplo n.º 9
0
 public ShowEntity(EntityData data, IBlockData parentBlock)
 {
     EntityId    = data.Id;
     CardId      = data.CardId;
     ParentBlock = parentBlock;
 }
Exemplo n.º 10
0
 public bool IsLocked(IStructureData structure, IBlockData block) => ScriptRoot.GetCurrentPlayfield().IsStructureDeviceLocked(structure.GetCurrent().Id, block.Position);
        public override void OnUpdate()
        {
            if (isScrollOverride && !isScrolling)
            {
                isScrollOverride = false;
            }

            if (Time.timeSinceLevelLoad > 12f && doApplyPreferences)
            {
                doApplyPreferences = false;

                foreach (ALivingEntity entity in worldManager.PlayerFaction.units)
                {
                    applyPlayerPreferences(entity);
                }
            }

            if (doSaveGame || doSaveBackup)
            {
                doSaveGame = false;

                if (Time.timeSinceLevelLoad > 12f)
                {
                    worldManager.SaveGame();

                    if (doSaveBackup)
                    {
                        doSaveBackup = false;

                        if (!modSettings.isAutoBackupsEnabled)
                        {
                            GameSaveService.SaveGameInfo saveGameInfo = gameSaveService.getSaveGameInfoFromSettlementName(worldManager.settlementName);
                            gameSaveService.createBackup(saveGameInfo);
                            log("Backup saved for: " + saveGameInfo.Name);
                        }
                    }
                }
                else log("Unable to save. Press play until save button is visible then try again.");
            }

            if (modSettings.isCreativeEnabled)
            {
                if (doCreateBlocks || doReplaceBlocks)
                {
                    selectedBlockType = controlPlayer.buildingMaterial;

                    if (selectedBlockType.getVariations() != null)
                    {
                        selectedBlockData = selectedBlockType.getVariations()[controlPlayer.buildingVariationIndex][0];
                    }
                    else
                    {
                        BlockDataTextureVariant textureData = new BlockDataTextureVariant(TextureVariant.None);
                        textureData.setVariant(TextureVariant.Pillar, controlPlayer.buildingPillarless);
                        textureData.setVariant(TextureVariant.Trimless, controlPlayer.buildingTrimless);

                        selectedBlockData = textureData;
                    }
                }

                if (doBuildStructures)
                {
                    doBuildStructures = false;
                    controlPlayer.structures.Where(s => !s.isBuilt).ToList()
                        .ForEach(s => buildingService.buildStructure(ref s, worldManager.PlayerFaction));
                }
                else if (doReplaceBlocks)
                {
                    doReplaceBlocks = false;
                    buildingService.replaceBlocksInSelection(selectedBlockType, selectedBlockData);
                }
                else if (doSmoothTerrain)
                {
                    doSmoothTerrain = false;
                    buildingService.smoothBlocksInSelection();
                }
                else if (doCreateBlocks)
                {
                    doCreateBlocks = false;
                    buildingService.buildBlocksInSelection(selectedBlockType, selectedBlockData);
                }
                else if (doRemoveBlocks)
                {
                    doRemoveBlocks = false;
                    buildingService.removeBlocksInSelection();
                }
                else if (doRemoveTrees)
                {
                    doRemoveTrees = false;
                    buildingService.removeSelectedTrees();
                    buildingService.removeSelectedShrubs();
                }
                else if (doRemoveAllTrees)
                {
                    doRemoveAllTrees = false;
                    buildingService.removeAllTreeItems();
                    controlPlayer.CancelDesigning(true);
                }
                else if (doPlaceHuman)
                {
                    doPlaceHuman = false;
                    if (isMouseInWorld(out mouseWorldPosition))
                    {
                        unitService.addHuman(selectedUnitType, mouseWorldPosition, autoAccept: true);
                    }
                }
                else if (doPlaceEnemy)
                {
                    doPlaceEnemy = false;
                    if (isMouseInWorld(out mouseWorldPosition))
                    {
                        unitService.addEnemy(selectedEnemyType, mouseWorldPosition);
                    }
                }
                else if (doPlaceAnimal)
                {
                    doPlaceAnimal = false;
                    if (isMouseInWorld(out mouseWorldPosition))
                    {
                        unitService.addAnimal(selectedAnimalType, mouseWorldPosition);
                    }
                }
                else if (doRemoveEntity)
                {
                    doRemoveEntity = false;
                    if (UnitService.isFriendly(selectedEntity) && playerFactionUnitCount <= 1)
                    {
                        log("Unable to remove player unit. There must be at least one unit in the player faction.");
                        return;
                    }
                    selectedEntity.Destroy();
                }
                else if (doSetPlayerUnitSettings)
                {
                    doSetPlayerUnitSettings = false;
                    if (isPlayableUnitSelected)
                    {
                        PlayerUnitSettings.setPlayerUnitSettings(playerUnitTraitSettings, selectedUnit, UnitTrait.List);
                    }
                }
                else if (isPlayableUnitSelected)
                {
                    PlayerUnitSettings.updatePlayerUnitSettings(ref playerUnitTraitSettings, selectedUnit, UnitTrait.List);
                }
            }
        }
Exemplo n.º 12
0
 public void Return(ushort id, IBlockData blockData)
 {
     _pools[id].Return(blockData);
 }
Exemplo n.º 13
0
 public Block CreateChild(IBlockData data) => new Block(this, data);
Exemplo n.º 14
0
 public Block(Block parent, IBlockData data)
 {
     Parent = parent;
     Data   = data;
 }
Exemplo n.º 15
0
        /// <summary>
        /// Cards created by Battlecries and spells
        /// </summary>
        private string[] Power(IBlockData block)
        {
            switch (GetSourceCardId(block))
            {
            case Rogue.GangUp:
            case Hunter.DireFrenzy:
                return(Repeat(block.Target?.CardId, 3));

            case Rogue.BeneathTheGrounds:
                return(Repeat(NonCollectible.Rogue.BeneaththeGrounds_NerubianAmbushToken, 3));

            case Warrior.IronJuggernaut:
                return(new[] { NonCollectible.Warrior.IronJuggernaut_BurrowingMineToken });

            case Druid.Recycle:
            case Mage.ManicSoulcaster:
            case Neutral.ZolaTheGorgon:
            case Druid.Splintergraft:
            case Neutral.BalefulBanker:
            case Neutral.DollmasterDorian:
                return(new[] { block.Target?.CardId });

            case Mage.ForgottenTorch:
                return(new[] { NonCollectible.Mage.ForgottenTorch_RoaringTorchToken });

            case Warlock.CurseOfRafaam:
                return(new[] { NonCollectible.Warlock.CurseofRafaam_CursedToken });

            case Neutral.AncientShade:
                return(new[] { NonCollectible.Neutral.AncientShade_AncientCurseToken });

            case Priest.ExcavatedEvil:
                return(new[] { Priest.ExcavatedEvil });

            case Neutral.EliseStarseeker:
                return(new[] { NonCollectible.Neutral.EliseStarseeker_MapToTheGoldenMonkeyToken });

            case NonCollectible.Neutral.EliseStarseeker_MapToTheGoldenMonkeyToken:
                return(new[] { NonCollectible.Neutral.EliseStarseeker_GoldenMonkeyToken });

            case Neutral.Doomcaller:
                return(new[] { NonCollectible.Neutral.Cthun });

            case Druid.JadeIdol:
                return(Repeat(Druid.JadeIdol, 3));

            case NonCollectible.Hunter.TheMarshQueen_QueenCarnassaToken:
                return(Repeat(NonCollectible.Hunter.TheMarshQueen_CarnassasBroodToken, 15));

            case Neutral.EliseTheTrailblazer:
                return(new[] { NonCollectible.Neutral.ElisetheTrailblazer_UngoroPackToken });

            case Mage.GhastlyConjurer:
                return(new[] { Mage.MirrorImage });

            case Mage.DeckOfWonders:
                return(Repeat(NonCollectible.Mage.DeckofWonders_ScrollOfWonderToken, 5));

            case Neutral.TheDarkness:
                return(Repeat(NonCollectible.Neutral.TheDarkness_DarknessCandleToken, 3));

            case Rogue.FaldoreiStrider:
                return(Repeat(NonCollectible.Rogue.FaldoreiStrider_SpiderAmbushEnchantment, 3));

            case Neutral.KingTogwaggle:
                return(new[] { NonCollectible.Neutral.KingTogwaggle_KingsRansomToken });

            case NonCollectible.Neutral.TheCandle:
                return(new[] { NonCollectible.Neutral.TheCandle });

            default:
                return(new string[0]);
            }
        }
Exemplo n.º 16
0
 private string GetSourceCardId(IBlockData block)
 {
     return(string.IsNullOrEmpty(block.EffectCardId) ? block.CardId : block.EffectCardId);
 }