static HandlePhysics AnimalAIHandler(AnimalAI ai) { if (ai == AnimalAI.Fly) { return(BirdPhysics.Do); } if (ai == AnimalAI.FleeAir) { return((Level lvl, ref Check C) => HunterPhysics.DoFlee(lvl, ref C, Block.Air)); } else if (ai == AnimalAI.FleeWater) { return((Level lvl, ref Check C) => HunterPhysics.DoFlee(lvl, ref C, Block.Water)); } else if (ai == AnimalAI.FleeLava) { return((Level lvl, ref Check C) => HunterPhysics.DoFlee(lvl, ref C, Block.Lava)); } if (ai == AnimalAI.KillerAir) { return((Level lvl, ref Check C) => HunterPhysics.DoKiller(lvl, ref C, Block.Air)); } else if (ai == AnimalAI.KillerWater) { return((Level lvl, ref Check C) => HunterPhysics.DoKiller(lvl, ref C, Block.Water)); } else if (ai == AnimalAI.KillerLava) { return((Level lvl, ref Check C) => HunterPhysics.DoKiller(lvl, ref C, Block.Lava)); } return(null); }
internal static void SetupCorePhysicsHandlers() { physicsHandlers[Block.birdblack] = BirdPhysics.Do; physicsHandlers[Block.birdwhite] = BirdPhysics.Do; physicsHandlers[Block.birdlava] = BirdPhysics.Do; physicsHandlers[Block.birdwater] = BirdPhysics.Do; physicsHandlers[Block.birdred] = (Level lvl, ref Check C) => HunterPhysics.DoKiller(lvl, ref C, Block.air); physicsHandlers[Block.birdblue] = (Level lvl, ref Check C) => HunterPhysics.DoKiller(lvl, ref C, Block.air); physicsHandlers[Block.birdkill] = (Level lvl, ref Check C) => HunterPhysics.DoKiller(lvl, ref C, Block.air); physicsHandlers[Block.snaketail] = SnakePhysics.DoTail; physicsHandlers[Block.snake] = SnakePhysics.Do; physicsHandlers[Block.rockethead] = RocketPhysics.Do; physicsHandlers[Block.firework] = FireworkPhysics.Do; physicsHandlers[Block.zombiebody] = ZombiePhysics.Do; physicsHandlers[Block.zombiehead] = ZombiePhysics.DoHead; physicsHandlers[Block.creeper] = ZombiePhysics.Do; physicsHandlers[Block.fishbetta] = (Level lvl, ref Check C) => HunterPhysics.DoKiller(lvl, ref C, Block.water); physicsHandlers[Block.fishshark] = (Level lvl, ref Check C) => HunterPhysics.DoKiller(lvl, ref C, Block.water); physicsHandlers[Block.fishlavashark] = (Level lvl, ref Check C) => HunterPhysics.DoKiller(lvl, ref C, Block.lava); physicsHandlers[Block.fishgold] = (Level lvl, ref Check C) => HunterPhysics.DoFlee(lvl, ref C, Block.water); physicsHandlers[Block.fishsalmon] = (Level lvl, ref Check C) => HunterPhysics.DoFlee(lvl, ref C, Block.water); physicsHandlers[Block.fishsponge] = (Level lvl, ref Check C) => HunterPhysics.DoFlee(lvl, ref C, Block.water); physicsHandlers[Block.water] = SimpleLiquidPhysics.DoWater; physicsHandlers[Block.activedeathwater] = SimpleLiquidPhysics.DoWater; physicsHandlers[Block.lava] = SimpleLiquidPhysics.DoLava; physicsHandlers[Block.activedeathlava] = SimpleLiquidPhysics.DoLava; physicsHandlers[Block.WaterDown] = ExtLiquidPhysics.DoWaterfall; physicsHandlers[Block.LavaDown] = ExtLiquidPhysics.DoLavafall; physicsHandlers[Block.WaterFaucet] = (Level lvl, ref Check C) => ExtLiquidPhysics.DoFaucet(lvl, ref C, Block.WaterDown); physicsHandlers[Block.LavaFaucet] = (Level lvl, ref Check C) => ExtLiquidPhysics.DoFaucet(lvl, ref C, Block.LavaDown); physicsHandlers[Block.finiteWater] = FinitePhysics.DoWaterOrLava; physicsHandlers[Block.finiteLava] = FinitePhysics.DoWaterOrLava; physicsHandlers[Block.finiteFaucet] = FinitePhysics.DoFaucet; physicsHandlers[Block.magma] = ExtLiquidPhysics.DoMagma; physicsHandlers[Block.geyser] = ExtLiquidPhysics.DoGeyser; physicsHandlers[Block.lava_fast] = SimpleLiquidPhysics.DoFastLava; physicsHandlers[Block.fastdeathlava] = SimpleLiquidPhysics.DoFastLava; physicsHandlers[Block.air] = AirPhysics.DoAir; physicsHandlers[Block.dirt] = OtherPhysics.DoDirt; physicsHandlers[Block.leaf] = LeafPhysics.DoLeaf; physicsHandlers[Block.shrub] = OtherPhysics.DoShrub; physicsHandlers[Block.fire] = FirePhysics.Do; physicsHandlers[Block.lava_fire] = FirePhysics.Do; physicsHandlers[Block.sand] = OtherPhysics.DoFalling; physicsHandlers[Block.gravel] = OtherPhysics.DoFalling; physicsHandlers[Block.cobblestoneslab] = OtherPhysics.DoStairs; physicsHandlers[Block.staircasestep] = OtherPhysics.DoStairs; physicsHandlers[Block.wood_float] = OtherPhysics.DoFloatwood; physicsHandlers[Block.sponge] = (Level lvl, ref Check C) => OtherPhysics.DoSponge(lvl, ref C, false); physicsHandlers[Block.lava_sponge] = (Level lvl, ref Check C) => OtherPhysics.DoSponge(lvl, ref C, true); //Special blocks that are not saved physicsHandlers[Block.air_flood] = (Level lvl, ref Check C) => AirPhysics.DoFlood(lvl, ref C, AirFlood.Full, Block.air_flood); physicsHandlers[Block.air_flood_layer] = (Level lvl, ref Check C) => AirPhysics.DoFlood(lvl, ref C, AirFlood.Layer, Block.air_flood_layer); physicsHandlers[Block.air_flood_down] = (Level lvl, ref Check C) => AirPhysics.DoFlood(lvl, ref C, AirFlood.Down, Block.air_flood_down); physicsHandlers[Block.air_flood_up] = (Level lvl, ref Check C) => AirPhysics.DoFlood(lvl, ref C, AirFlood.Up, Block.air_flood_up); physicsHandlers[Block.smalltnt] = TntPhysics.DoSmallTnt; physicsHandlers[Block.bigtnt] = (Level lvl, ref Check C) => TntPhysics.DoLargeTnt(lvl, ref C, 1); physicsHandlers[Block.nuketnt] = (Level lvl, ref Check C) => TntPhysics.DoLargeTnt(lvl, ref C, 4); physicsHandlers[Block.tntexplosion] = TntPhysics.DoTntExplosion; physicsHandlers[Block.train] = TrainPhysics.Do; for (int i = 0; i < 256; i++) { //Adv physics updating anything placed next to water or lava if ((i >= Block.red && i <= Block.redmushroom) || i == Block.wood || i == Block.trunk || i == Block.bookcase) { physicsHandlers[i] = OtherPhysics.DoOther; continue; } if (Block.Props[i].ODoorId != Block.Invalid) { physicsHandlers[i] = DoorPhysics.oDoor; physicsDoorsHandlers[i] = DoorPhysics.oDoor; } } }