the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 206 lines 5.6 kB view raw
1#include "stdafx.h" 2#include "SurvivalMode.h" 3#include "DemoMode.h" 4#include "LevelRenderer.h" 5#include "LocalPlayer.h" 6#include "..\Minecraft.World\net.minecraft.world.level.h" 7#include "..\Minecraft.World\net.minecraft.world.level.tile.h" 8#include "..\Minecraft.World\net.minecraft.world.entity.player.h" 9#include "..\Minecraft.World\net.minecraft.world.item.h" 10#include "ClientConstants.h" 11 12SurvivalMode::SurvivalMode(Minecraft *minecraft) : GameMode(minecraft) 13{ 14 // 4J - added initialisers 15 xDestroyBlock = -1; 16 yDestroyBlock = -1; 17 zDestroyBlock = -1; 18 destroyProgress = 0; 19 oDestroyProgress = 0; 20 destroyTicks = 0; 21 destroyDelay = 0; 22 23 if (ClientConstants::IS_DEMO_VERSION) 24 { 25 if( dynamic_cast<DemoMode *>(this) == NULL ) 26 { 27 assert(false); 28// throw new IllegalStateException("Invalid game mode"); // 4J - removed 29 } 30 } 31} 32 33// 4J Stu - Added this ctor so we can exit the tutorial and replace it with a standard 34// survival mode 35SurvivalMode::SurvivalMode(SurvivalMode *copy) : GameMode( copy->minecraft ) 36{ 37 xDestroyBlock = copy->xDestroyBlock; 38 yDestroyBlock = copy->yDestroyBlock; 39 zDestroyBlock = copy->zDestroyBlock; 40 destroyProgress = copy->destroyProgress; 41 oDestroyProgress = copy->oDestroyProgress; 42 destroyTicks = copy->destroyTicks; 43 destroyDelay = copy->destroyDelay; 44} 45 46void SurvivalMode::initPlayer(shared_ptr<Player> player) 47{ 48 player->yRot = -180; 49} 50 51void SurvivalMode::init() 52{ 53} 54 55bool SurvivalMode::canHurtPlayer() 56{ 57 return true; 58} 59 60bool SurvivalMode::destroyBlock(int x, int y, int z, int face) 61{ 62 int t = minecraft->level->getTile(x, y, z); 63 int data = minecraft->level->getData(x, y, z); 64 bool changed = GameMode::destroyBlock(x, y, z, face); 65 66 shared_ptr<ItemInstance> item = minecraft->player->getSelectedItem(); 67 bool couldDestroy = minecraft->player->canDestroy(Tile::tiles[t]); 68 if (item != NULL) 69 { 70 item->mineBlock(t, x, y, z, minecraft->player); 71 if (item->count == 0) 72 { 73 minecraft->player->removeSelectedItem(); 74 } 75 } 76 if (changed && couldDestroy) 77 { 78 Tile::tiles[t]->playerDestroy(minecraft->level, minecraft->player, x, y, z, data); 79 } 80 return changed; 81 82} 83 84void SurvivalMode::startDestroyBlock(int x, int y, int z, int face) 85{ 86 if (!minecraft->player->mayBuild(x, y, z)) return; 87 minecraft->level->extinguishFire(minecraft->player, x, y, z, face); 88 int t = minecraft->level->getTile(x, y, z); 89 if (t > 0 && destroyProgress == 0) Tile::tiles[t]->attack(minecraft->level, x, y, z, minecraft->player); 90 if (t > 0 && Tile::tiles[t]->getDestroyProgress(minecraft->player) >= 1) 91 { 92 destroyBlock(x, y, z, face); 93 } 94} 95 96void SurvivalMode::stopDestroyBlock() 97{ 98 destroyProgress = 0; 99 destroyDelay = 0; 100} 101 102void SurvivalMode::continueDestroyBlock(int x, int y, int z, int face) 103{ 104 if (destroyDelay > 0) 105 { 106 destroyDelay--; 107 return; 108 } 109 if (x == xDestroyBlock && y == yDestroyBlock && z == zDestroyBlock) 110 { 111 int t = minecraft->level->getTile(x, y, z); 112 if (!minecraft->player->mayBuild(x, y, z)) return; 113 if (t == 0) return; 114 Tile *tile = Tile::tiles[t]; 115 116 destroyProgress += tile->getDestroyProgress(minecraft->player); 117 118 if (destroyTicks % 4 == 0) 119 { 120 if (tile != NULL) 121 { 122 minecraft->soundEngine->play(tile->soundType->getStepSound(), x + 0.5f, y + 0.5f, z + 0.5f, (tile->soundType->getVolume() + 1) / 8, tile->soundType->getPitch() * 0.5f); 123 } 124 } 125 126 destroyTicks++; 127 128 if (destroyProgress >= 1) 129 { 130 destroyBlock(x, y, z, face); 131 destroyProgress = 0; 132 oDestroyProgress = 0; 133 destroyTicks = 0; 134 destroyDelay = 5; 135 } 136 } 137 else 138 { 139 destroyProgress = 0; 140 oDestroyProgress = 0; 141 destroyTicks = 0; 142 xDestroyBlock = x; 143 yDestroyBlock = y; 144 zDestroyBlock = z; 145 } 146 147} 148 149void SurvivalMode::render(float a) 150{ 151 if (destroyProgress <= 0) 152 { 153 minecraft->gui->progress = 0; 154 minecraft->levelRenderer->destroyProgress = 0; 155 } 156 else 157 { 158 float dp = oDestroyProgress + (destroyProgress - oDestroyProgress) * a; 159 minecraft->gui->progress = dp; 160 minecraft->levelRenderer->destroyProgress = dp; 161 } 162} 163 164float SurvivalMode::getPickRange() 165{ 166 return 4.0f; 167} 168 169void SurvivalMode::initLevel(Level *level) 170{ 171 GameMode::initLevel(level); 172} 173 174shared_ptr<Player> SurvivalMode::createPlayer(Level *level) 175{ 176 shared_ptr<Player> player = GameMode::createPlayer(level); 177 // player.inventory.add(new ItemInstance(Item.pickAxe_diamond)); 178 // player.inventory.add(new ItemInstance(Item.hatchet_diamond)); 179 // player.inventory.add(new ItemInstance(Tile.torch, 64)); 180 // player.inventory.add(new ItemInstance(Item.porkChop_cooked, 4)); 181 // player.inventory.add(new ItemInstance(Item.bow, 1)); 182 // player.inventory.add(new ItemInstance(Item.arrow, 64)); 183 return player; 184} 185 186void SurvivalMode::tick() 187{ 188 oDestroyProgress = destroyProgress; 189 //minecraft->soundEngine->playMusicTick(); 190} 191 192bool SurvivalMode::useItemOn(shared_ptr<Player> player, Level *level, shared_ptr<ItemInstance> item, int x, int y, int z, int face, bool bTestUseOnOnly, bool *pbUsedItem) 193{ 194 int t = level->getTile(x, y, z); 195 if (t > 0) 196 { 197 if (Tile::tiles[t]->use(level, x, y, z, player)) return true; 198 } 199 if (item == NULL) return false; 200 return item->useOn(player, level, x, y, z, face); 201} 202 203bool SurvivalMode::hasExperience() 204{ 205 return true; 206}