forked from mirrors/principia
Cleanup and minor refactoring in model.cc/hh
This commit is contained in:
parent
89ea9eebbd
commit
a9fffcd18f
3 changed files with 386 additions and 391 deletions
|
|
@ -1693,7 +1693,7 @@ static int initial_loader(int step) {
|
|||
mesh_factory::init_models();
|
||||
|
||||
char msg[128];
|
||||
snprintf(msg, 127, "Loading model %d/%d", cur_mesh+1, NUM_MODELS);
|
||||
snprintf(msg, 127, "Loading model %d/%d", mesh_factory::cur_mesh+1, NUM_MODELS);
|
||||
P.s_loading_screen->set_text(msg);
|
||||
} break;
|
||||
|
||||
|
|
@ -1706,7 +1706,7 @@ static int initial_loader(int step) {
|
|||
}
|
||||
|
||||
char msg[128];
|
||||
snprintf(msg, 127, "Loading model %d/%d", cur_mesh+1, NUM_MODELS);
|
||||
snprintf(msg, 127, "Loading model %d/%d", mesh_factory::cur_mesh+1, NUM_MODELS);
|
||||
P.s_loading_screen->set_text(msg);
|
||||
|
||||
if (ret) {
|
||||
|
|
|
|||
751
src/model.cc
751
src/model.cc
|
|
@ -7,319 +7,320 @@
|
|||
struct tms_model *model_misc[NUM_MISC_MODELS];
|
||||
int cur_model = 0;
|
||||
|
||||
#define MODEL_CACHE_VERSION 34
|
||||
#define cache_path_VERSION 34
|
||||
|
||||
static int i1o1_shift_i = 1;
|
||||
static int i2o1_shift_i = 1;
|
||||
static int cpad_shift_i = 1;
|
||||
|
||||
#define PATH(x) "data/models/" x ".3ds"
|
||||
struct model_load_data mesh_factory::models[NUM_MODELS] = {
|
||||
{"data/models/plank1.3ds"},
|
||||
{"data/models/plank2.3ds"},
|
||||
{"data/models/plank3.3ds"},
|
||||
{"data/models/plank4.3ds"},
|
||||
{"data/models/thinplank1.3ds"},
|
||||
{"data/models/thinplank2.3ds"},
|
||||
{"data/models/thinplank3.3ds"},
|
||||
{"data/models/thinplank4.3ds"},
|
||||
{"data/models/splank.3ds"},
|
||||
{"data/models/splank1.3ds"},
|
||||
{"data/models/splank2.3ds"},
|
||||
{"data/models/splank3.3ds"},
|
||||
{"data/models/splank_front.3ds"},
|
||||
{"data/models/splank_back.3ds"},
|
||||
{"data/models/impact1.3ds"},
|
||||
{"data/models/impact2.3ds"},
|
||||
{"data/models/impact3.3ds"},
|
||||
{"data/models/impact4.3ds"},
|
||||
{"data/models/field1.3ds"},
|
||||
{"data/models/field2.3ds"},
|
||||
{"data/models/field3.3ds"},
|
||||
{"data/models/field4.3ds"},
|
||||
{"data/models/room.3ds"},
|
||||
{"data/models/room_corner_1.3ds"},
|
||||
{"data/models/room_corner_2.3ds"},
|
||||
{"data/models/room_corner_3.3ds"},
|
||||
{"data/models/room_corner_4.3ds"},
|
||||
{"data/models/arm_shotgun.3ds"},
|
||||
{"data/models/arm_bomber.3ds"},
|
||||
{"data/models/arm_bomber_chamber.3ds"},
|
||||
{"data/models/arm_railgun.3ds"},
|
||||
{"data/models/diamond.3ds"},
|
||||
{"data/models/ruby.3ds"},
|
||||
{"data/models/stone.3ds"},
|
||||
{"data/models/weight.3ds"},
|
||||
{"data/models/separator.3ds"},
|
||||
{"data/models/robot.3ds"},
|
||||
{"data/models/robot_gunarm.3ds"},
|
||||
{"data/models/robot_dragarm.3ds"},
|
||||
{"data/models/robot_head.3ds"},
|
||||
{"data/models/robot_body.3ds"},
|
||||
{"data/models/robot_back.3ds"},
|
||||
{"data/models/robot_front.3ds"},
|
||||
{"data/models/feet_frame.3ds"},
|
||||
{"data/models/bot.3ds"},
|
||||
{"data/models/spikebot-2.3ds"},
|
||||
{"data/models/minibot.3ds"},
|
||||
{"data/models/bomber.3ds"},
|
||||
{"data/models/sphere.3ds"},
|
||||
{"data/models/sphere2.3ds"},
|
||||
{"data/models/sphere3.3ds"},
|
||||
{"data/models/generator.3ds"},
|
||||
{"data/models/battery3v.3ds"},
|
||||
{"data/models/wmotor.3ds"},
|
||||
{"data/models/flatmotor.3ds"},
|
||||
{"data/models/simplemotor.3ds"},
|
||||
{"data/models/gear0.3ds"},
|
||||
{"data/models/gear1.3ds"},
|
||||
{"data/models/gear2.3ds"},
|
||||
{"data/models/gear3.3ds"},
|
||||
{"data/models/trampolinebase.3ds"},
|
||||
{"data/models/trampolinepad.3ds"},
|
||||
{"data/models/plug.simple.3ds"},
|
||||
{"data/models/plug.simple.low.3ds"},
|
||||
{"data/models/plug.male.3ds"},
|
||||
{"data/models/plug.female.3ds"},
|
||||
{"data/models/plug.transmitter.3ds"},
|
||||
{"data/models/c_ifplug.male.3ds"},
|
||||
{"data/models/c_ifplug.female.3ds"},
|
||||
{"data/models/script.3ds"},
|
||||
{"data/models/sticky.3ds"},
|
||||
{"data/models/breadboard.3ds"},
|
||||
{"data/models/motor.3ds"},
|
||||
{"data/models/wheel.3ds"},
|
||||
{"data/models/cup.3ds"},
|
||||
{"data/models/cylinder05.3ds"},
|
||||
{"data/models/cylinder1.3ds"},
|
||||
{"data/models/cylinder1.5.3ds"},
|
||||
{"data/models/cylinder2.3ds"},
|
||||
{"data/models/wallthing00.3ds"},
|
||||
{"data/models/wallthing0.3ds"},
|
||||
{"data/models/wallthing1.3ds"},
|
||||
{"data/models/wallthing2.3ds"},
|
||||
{"data/models/joint.3ds"},
|
||||
{"data/models/plate.3ds"},
|
||||
{"data/models/platejoint_damaged.3ds"},
|
||||
{"data/models/pivotjoint.3ds"},
|
||||
{"data/models/corner.3ds"},
|
||||
{"data/models/panel.big.3ds"},
|
||||
{"data/models/panel.medium.3ds"},
|
||||
{"data/models/panel.small.3ds"},
|
||||
{"data/models/switch.3ds"},
|
||||
{"data/models/robotman.3ds"},
|
||||
{"data/models/magnet.3ds"},
|
||||
{"data/models/railstraight.3ds"},
|
||||
{"data/models/railturn.3ds"},
|
||||
{"data/models/railskewed.3ds"},
|
||||
{"data/models/railskewed2.3ds"},
|
||||
{"data/models/gyroscope.3ds"},
|
||||
{"data/models/tiltmeter.3ds"},
|
||||
{"data/models/lmotor0.3ds"},
|
||||
{"data/models/lmotor1.3ds"},
|
||||
{"data/models/lmotor2.3ds"},
|
||||
{"data/models/lmotor3.3ds"},
|
||||
{"data/models/lmotor0_r.3ds"},
|
||||
{"data/models/lmotor1_r.3ds"},
|
||||
{"data/models/lmotor2_r.3ds"},
|
||||
{"data/models/lmotor3_r.3ds"},
|
||||
{"data/models/magplug.3ds"},
|
||||
{"data/models/magsocket.3ds"},
|
||||
{"data/models/fifo.3ds"},
|
||||
{"data/models/seesaw.3ds"},
|
||||
{"data/models/pivot.3ds"},
|
||||
{"data/models/anchor.3ds"},
|
||||
{"data/models/limb.3ds"},
|
||||
{"data/models/bullet.3ds"},
|
||||
{"data/models/missile.3ds"},
|
||||
{"data/models/ropeend.3ds"},
|
||||
{"data/models/pipeline.base.3ds"},
|
||||
{"data/models/pipeline.piston.3ds"},
|
||||
{"data/models/pipeline.house.3ds"},
|
||||
{"data/models/clip.3ds"},
|
||||
{"data/models/cclip.3ds"},
|
||||
{"data/models/landmine.3ds"},
|
||||
{"data/models/gearbox.3ds"},
|
||||
{"data/models/box_notex.3ds"},
|
||||
{"data/models/box_tex.3ds"},
|
||||
{"data/models/tribox_tex0.3ds"},
|
||||
{"data/models/tribox_tex1.3ds"},
|
||||
{"data/models/tribox_tex2.3ds"},
|
||||
{"data/models/tribox_tex3.3ds"},
|
||||
{"data/models/gb.axle.3ds"},
|
||||
{"data/models/gb.4.3ds"},
|
||||
{"data/models/gb.6.3ds"},
|
||||
{"data/models/gb.8.3ds"},
|
||||
{"data/models/gb.10.3ds"},
|
||||
{"data/models/gb.12.3ds"},
|
||||
{"data/models/controller.mini.3ds"},
|
||||
{"data/models/controller.pass.3ds"},
|
||||
{"data/models/controller.servo.3ds"},
|
||||
{"data/models/controller.fplus.3ds"},
|
||||
{"data/models/damper_0.3ds"},
|
||||
{"data/models/damper_1.3ds"},
|
||||
{"data/models/display.3ds"},
|
||||
{"data/models/display_active.3ds"},
|
||||
{"data/models/crane.3ds"},
|
||||
{"data/models/border-new.3ds"},
|
||||
{"data/models/scanner.3ds"},
|
||||
{"data/models/mirror.3ds"},
|
||||
{"data/models/lasersensor.3ds"},
|
||||
{"data/models/rocket.3ds"},
|
||||
{"data/models/thruster.3ds"},
|
||||
{"data/models/bomb.3ds"},
|
||||
{"data/models/plasma_gun_inner.3ds"},
|
||||
{"data/models/plasma_gun.3ds"},
|
||||
{"data/models/tesla_gun.3ds"},
|
||||
{"data/models/mega_buster.3ds"},
|
||||
{"data/models/arm_rocket_launcher.3ds"},
|
||||
{"data/models/btn.3ds"},
|
||||
{"data/models/btn_switch.3ds"},
|
||||
{"data/models/proximity.3ds"},
|
||||
{"data/models/gameman.3ds"},
|
||||
{"data/models/debris.3ds"},
|
||||
{"data/models/box1.3ds"},
|
||||
{"data/models/box2.3ds"},
|
||||
{"data/models/debugger_0.3ds"},
|
||||
{"data/models/debugger_1.3ds"},
|
||||
{"data/models/graph.3ds"},
|
||||
{"data/models/estabilizer.3ds"},
|
||||
{"data/models/factory_generic.3ds"},
|
||||
{"data/models/factory_robot.3ds"},
|
||||
{"data/models/factory_armory.3ds"},
|
||||
{"data/models/factory_oil_mixer.3ds"},
|
||||
{"data/models/repair_station.3ds"},
|
||||
{"data/models/ladder.3ds"},
|
||||
{"data/models/jetpack.3ds"},
|
||||
{"data/models/advanced_jetpack.3ds"},
|
||||
{"data/models/pig.3ds"},
|
||||
{"data/models/cow.3ds"},
|
||||
{"data/models/cow_head.3ds"},
|
||||
{"data/models/pig_head.3ds"},
|
||||
{"data/models/leaves1.3ds"},
|
||||
{"data/models/emitter.3ds"},
|
||||
{"data/models/emitter_frame.3ds"},
|
||||
{"data/models/miniemitter.3ds"},
|
||||
{"data/models/rubberend.3ds"},
|
||||
{"data/models/i0o1.3ds"},
|
||||
{"data/models/i0o2.3ds"},
|
||||
{"data/models/i0o3.3ds"},
|
||||
{"data/models/i1o0.3ds"},
|
||||
{"data/models/i1o2.3ds"},
|
||||
{"data/models/i1o3.3ds"},
|
||||
{"data/models/i1o4.3ds"},
|
||||
{"data/models/i1o8.3ds"},
|
||||
{"data/models/i2o0.3ds"},
|
||||
{"data/models/i2o2.3ds"},
|
||||
{"data/models/i3o1.3ds"},
|
||||
{"data/models/i4o0.3ds"},
|
||||
{"data/models/i4o1.3ds"},
|
||||
{"data/models/pointer_body.3ds"},
|
||||
{"data/models/pointer_arrow.3ds"},
|
||||
{"data/models/dragfield.3ds"},
|
||||
{"data/models/gravity.3ds"},
|
||||
{"data/models/gravityset.3ds"},
|
||||
{"data/models/spikes.3ds"},
|
||||
{"data/models/backpack.3ds"},
|
||||
{"data/models/adamper.3ds"},
|
||||
{"data/models/checkpoint.3ds"},
|
||||
{"data/models/fan.3ds"},
|
||||
{"data/models/fan_blades.3ds"},
|
||||
{"data/models/transmitter.3ds"},
|
||||
{"data/models/barrel.3ds"},
|
||||
{"data/models/heisenberg.3ds"},
|
||||
{"data/models/wizardhat.3ds"},
|
||||
{"data/models/ninjahelmet.3ds"},
|
||||
{"data/models/robe.3ds"},
|
||||
{"data/models/suctioncup.3ds"},
|
||||
{"data/models/canister.3ds"},
|
||||
{"data/models/oilrig.3ds"},
|
||||
{"data/models/conveyor0.3ds"},
|
||||
{"data/models/conveyor1.3ds"},
|
||||
{"data/models/conveyor2.3ds"},
|
||||
{"data/models/conveyor3.3ds"},
|
||||
{"data/models/conveyor4.3ds"},
|
||||
{"data/models/conveyor5.3ds"},
|
||||
{"data/models/robot_head_inside.3ds"},
|
||||
{"data/models/conicalhat.3ds"},
|
||||
{"data/models/ostrich.3ds"},
|
||||
{"data/models/ostrich_head.3ds"},
|
||||
{"data/models/policehat.3ds"},
|
||||
{"data/models/circuit.3ds"},
|
||||
{"data/models/oilbarrel.3ds"},
|
||||
{"data/models/canister_armour.3ds"},
|
||||
{"data/models/canister_speed.3ds"},
|
||||
{"data/models/canister_jump.3ds"},
|
||||
{"data/models/ore.3ds"},
|
||||
{"data/models/ore_inside.3ds"},
|
||||
{"data/models/ore2.3ds"},
|
||||
{"data/models/ore2_inside.3ds"},
|
||||
{"data/models/vendor.3ds"},
|
||||
{"data/models/treasurechest.3ds"},
|
||||
{"data/models/builder.3ds"},
|
||||
{"data/models/miner.3ds"},
|
||||
{"data/models/factionwand.3ds"},
|
||||
{"data/models/boltset_steel.3ds"},
|
||||
{"data/models/boltset_wood.3ds"},
|
||||
{"data/models/boltset_titanium.3ds"},
|
||||
{"data/models/boltset_diamond.3ds"},
|
||||
{"data/models/lobber.3ds"},
|
||||
{"data/models/spikeball.3ds"},
|
||||
{"data/models/guardpoint.3ds"},
|
||||
{"data/models/stone1.3ds"},
|
||||
{"data/models/stone2.3ds"},
|
||||
{"data/models/stone3.3ds"},
|
||||
{"data/models/stone4.3ds"},
|
||||
{"data/models/stone5.3ds"},
|
||||
{"data/models/stone6.3ds"},
|
||||
{"data/models/mushroom1.3ds"},
|
||||
{"data/models/mushroom2.3ds"},
|
||||
{"data/models/mushroom3.3ds"},
|
||||
{"data/models/mushroom4.3ds"},
|
||||
{"data/models/mushroom5.3ds"},
|
||||
{"data/models/mushroom6.3ds"},
|
||||
{"data/models/leaves2.3ds"},
|
||||
{"data/models/leaves3.3ds"},
|
||||
{"data/models/sign1.3ds"},
|
||||
{"data/models/sign2.3ds"},
|
||||
{"data/models/sign3.3ds"},
|
||||
{"data/models/sign4.3ds"},
|
||||
{"data/models/wood.3ds"},
|
||||
{"data/models/fence.3ds"},
|
||||
{"data/models/tophat.3ds"},
|
||||
{"data/models/compressor.3ds"},
|
||||
{"data/models/compressor_lamp1.3ds"},
|
||||
{"data/models/compressor_lamp2.3ds"},
|
||||
{"data/models/compressor_lamp3.3ds"},
|
||||
{"data/models/compressor_lamp4.3ds"},
|
||||
{"data/models/ladder_step.3ds"},
|
||||
{"data/models/kingscrown.3ds"},
|
||||
{"data/models/dummy_head.3ds"},
|
||||
{"data/models/statue_head.3ds"},
|
||||
{"data/models/jesterhat.3ds"},
|
||||
{"data/models/woodsword.3ds"},
|
||||
{"data/models/hammer.3ds"},
|
||||
{"data/models/witch_hat.3ds"},
|
||||
{"data/models/simple_axe.3ds"},
|
||||
{"data/models/saw1.3ds"},
|
||||
{"data/models/saw.3ds"},
|
||||
{"data/models/saw_blade.3ds"},
|
||||
{"data/models/spiked_club.3ds"},
|
||||
{"data/models/steel_sword.3ds"},
|
||||
{"data/models/baseballbat.3ds"},
|
||||
{"data/models/spear.3ds"},
|
||||
{"data/models/plant1.3ds"},
|
||||
{"data/models/plant2.3ds"},
|
||||
{"data/models/plant3.3ds"},
|
||||
{"data/models/plant4.3ds"},
|
||||
{"data/models/war_axe.3ds"},
|
||||
{"data/models/pixel_sword.3ds"},
|
||||
{"data/models/hard_hat.3ds"},
|
||||
{"data/models/serpent_sword.3ds"},
|
||||
{"data/models/pioneer_front.3ds"},
|
||||
{"data/models/pioneer_back.3ds"},
|
||||
{"data/models/vikinghelmet.3ds"},
|
||||
{"data/models/pickaxe.3ds"},
|
||||
{"data/models/i1o1.3ds"}, // MODEL_I1O1_EMPTY
|
||||
{PATH("plank1")},
|
||||
{PATH("plank2")},
|
||||
{PATH("plank3")},
|
||||
{PATH("plank4")},
|
||||
{PATH("thinplank1")},
|
||||
{PATH("thinplank2")},
|
||||
{PATH("thinplank3")},
|
||||
{PATH("thinplank4")},
|
||||
{PATH("splank")},
|
||||
{PATH("splank1")},
|
||||
{PATH("splank2")},
|
||||
{PATH("splank3")},
|
||||
{PATH("splank_front")},
|
||||
{PATH("splank_back")},
|
||||
{PATH("impact1")},
|
||||
{PATH("impact2")},
|
||||
{PATH("impact3")},
|
||||
{PATH("impact4")},
|
||||
{PATH("field1")},
|
||||
{PATH("field2")},
|
||||
{PATH("field3")},
|
||||
{PATH("field4")},
|
||||
{PATH("room")},
|
||||
{PATH("room_corner_1")},
|
||||
{PATH("room_corner_2")},
|
||||
{PATH("room_corner_3")},
|
||||
{PATH("room_corner_4")},
|
||||
{PATH("arm_shotgun")},
|
||||
{PATH("arm_bomber")},
|
||||
{PATH("arm_bomber_chamber")},
|
||||
{PATH("arm_railgun")},
|
||||
{PATH("diamond")},
|
||||
{PATH("ruby")},
|
||||
{PATH("stone")},
|
||||
{PATH("weight")},
|
||||
{PATH("separator")},
|
||||
{PATH("robot")},
|
||||
{PATH("robot_gunarm")},
|
||||
{PATH("robot_dragarm")},
|
||||
{PATH("robot_head")},
|
||||
{PATH("robot_body")},
|
||||
{PATH("robot_back")},
|
||||
{PATH("robot_front")},
|
||||
{PATH("feet_frame")},
|
||||
{PATH("bot")},
|
||||
{PATH("spikebot-2")},
|
||||
{PATH("minibot")},
|
||||
{PATH("bomber")},
|
||||
{PATH("sphere")},
|
||||
{PATH("sphere2")},
|
||||
{PATH("sphere3")},
|
||||
{PATH("generator")},
|
||||
{PATH("battery3v")},
|
||||
{PATH("wmotor")},
|
||||
{PATH("flatmotor")},
|
||||
{PATH("simplemotor")},
|
||||
{PATH("gear0")},
|
||||
{PATH("gear1")},
|
||||
{PATH("gear2")},
|
||||
{PATH("gear3")},
|
||||
{PATH("trampolinebase")},
|
||||
{PATH("trampolinepad")},
|
||||
{PATH("plug.simple")},
|
||||
{PATH("plug.simple.low")},
|
||||
{PATH("plug.male")},
|
||||
{PATH("plug.female")},
|
||||
{PATH("plug.transmitter")},
|
||||
{PATH("c_ifplug.male")},
|
||||
{PATH("c_ifplug.female")},
|
||||
{PATH("script")},
|
||||
{PATH("sticky")},
|
||||
{PATH("breadboard")},
|
||||
{PATH("motor")},
|
||||
{PATH("wheel")},
|
||||
{PATH("cup")},
|
||||
{PATH("cylinder05")},
|
||||
{PATH("cylinder1")},
|
||||
{PATH("cylinder1.5")},
|
||||
{PATH("cylinder2")},
|
||||
{PATH("wallthing00")},
|
||||
{PATH("wallthing0")},
|
||||
{PATH("wallthing1")},
|
||||
{PATH("wallthing2")},
|
||||
{PATH("joint")},
|
||||
{PATH("plate")},
|
||||
{PATH("platejoint_damaged")},
|
||||
{PATH("pivotjoint")},
|
||||
{PATH("corner")},
|
||||
{PATH("panel.big")},
|
||||
{PATH("panel.medium")},
|
||||
{PATH("panel.small")},
|
||||
{PATH("switch")},
|
||||
{PATH("robotman")},
|
||||
{PATH("magnet")},
|
||||
{PATH("railstraight")},
|
||||
{PATH("railturn")},
|
||||
{PATH("railskewed")},
|
||||
{PATH("railskewed2")},
|
||||
{PATH("gyroscope")},
|
||||
{PATH("tiltmeter")},
|
||||
{PATH("lmotor0")},
|
||||
{PATH("lmotor1")},
|
||||
{PATH("lmotor2")},
|
||||
{PATH("lmotor3")},
|
||||
{PATH("lmotor0_r")},
|
||||
{PATH("lmotor1_r")},
|
||||
{PATH("lmotor2_r")},
|
||||
{PATH("lmotor3_r")},
|
||||
{PATH("magplug")},
|
||||
{PATH("magsocket")},
|
||||
{PATH("fifo")},
|
||||
{PATH("seesaw")},
|
||||
{PATH("pivot")},
|
||||
{PATH("anchor")},
|
||||
{PATH("limb")},
|
||||
{PATH("bullet")},
|
||||
{PATH("missile")},
|
||||
{PATH("ropeend")},
|
||||
{PATH("pipeline.base")},
|
||||
{PATH("pipeline.piston")},
|
||||
{PATH("pipeline.house")},
|
||||
{PATH("clip")},
|
||||
{PATH("cclip")},
|
||||
{PATH("landmine")},
|
||||
{PATH("gearbox")},
|
||||
{PATH("box_notex")},
|
||||
{PATH("box_tex")},
|
||||
{PATH("tribox_tex0")},
|
||||
{PATH("tribox_tex1")},
|
||||
{PATH("tribox_tex2")},
|
||||
{PATH("tribox_tex3")},
|
||||
{PATH("gb.axle")},
|
||||
{PATH("gb.4")},
|
||||
{PATH("gb.6")},
|
||||
{PATH("gb.8")},
|
||||
{PATH("gb.10")},
|
||||
{PATH("gb.12")},
|
||||
{PATH("controller.mini")},
|
||||
{PATH("controller.pass")},
|
||||
{PATH("controller.servo")},
|
||||
{PATH("controller.fplus")},
|
||||
{PATH("damper_0")},
|
||||
{PATH("damper_1")},
|
||||
{PATH("display")},
|
||||
{PATH("display_active")},
|
||||
{PATH("crane")},
|
||||
{PATH("border-new")},
|
||||
{PATH("scanner")},
|
||||
{PATH("mirror")},
|
||||
{PATH("lasersensor")},
|
||||
{PATH("rocket")},
|
||||
{PATH("thruster")},
|
||||
{PATH("bomb")},
|
||||
{PATH("plasma_gun_inner")},
|
||||
{PATH("plasma_gun")},
|
||||
{PATH("tesla_gun")},
|
||||
{PATH("mega_buster")},
|
||||
{PATH("arm_rocket_launcher")},
|
||||
{PATH("btn")},
|
||||
{PATH("btn_switch")},
|
||||
{PATH("proximity")},
|
||||
{PATH("gameman")},
|
||||
{PATH("debris")},
|
||||
{PATH("box1")},
|
||||
{PATH("box2")},
|
||||
{PATH("debugger_0")},
|
||||
{PATH("debugger_1")},
|
||||
{PATH("graph")},
|
||||
{PATH("estabilizer")},
|
||||
{PATH("factory_generic")},
|
||||
{PATH("factory_robot")},
|
||||
{PATH("factory_armory")},
|
||||
{PATH("factory_oil_mixer")},
|
||||
{PATH("repair_station")},
|
||||
{PATH("ladder")},
|
||||
{PATH("jetpack")},
|
||||
{PATH("advanced_jetpack")},
|
||||
{PATH("pig")},
|
||||
{PATH("cow")},
|
||||
{PATH("cow_head")},
|
||||
{PATH("pig_head")},
|
||||
{PATH("leaves1")},
|
||||
{PATH("emitter")},
|
||||
{PATH("emitter_frame")},
|
||||
{PATH("miniemitter")},
|
||||
{PATH("rubberend")},
|
||||
{PATH("i0o1")},
|
||||
{PATH("i0o2")},
|
||||
{PATH("i0o3")},
|
||||
{PATH("i1o0")},
|
||||
{PATH("i1o2")},
|
||||
{PATH("i1o3")},
|
||||
{PATH("i1o4")},
|
||||
{PATH("i1o8")},
|
||||
{PATH("i2o0")},
|
||||
{PATH("i2o2")},
|
||||
{PATH("i3o1")},
|
||||
{PATH("i4o0")},
|
||||
{PATH("i4o1")},
|
||||
{PATH("pointer_body")},
|
||||
{PATH("pointer_arrow")},
|
||||
{PATH("dragfield")},
|
||||
{PATH("gravity")},
|
||||
{PATH("gravityset")},
|
||||
{PATH("spikes")},
|
||||
{PATH("backpack")},
|
||||
{PATH("adamper")},
|
||||
{PATH("checkpoint")},
|
||||
{PATH("fan")},
|
||||
{PATH("fan_blades")},
|
||||
{PATH("transmitter")},
|
||||
{PATH("barrel")},
|
||||
{PATH("heisenberg")},
|
||||
{PATH("wizardhat")},
|
||||
{PATH("ninjahelmet")},
|
||||
{PATH("robe")},
|
||||
{PATH("suctioncup")},
|
||||
{PATH("canister")},
|
||||
{PATH("oilrig")},
|
||||
{PATH("conveyor0")},
|
||||
{PATH("conveyor1")},
|
||||
{PATH("conveyor2")},
|
||||
{PATH("conveyor3")},
|
||||
{PATH("conveyor4")},
|
||||
{PATH("conveyor5")},
|
||||
{PATH("robot_head_inside")},
|
||||
{PATH("conicalhat")},
|
||||
{PATH("ostrich")},
|
||||
{PATH("ostrich_head")},
|
||||
{PATH("policehat")},
|
||||
{PATH("circuit")},
|
||||
{PATH("oilbarrel")},
|
||||
{PATH("canister_armour")},
|
||||
{PATH("canister_speed")},
|
||||
{PATH("canister_jump")},
|
||||
{PATH("ore")},
|
||||
{PATH("ore_inside")},
|
||||
{PATH("ore2")},
|
||||
{PATH("ore2_inside")},
|
||||
{PATH("vendor")},
|
||||
{PATH("treasurechest")},
|
||||
{PATH("builder")},
|
||||
{PATH("miner")},
|
||||
{PATH("factionwand")},
|
||||
{PATH("boltset_steel")},
|
||||
{PATH("boltset_wood")},
|
||||
{PATH("boltset_titanium")},
|
||||
{PATH("boltset_diamond")},
|
||||
{PATH("lobber")},
|
||||
{PATH("spikeball")},
|
||||
{PATH("guardpoint")},
|
||||
{PATH("stone1")},
|
||||
{PATH("stone2")},
|
||||
{PATH("stone3")},
|
||||
{PATH("stone4")},
|
||||
{PATH("stone5")},
|
||||
{PATH("stone6")},
|
||||
{PATH("mushroom1")},
|
||||
{PATH("mushroom2")},
|
||||
{PATH("mushroom3")},
|
||||
{PATH("mushroom4")},
|
||||
{PATH("mushroom5")},
|
||||
{PATH("mushroom6")},
|
||||
{PATH("leaves2")},
|
||||
{PATH("leaves3")},
|
||||
{PATH("sign1")},
|
||||
{PATH("sign2")},
|
||||
{PATH("sign3")},
|
||||
{PATH("sign4")},
|
||||
{PATH("wood")},
|
||||
{PATH("fence")},
|
||||
{PATH("tophat")},
|
||||
{PATH("compressor")},
|
||||
{PATH("compressor_lamp1")},
|
||||
{PATH("compressor_lamp2")},
|
||||
{PATH("compressor_lamp3")},
|
||||
{PATH("compressor_lamp4")},
|
||||
{PATH("ladder_step")},
|
||||
{PATH("kingscrown")},
|
||||
{PATH("dummy_head")},
|
||||
{PATH("statue_head")},
|
||||
{PATH("jesterhat")},
|
||||
{PATH("woodsword")},
|
||||
{PATH("hammer")},
|
||||
{PATH("witch_hat")},
|
||||
{PATH("simple_axe")},
|
||||
{PATH("saw1")},
|
||||
{PATH("saw")},
|
||||
{PATH("saw_blade")},
|
||||
{PATH("spiked_club")},
|
||||
{PATH("steel_sword")},
|
||||
{PATH("baseballbat")},
|
||||
{PATH("spear")},
|
||||
{PATH("plant1")},
|
||||
{PATH("plant2")},
|
||||
{PATH("plant3")},
|
||||
{PATH("plant4")},
|
||||
{PATH("war_axe")},
|
||||
{PATH("pixel_sword")},
|
||||
{PATH("hard_hat")},
|
||||
{PATH("serpent_sword")},
|
||||
{PATH("pioneer_front")},
|
||||
{PATH("pioneer_back")},
|
||||
{PATH("vikinghelmet")},
|
||||
{PATH("pickaxe")},
|
||||
{PATH("i1o1")}, // MODEL_I1O1_EMPTY
|
||||
{0, MODEL_I1O1_EMPTY, tvec2f(0.f, -.125f*i1o1_shift_i++)}, // MODEL_I1O1_INTEGER
|
||||
{0, MODEL_I1O1_EMPTY, tvec2f(0.f, -.125f*i1o1_shift_i++)}, // MODEL_I1O1_SQUARE
|
||||
{0, MODEL_I1O1_EMPTY, tvec2f(0.f, -.125f*i1o1_shift_i++)}, // MODEL_I1O1_SQRT
|
||||
|
|
@ -327,19 +328,19 @@ struct model_load_data mesh_factory::models[NUM_MODELS] = {
|
|||
{0, MODEL_I1O1_EMPTY, tvec2f(0.f, -.125f*i1o1_shift_i++)}, // MODEL_I1O1_BESSERWISSER
|
||||
{0, MODEL_I1O1_EMPTY, tvec2f(0.f, -.125f*i1o1_shift_i++)}, // MODEL_I1O1_EPSILON
|
||||
{0, MODEL_I1O1_EMPTY, tvec2f(0.f, -.125f*i1o1_shift_i++)}, // MODEL_I1O1_INVERT
|
||||
{"data/models/i2o1_empty.3ds"}, // MODEL_I2O1_EMPTY
|
||||
{"data/models/i2o1_1.3ds"}, // MODEL_I2O1_AND
|
||||
{"data/models/i2o1_2.3ds"}, // MODEL_I2O1_OR
|
||||
{"data/models/i2o1_3.3ds"}, // MODEL_I2O1_XOR
|
||||
{"data/models/i2o1_4.3ds"}, // MODEL_I2O1_NAND
|
||||
{"data/models/i2o1_5.3ds"}, // MODEL_I2O1_EQUAL
|
||||
{"data/models/i2o1_6.3ds"}, // MODEL_I2O1_LESS
|
||||
{"data/models/i2o1_7.3ds"}, // MODEL_I2O1_LESS_EQUAL
|
||||
{"data/models/i2o1_8.3ds"}, // MODEL_I2O1_SUM
|
||||
{"data/models/i2o1_9.3ds"}, // MODEL_I2O1_WRAP_ADD
|
||||
{"data/models/i2o1_10.3ds"}, // MODEL_I2O1_WRAP_SUB
|
||||
{"data/models/i2o1_11.3ds"}, // MODEL_I2O1_UNUSED
|
||||
{"data/models/cpad.3ds"},
|
||||
{PATH("i2o1_empty")}, // MODEL_I2O1_EMPTY
|
||||
{PATH("i2o1_1")}, // MODEL_I2O1_AND
|
||||
{PATH("i2o1_2")}, // MODEL_I2O1_OR
|
||||
{PATH("i2o1_3")}, // MODEL_I2O1_XOR
|
||||
{PATH("i2o1_4")}, // MODEL_I2O1_NAND
|
||||
{PATH("i2o1_5")}, // MODEL_I2O1_EQUAL
|
||||
{PATH("i2o1_6")}, // MODEL_I2O1_LESS
|
||||
{PATH("i2o1_7")}, // MODEL_I2O1_LESS_EQUAL
|
||||
{PATH("i2o1_8")}, // MODEL_I2O1_SUM
|
||||
{PATH("i2o1_9")}, // MODEL_I2O1_WRAP_ADD
|
||||
{PATH("i2o1_10")}, // MODEL_I2O1_WRAP_SUB
|
||||
{PATH("i2o1_11")}, // MODEL_I2O1_UNUSED
|
||||
{PATH("cpad")},
|
||||
// Different command pad variants, shift the texture used for each while reusing the model
|
||||
{0, MODEL_CPAD, tvec2f(0.f, (-1.f/16.f)*cpad_shift_i++)},
|
||||
{0, MODEL_CPAD, tvec2f(0.f, (-1.f/16.f)*cpad_shift_i++)},
|
||||
|
|
@ -358,44 +359,43 @@ struct model_load_data mesh_factory::models[NUM_MODELS] = {
|
|||
{0, MODEL_CPAD, tvec2f(0.f, (-1.f/16.f)*cpad_shift_i++)},
|
||||
{0, MODEL_CPAD, tvec2f(0.f, (-1.f/16.f)*cpad_shift_i++)}
|
||||
};
|
||||
#undef PATH
|
||||
|
||||
static char cache_path[512];
|
||||
static bool use_cache = false;
|
||||
int mesh_factory::cur_mesh = 0;
|
||||
|
||||
static bool
|
||||
open_cache(lvlbuf *lb)
|
||||
{
|
||||
char mesh_factory::cache_path[512];
|
||||
bool mesh_factory::use_cache = false;
|
||||
|
||||
bool mesh_factory::open_cache(lvlbuf *lb) {
|
||||
FILE *fp = fopen(cache_path, "rb");
|
||||
if (fp) {
|
||||
fseek(fp, 0, SEEK_END);
|
||||
long size = ftell(fp);
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
|
||||
lb->reset();
|
||||
lb->size = 0;
|
||||
lb->ensure((int)size);
|
||||
|
||||
fread(lb->buf, 1, size, fp);
|
||||
|
||||
fclose(fp);
|
||||
|
||||
lb->size = size;
|
||||
|
||||
return true;
|
||||
if (!fp) {
|
||||
tms_errorf("Unable to open cache_path %s", cache_path);
|
||||
return false;
|
||||
}
|
||||
|
||||
tms_errorf("Unable to open cache_path %s", cache_path);
|
||||
return false;
|
||||
fseek(fp, 0, SEEK_END);
|
||||
long size = ftell(fp);
|
||||
fseek(fp, 0, SEEK_SET);
|
||||
|
||||
lb->reset();
|
||||
lb->size = 0;
|
||||
lb->ensure((int)size);
|
||||
|
||||
fread(lb->buf, 1, size, fp);
|
||||
|
||||
fclose(fp);
|
||||
|
||||
lb->size = size;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
read_cache(lvlbuf *lb)
|
||||
{
|
||||
bool mesh_factory::read_cache(lvlbuf *lb) {
|
||||
uint8_t version = lb->r_uint8();
|
||||
uint32_t num_meshes = lb->r_uint32();
|
||||
uint32_t num_models = lb->r_uint32();
|
||||
|
||||
if (version != MODEL_CACHE_VERSION) {
|
||||
if (version != cache_path_VERSION) {
|
||||
tms_errorf("Mismatching version code in model cache.");
|
||||
return false;
|
||||
}
|
||||
|
|
@ -411,7 +411,7 @@ read_cache(lvlbuf *lb)
|
|||
}
|
||||
|
||||
char *data;
|
||||
for (int x=0; x<num_models; ++x) {
|
||||
for (int x = 0; x < num_models; ++x) {
|
||||
struct tms_model *m = (struct tms_model*)calloc(1, sizeof(struct tms_model));
|
||||
|
||||
uint32_t vertices_size = lb->r_uint32();
|
||||
|
|
@ -434,7 +434,7 @@ read_cache(lvlbuf *lb)
|
|||
|
||||
uint32_t num_meshes = lb->r_uint32();
|
||||
|
||||
for (int n=0; n<num_meshes; ++n) {
|
||||
for (int n = 0; n < num_meshes; ++n) {
|
||||
struct tms_mesh *mesh = tms_model_create_mesh(m);
|
||||
|
||||
mesh->id = lb->r_int32();
|
||||
|
|
@ -456,14 +456,12 @@ read_cache(lvlbuf *lb)
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
write_cache(lvlbuf *lb)
|
||||
{
|
||||
lb->w_s_uint8(MODEL_CACHE_VERSION);
|
||||
bool mesh_factory::write_cache(lvlbuf *lb) {
|
||||
lb->w_s_uint8(cache_path_VERSION);
|
||||
lb->w_s_uint32(NUM_MODELS);
|
||||
lb->w_s_uint32(NUM_MISC_MODELS);
|
||||
|
||||
for (int x=0; x<NUM_MISC_MODELS; ++x) {
|
||||
for (int x = 0; x < NUM_MISC_MODELS; ++x) {
|
||||
struct tms_model *m = model_misc[x];
|
||||
|
||||
lb->w_s_uint32(m->vertices->size);
|
||||
|
|
@ -492,23 +490,17 @@ write_cache(lvlbuf *lb)
|
|||
return true;
|
||||
}
|
||||
|
||||
static bool
|
||||
save_cache(lvlbuf *lb)
|
||||
{
|
||||
bool mesh_factory::save_cache(lvlbuf *lb) {
|
||||
FILE *fp = fopen(cache_path, "wb");
|
||||
if (fp) {
|
||||
fwrite(lb->buf, 1, lb->size, fp);
|
||||
fclose(fp);
|
||||
if (!fp)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
fwrite(lb->buf, 1, lb->size, fp);
|
||||
fclose(fp);
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
mesh_factory::init_models(void)
|
||||
{
|
||||
void mesh_factory::init_models() {
|
||||
snprintf(cache_path, 511, "%s/models.cache", tms_storage_cache_path());
|
||||
|
||||
GLuint err = glGetError();
|
||||
|
|
@ -571,9 +563,7 @@ mesh_factory::init_models(void)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
mesh_factory::upload_models(void)
|
||||
{
|
||||
void mesh_factory::upload_models() {
|
||||
tms_infof("Uploading models...");
|
||||
|
||||
for (int x=0; x<NUM_MISC_MODELS; ++x) {
|
||||
|
|
@ -591,21 +581,14 @@ mesh_factory::upload_models(void)
|
|||
|
||||
/* dump models to cache file */
|
||||
if (!write_cache(&lb)) {
|
||||
tms_errorf("An error occured while trying write model cache.");
|
||||
} else {
|
||||
if (!save_cache(&lb)) {
|
||||
tms_errorf("An error occured while trying to save model cache to a file. (not enough permission/disk space?)");
|
||||
}
|
||||
tms_errorf("An error occurred while trying to write model cache.");
|
||||
} else if (!save_cache(&lb)) {
|
||||
tms_errorf("An error occurred while trying to save model cache to a file. (not enough permission/disk space?)");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int cur_mesh = 0; /* extern */
|
||||
|
||||
/* Returns true if there are any more models to load */
|
||||
bool
|
||||
mesh_factory::load_next(void)
|
||||
{
|
||||
bool mesh_factory::load_next() {
|
||||
if (cur_mesh >= NUM_MODELS) return false;
|
||||
|
||||
struct model_load_data *mld = &mesh_factory::models[cur_mesh ++];
|
||||
|
|
@ -616,8 +599,8 @@ mesh_factory::load_next(void)
|
|||
if (mld->path) {
|
||||
mld->mesh = tms_model_load(model, mld->path, &status);
|
||||
} else {
|
||||
/* If the base mesh model and the current chosen model are not the same,
|
||||
* we will have to reload */
|
||||
// If the base mesh model and the current chosen model are not the same,
|
||||
// we will have to reload
|
||||
if (model != models[mld->base_id].model) {
|
||||
cur_mesh = mld->base_id;
|
||||
tms_warnf("Base mesh and shift-mesh model mismatch, reloading from base_mesh ID. (%d)", cur_mesh);
|
||||
|
|
@ -631,7 +614,7 @@ mesh_factory::load_next(void)
|
|||
mld->model = model;
|
||||
|
||||
if (model->vertices->size > 2000000) {
|
||||
/* We exceeded 2 mil vertices with this mesh, load it again into another model */
|
||||
// We exceeded 2 mil vertices with this mesh, load it again into another model
|
||||
++ cur_model;
|
||||
-- cur_mesh;
|
||||
}
|
||||
|
|
|
|||
30
src/model.hh
30
src/model.hh
|
|
@ -2,8 +2,6 @@
|
|||
|
||||
#include <tms/bindings/cpp/cpp.hh>
|
||||
|
||||
extern int cur_mesh;
|
||||
|
||||
enum {
|
||||
MODEL_PLANK1,
|
||||
MODEL_PLANK2,
|
||||
|
|
@ -362,17 +360,31 @@ struct model_load_data {
|
|||
struct tms_model *model;
|
||||
};
|
||||
|
||||
class mesh_factory
|
||||
{
|
||||
class lvlbuf;
|
||||
|
||||
class mesh_factory {
|
||||
private:
|
||||
static char cache_path[512];
|
||||
static bool use_cache;
|
||||
static bool open_cache(lvlbuf *lb);
|
||||
static bool read_cache(lvlbuf *lb);
|
||||
static bool write_cache(lvlbuf *lb);
|
||||
static bool save_cache(lvlbuf *lb);
|
||||
|
||||
public:
|
||||
static struct model_load_data models[NUM_MODELS];
|
||||
static int cur_mesh;
|
||||
|
||||
static inline struct tms_mesh *get_mesh(int model)
|
||||
{
|
||||
static inline struct tms_mesh *get_mesh(int model) {
|
||||
return mesh_factory::models[model].mesh;
|
||||
}
|
||||
|
||||
static void init_models(void);
|
||||
static bool load_next(void);
|
||||
static void upload_models(void);
|
||||
/// Initialise models, loading cached model data if it exists
|
||||
static void init_models();
|
||||
|
||||
/// Load the next model, return false if there are no more models to load
|
||||
static bool load_next();
|
||||
|
||||
/// Upload all loaded models to the GPU
|
||||
static void upload_models();
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue