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()); }
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]); } }
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(); } } }
/// <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]); } }
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); }
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); }
public BlockService(IBlockDataFactory blockDataFactory) { _blockData = new BlockDataFactory().Create(); }
public FullEntity(EntityData data, IBlockData parentBlock) { Data = data; ParentBlock = parentBlock; }
public ShowEntity(EntityData data, IBlockData parentBlock) { EntityId = data.Id; CardId = data.CardId; ParentBlock = parentBlock; }
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); } } }
public void Return(ushort id, IBlockData blockData) { _pools[id].Return(blockData); }
public Block CreateChild(IBlockData data) => new Block(this, data);
public Block(Block parent, IBlockData data) { Parent = parent; Data = data; }
/// <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]); } }
private string GetSourceCardId(IBlockData block) { return(string.IsNullOrEmpty(block.EffectCardId) ? block.CardId : block.EffectCardId); }