public static void step(Terrain terrain, int x, int y, Region region, Quinoa quinoa) { //moss is destroyed if stepped upon if(TerrainManager.hasParameter(region.getTerrain(x, y), TerrainParameter.HAS_MOSS)) { region.getTerrain(x, y).getParameters().Remove(TerrainParameter.HAS_MOSS); if(RandomNumber.RandomDouble() < MOSS_DROP_RATE) { Item moss = new Item(); moss.itemClass = ItemClass.MOSS; moss.setPosition(x, y); moss.itemState = ItemState.GROUND; region.getItems().Add(moss); } } }
public static bool use(Monster monster, Item item, int x, int y, Region region, Quinoa quinoa) { Terrain terrain = region.getTerrain(x,y); switch(item.itemClass) { case ItemClass.AXE: if(TerrainManager.hasParameter(region.getTerrain(x, y), TerrainParameter.HAS_TREE)) { TreeCode tc = (TreeCode)Enum.Parse(typeof(TreeCode), TerrainManager.getParameter(region.getTerrain(x, y), TerrainParameter.HAS_TREE)); int damage = 0; if(TerrainManager.hasParameter(region.getTerrain(x, y), TerrainParameter.DAMAGE)) { damage = Int32.Parse(TerrainManager.getParameter(region.getTerrain(x,y), TerrainParameter.DAMAGE)); } damage = damage + 1; if(damage < TerrainManager.maxTreeDamage(tc)) { region.getTerrain(x,y).getParameters().Add(TerrainParameter.DAMAGE, damage + ""); if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("You chop the " + EnumUtil.EnumName<TreeCode>(tc) + "."); } } else { region.getTerrain(x, y).getParameters().Remove(TerrainParameter.HAS_TREE); region.getTerrain(x, y).getParameters().Remove(TerrainParameter.DAMAGE); Item log = new Item(); log.itemClass = ItemClass.LOG; log.itemState = ItemState.GROUND; log.setPosition(x, y); region.getItems().Add(log); if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("The tree falls."); } } } return false; case ItemClass.LANTERN: case ItemClass.TORCH: return MonsterActionManager.setFire(monster, item, region, x, y, quinoa); case ItemClass.ASH: //check for mushrooms spores if(TerrainManager.hasParameter(terrain, TerrainParameter.HAS_MUSHROOM_SPORES)) { MushroomSporeCode msc = (MushroomSporeCode)Enum.Parse(typeof(MushroomSporeCode), TerrainManager.getParameter(terrain, TerrainParameter.HAS_MUSHROOM_SPORES)); if(RandomNumber.RandomDouble() > 0.25) { //Grow a mushroom Item newMushroom = new Item(); newMushroom.itemClass = TerrainManager.mushroomSporeToItemClass(msc); ItemManager.initialize(newMushroom); newMushroom.setPosition(x, y); region.getItems().Add(newMushroom); if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("A mushroom sprouts!"); } } else { //spread the spore if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("The spores shimmer.."); } quinoa.getActions().spreadSpore(x, y, msc); } //Slight chance to remove the spores if (RandomNumber.RandomDouble() < 0.02) { terrain.getParameters().Remove(TerrainParameter.HAS_MUSHROOM_SPORES); if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("The spores crumble..."); } } return true; } //check for clover if(TerrainManager.hasParameter(terrain, TerrainParameter.HAS_CLOVER)) { int cloverCount = Int32.Parse(TerrainManager.getParameter(terrain, TerrainParameter.HAS_CLOVER)); if(cloverCount > 0) { terrain.getParameters().Add(TerrainParameter.HAS_CLOVER, "0"); if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("The clover blooms!"); } return true; } } //fertilize existing ground switch(terrain.getCode()) { case TerrainCode.DIRT: terrain.setCode(TerrainCode.FERTILE_LAND); terrain.getParameters().Add(TerrainParameter.GROW_COUNTER, TerrainManager.GRASS_GROW_COUNT+""); if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("The ground becomes fertile."); } return true; case TerrainCode.FERTILE_LAND: if(TerrainManager.hasParameter(terrain, TerrainParameter.GROW_COUNTER)) { int growCount = Int32.Parse(TerrainManager.getParameter(terrain, TerrainParameter.GROW_COUNTER)); growCount = growCount / 2; terrain.getParameters().Add(TerrainParameter.GROW_COUNTER, growCount+""); if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("The ground becomes more fertile."); } } return true; default: return false; } case ItemClass.BUCKET: if(terrain.getWater() > 0) { int waterLevel = terrain.getWater(); if(waterLevel > TerrainManager.DEEP_WATER) { item.itemClass = ItemClass.WATER_BUCKET; terrain.setWater(waterLevel - TerrainManager.DEEP_WATER); if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("You fill the bucket with water."); } } else { if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("There's not enough water there."); } } } return false; case ItemClass.WATER_BUCKET: int waterValue = ItemManager.WATER_LEVEL_BUCKET_FULL; //Turn the item back to a bucket after all uses are gone if(ItemManager.decreaseUse(item)) { item.itemClass = ItemClass.BUCKET; } //Check for fire extinguishing if(TerrainManager.hasParameter(terrain, TerrainParameter.FIRE)) { terrain.getParameters().Remove(TerrainParameter.FIRE); waterValue = waterValue / 2; if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("The fire is extinguished!"); } } //Add water to the ground if(TerrainManager.wetable(terrain, x, y, quinoa)) { terrain.setWater(terrain.getWater() + waterValue); if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("You splash water around."); } } return false; case ItemClass.SHOVEL: if(TerrainManager.diggable(terrain)) { TerrainManager.dig(terrain, x, y, quinoa); if(isPlayer(monster)) { if(TerrainManager.hasParameter(terrain, TerrainParameter.HAS_GRAVE)) { quinoa.getMessageManager().addMessage("You open the grave."); } else { quinoa.getMessageManager().addMessage("You dig."); } } } else { if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("You can't dig there."); } } return false; case ItemClass.PICKAXE: if(TerrainManager.mineable(terrain)) { TerrainManager.mine(terrain, x, y, quinoa); if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("You mine."); } } else { if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("You can't mine there."); } } return false; case ItemClass.CORN_SEED: if(terrain.getCode() == TerrainCode.FERTILE_LAND) { if(!TerrainManager.hasParameter(terrain, TerrainParameter.HAS_SEED)) { terrain.getParameters().Add(TerrainParameter.HAS_SEED, EnumUtil.EnumName<SeedType>(SeedType.CORN)); terrain.getParameters().Add(TerrainParameter.GROW_COUNTER,TerrainManager.CORN_GROW_COUNT+""); if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("You sow the corn seed."); } } } else { if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("Plant seeds in fertile ground."); } } return true; case ItemClass.PUMPKIN_SEED: if(terrain.getCode() == TerrainCode.FERTILE_LAND) { if(!TerrainManager.hasParameter(terrain, TerrainParameter.HAS_SEED)) { terrain.getParameters().Add(TerrainParameter.HAS_SEED,EnumUtil.EnumName<SeedType>(SeedType.PUMPKIN)); terrain.getParameters().Add(TerrainParameter.GROW_COUNTER,TerrainManager.PUMPKIN_GROW_COUNT+""); if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("Sow the pumpkin seed."); quinoa.getMessageManager().addMessage("A creeping vine appears."); } } } else { if(isPlayer(monster)) { quinoa.getMessageManager().addMessage("Plant seeds in fertile ground."); } } return true; case ItemClass.MOP: if(TerrainManager.hasParameter(terrain, TerrainParameter.HAS_MOSS)) { terrain.getParameters().Remove(TerrainParameter.HAS_MOSS); } if(terrain.getWater() > 0) { terrain.setWater(0); } if(TerrainManager.hasParameter(terrain, TerrainParameter.HAS_MUSHROOM_SPORES)) { terrain.getParameters().Remove(TerrainParameter.HAS_MUSHROOM_SPORES); } return false; default: return false; } }