From 57a0d286c17dcc71ca1e8334be192ee6539101ea Mon Sep 17 00:00:00 2001 From: ac-stef Date: Sun, 12 Apr 2015 00:11:08 +0200 Subject: [PATCH] automatic mapmodel menus auto-generate mapmodel menus depending on the actually available models in the current map config. Also fixes memory leak in "newmenu". DOCREF mapmodelname mapmodelbyname mapmodelchanged --- config/menus_edit.cfg | 532 +++++++++++++++++++------------------ source/src/menus.cpp | 45 ++-- source/src/rendermodel.cpp | 12 + 3 files changed, 309 insertions(+), 280 deletions(-) diff --git a/config/menus_edit.cfg b/config/menus_edit.cfg index 3dffda80..68200321 100644 --- a/config/menus_edit.cfg +++ b/config/menus_edit.cfg @@ -163,266 +163,6 @@ menuitemslider (_ [Blue pigment: ]) 1 255 "$bluew" 5 [] [ bluew = $arg1 ] menuitem [] -1 menuitem (concatword (c 2) [ ] "[ OK ]") [ watercolour $redw $greenw $bluew ] -//Mapmodels -newmenu Mapmodels - -menuitem (_ Platforms) [ showmenu Platforms ] -menuitem (_ [Ladders/Stairs]) [ showmenu Ladders/Stairs ] -menuitem (_ Fencing) [ showmenu Fencing ] -menuitem (_ Plants) [ showmenu Plants ] -menuitem (_ Lights) [ showmenu Lights ] -menuitem (_ Street) [ showmenu Street ] -menuitem (_ Pipes) [showmenu Pipes] -menuitem (_ Office) [ showmenu Office ] -menuitem (_ Computers) [ showmenu Computers ] -menuitem (_ Home) [ showmenu Home ] -menuitem (_ Industrial) [ showmenu Industrial ] -menuitem (_ Military) [ showmenu Military ] -menuitem (_ Signs) [ showmenu Signs ] -menuitem (_ Other) [ showmenu Other ] - -newmenu Platforms - -menuitem (_ [Bridge (8x8)]) [ saycommand "/newent mapmodel 1 " ] -menuitem (_ [Platform (8x8)]) [ saycommand "/newent mapmodel 57 " ] -menuitem (_ [Wire platform (8x8)]) [ saycommand "/newent mapmodel 73 " ] -menuitem (_ [Ledge (4x1)]) [ saycommand "/newent mapmodel 155 " ] -menuitem (_ [Ledge (8x1)]) [ saycommand "/newent mapmodel 156 " ] -menuitem (_ [Ledge (16x1)]) [ saycommand "/newent mapmodel 157 " ] -menuitem (_ [Ledge Corner]) [ saycommand "/newent mapmodel 158 " ] - - -newmenu Ladders/Stairs - -menuitem (_ [Single ladder rung (1)]) [ saycommand "/newent mapmodel 58 " ] -menuitem (_ [Ladder(7)]) [ newent mapmodel 2 ] -menuitem (_ [Ladder(8)]) [ newent mapmodel 3 ] -menuitem (_ [Ladder(10)]) [ newent mapmodel 4 ] -menuitem (_ [Ladder(11)]) [ newent mapmodel 5 ] -menuitem (_ [Ladder(15)]) [ newent mapmodel 6 ] -menuitem [] -1 -menuitem (_ [Hangable Ladder (2)]) [ saycommand "/newent mapmodel 136 " ] -menuitem (_ [Hangable Ladder (6)]) [ saycommand "/newent mapmodel 137 " ] -menuitem (_ [Hangable Ladder (Top, Over)]) [ saycommand "/newent mapmodel 138 " ] -menuitem (_ [Hangable Ladder (Top, Side)]) [ saycommand "/newent mapmodel 139 " ] -menuitem (_ [Hangable Ladder (Bottom)]) [ saycommand "/newent mapmodel 140 " ] -menuitem [] -1 -menuitem (_ [Wire stairs (Top)]) [ saycommand "/newent mapmodel 79 " ] -menuitem (_ [Wire stairs (Bottom)]) [ saycommand "/newent mapmodel 80 " ] - -newmenu Home -// Some of these models are doubled-up in the office menu. -menuitem (_ [Picture frame]) [ saycommand "/newent mapmodel 29 " ] -menuitem (_ Milk) [ newent mapmodel 69 ] -menuitem (_ [CRT TV]) [ newent mapmodel 86 ] -menuitem (_ [CRT TV in stand]) [ saycommand "/newent mapmodel 70 " ] -menuitem (_ [Plasma TV]) [ newent mapmodel 72 ] -menuitem (_ [Power meter]) [ newent mapmodel 74 ] -menuitem (_ Rack) [ newent mapmodel 75 ] -menuitem (_ [Utility table]) [ newent mapmodel 87 ] -menuitem (_ [Ceiling fan]) [ saycommand "/newent mapmodel 113 " ] -menuitem (_ Window) [ newent mapmodel 126 ] -menuitem (_ Shelf) [ newent mapmodel 128 ] -menuitem (_ [Wall switch]) [ saycommand "/newent mapmodel 150 " ] -menuitem (_ [Wall power outlet]) [ saycommand "/newent mapmodel 151 " ] - -newmenu Military - -menuitem (_ Bullet) [ newent mapmodel 61 ] -menuitem (_ [Shotgun shell]) [ newent mapmodel 78 ] -menuitem (_ Target) [ newent mapmodel 100 ] -menuitem (_ [Radar console]) [ newent mapmodel 76 ] -menuitem (_ [Razor wire]) [ newent mapmodel 116 ] -menuitem (_ [Guard tower]) [ newent mapmodel 129 ] [ echo (c 3) (_ [This mapmodel will need to be properly clipped!]) ] -menuitem (_ [Weapon rack]) [ newent mapmodel 183 ] - -newmenu Computers - -menuitem (_ Laptop) [ newent mapmodel 28 ] -menuitem (_ PC) [ newent mapmodel 101 ] -menuitem (_ [Computer interfaces]) [ newent mapmodel 65 ] -menuitem (_ [Communications rack]) [ newent mapmodel 63 ] -menuitem (_ [Communications rack 2]) [ newent mapmodel 64 ] -menuitem (_ [Server rack]) [ newent mapmodel 119 ] -menuitem (_ [Server cluster 1]) [ saycommand "/newent mapmodel 120 " ] -menuitem (_ [Server cluster 2]) [ saycommand "/newent mapmodel 121 " ] -menuitem (_ [Server cluster 3]) [ saycommand "/newent mapmodel 122 " ] -menuitem (_ [Server cluster 4]) [ saycommand "/newent mapmodel 123 " ] -menuitem (_ [Server cluster 5]) [ saycommand "/newent mapmodel 124 " ] -menuitem (_ [Server cluster 6]) [ saycommand "/newent mapmodel 125 " ] - -newmenu Street - -menuitem (_ [Park Bench]) [ newent mapmodel 9 ] -menuitem (_ Dumpster) [ newent mapmodel 10 ] -menuitem (_ Trashbag) [ newent mapmodel 84 ] -menuitem (_ Trashcan) [ newent mapmodel 85 ] -menuitem (_ Roadblock/Barrier) [ newent mapmodel 11 ] -menuitem (_ [Roadblock/Barrier 2]) [ newent mapmodel 12 ] -menuitem (_ [Barrier 3]) [ newent mapmodel 168 ] -menuitem (_ Cone) [ newent mapmodel 173 ] -menuitem (_ [Fallen cone]) [ newent mapmodel 174 ] -menuitem (_ [Wheel: Vertical]) [ newent mapmodel 88 ] -menuitem (_ [Tyre: Horizontal]) [ newent mapmodel 83 ] -menuitem (_ [Gray milk crate]) [ newent mapmodel 112 ] -menuitem (_ [Red milk crate]) [ newent mapmodel 134 ] -menuitem (_ [Blue milk crate]) [ newent mapmodel 135 ] -menuitem (_ [Car battery]) [ newent mapmodel 152 ] -menuitem (_ Antenna) [ newent mapmodel 153 ] -menuitem (_ [Hotel sign]) [ saycommand "/newent mapmodel 169 " ] -menuitem (_ [Fire alarm]) [ saycommand "/newent mapmodel 184 " ] -menuitem (_ [Electric box (1)]) [ newent mapmodel 186 ] -menuitem (_ [Electric box (2)]) [ newent mapmodel 187 ] - -const tree_warning (concatword (c 3) (_ [Trees are expensive mapmodels. Please only use a maximum of 1 or 2 in a map.])) - -newmenu Plants - -menuitem (_ [Grass 1]) [ newent mapmodel 17 ] -menuitem (_ [Grass 1 (Dry)]) [ newent mapmodel 18 ] -menuitem (_ [Grass 1 (Snow)]) [ newent mapmodel 19 ] -menuitem (_ [Grass 2]) [ newent mapmodel 20 ] -menuitem (_ [Grass 2 (Dry)]) [ newent mapmodel 21 ] -menuitem (_ [Grass 2 (Snow)]) [ newent mapmodel 22 ] -menuitem (_ [Plant 1]) [ newent mapmodel 23 ] -menuitem (_ [Plant 1 (Dry)]) [ newent mapmodel 24 ] -menuitem (_ [Plant 1 (Snow)]) [ newent mapmodel 25 ] -menuitem (_ [Tree trunk]) [ newent mapmodel 130 ] -menuitem (_ [Tree 1]) [ newent mapmodel 114 ] [ echo $tree_warning ] -menuitem (_ [Tree 2]) [ newent mapmodel 117 ] [ echo $tree_warning ] -menuitem (_ [Pine tree]) [ newent mapmodel 118 ] [ echo $tree_warning ] -menuitem (_ [Palm tree]) [ newent mapmodel 115 ] [ echo $tree_warning ] -menuitem (_ Bush) [newent mapmodel 170] -menuitem (_ [Small tree]) [newent mapmodel 171] -menuitem (_ Grasses) [newent mapmodel 172] - -newmenu Office - -menuitem (_ [Office chair]) [ newent mapmodel 27 ] -menuitem (_ Locker) [ newent mapmodel 30 ] -menuitem (_ [Air Conditioner (Outer)]) [ newent mapmodel 60 ] -menuitem (_ [Air Conditioner (Inner)]) [ newent mapmodel 107 ] -menuitem (_ [Office desk]) [ newent mapmodel 71 ] -menuitem (_ [Ceiling fan]) [ saycommand "/newent mapmodel 113 " ] -menuitem (_ [Wall switch]) [ saycommand "/newent mapmodel 150 " ] -menuitem (_ [Wall power outlet]) [ saycommand "/newent mapmodel 151 " ] -menuitem (_ Pinboard) [ saycommand "/newent mapmodel 154 " ] -menuitem (_ [Fire extinguisher]) [ newent mapmodel 175 ] -menuitem (_ [Fire extinguisher box]) [ newent mapmodel 182 ] -menuitem (_ [Dropped ceiling, frame]) [ saycommand "/newent mapmodel 177 " ] -menuitem (_ [Dropped ceiling, tiles]) [ saycommand "/newent mapmodel 178 " ] -menuitem (_ [Dropped ceiling, single]) [ saycommand "/newent mapmodel 179 " ] -menuitem (_ [Dropped ceiling, light 1]) [ saycommand "/newent mapmodel 180 " ] -menuitem (_ [Dropped ceiling, light 2]) [ saycommand "/newent mapmodel 181 " ] -menuitem (_ [World map]) [ saycommand "/newent mapmodel 185 " ] - -newmenu Pipes - -menuitem (_ [Large concrete pipe]) [ newent mapmodel 108 ] -menuitem (_ [Medium metal pipe]) [ newent mapmodel 109 ] -menuitem (_ [Small metal pipe]) [ newent mapmodel 110 ] -menuitem (_ Drainpipe) [ newent mapmodel 59 ] -menuitem (_ [Closed pipe, horz]) [ saycommand "/newent mapmodel 144" ] -menuitem (_ [Closed pipe, l-down]) [ saycommand "/newent mapmodel 145" ] -menuitem (_ [Closed pipe, l-left]) [ saycommand "/newent mapmodel 146" ] -menuitem (_ [Closed pipe, l-right]) [ saycommand "/newent mapmodel 147" ] -menuitem (_ [Closed pipe, l-up]) [ saycommand "/newent mapmodel 148" ] -menuitem (_ [Closed pipe, vert]) [ saycommand "/newent mapmodel 149" ] - -newmenu Lights - -menuitem (_ Strahler) [ saycommand /newent mapmodel 31 ] -menuitem (_ [Fluorescent lamp]) [ saycommand "/newent mapmodel 32 " ] -menuitem (_ LightBulb) [ saycommand "/newent mapmodel 33 " ] -menuitem (_ [Hanging lamp]) [ saycommand "/newent mapmodel 132 " ] -menuitem (_ [Alarm lamp]) [ saycommand "/newent mapmodel 141 " ] -menuitem (_ [Plate lamp]) [ saycommand "/newent mapmodel 142 " ] -menuitem (_ [Street light]) [ newent mapmodel 7 ] -menuitem (_ [Street light (2)]) [ newent mapmodel 143 ] - -newmenu Industrial - -menuitem (_ Barrel) [ newent mapmodel 34 ] -menuitem (_ [Knocked-over barrel]) [ newent mapmodel 35 ] -menuitem (_ [Electric meter]) [ newent mapmodel 36 ] -menuitem (_ Pallette) [ newent mapmodel 37 ] -menuitem (_ Gastank) [ newent mapmodel 38 ] -menuitem (_ [Grate (horizontal)]) [ newent mapmodel 39 ] -menuitem (_ [Grate (vertical)]) [ newent mapmodel 40 ] -menuitem (_ Wrench) [ newent mapmodel 41 ] -menuitem (_ Bolt) [ newent mapmodel 42 ] -menuitem (_ Hook) [ newent mapmodel 52 ] -menuitem (_ Cinderblock) [ newent mapmodel 62 ] -menuitem (_ [Radioactive drum]) [ newent mapmodel 81 ] -menuitem (_ [Knocked-over radioactive drum]) [ newent mapmodel 82 ] -menuitem (_ [Swiveling security camera]) [ saycommand "/newent mapmodel 77 " ] -menuitem (_ [Camera mount (Vertical)]) [ saycommand "/newent mapmodel 104 " ] -menuitem (_ [Camera mount (Wall)]) [ saycommand "/newent mapmodel 105 " ] -menuitem (_ [Vent flap]) [ newent mapmodel 133 ] -menuitem (_ [Pickaxe, horz]) [ newent mapmodel 164 ] -menuitem (_ [Pickaxe, vert]) [ newent mapmodel 165 ] -menuitem (_ [Shovel, vert]) [ newent mapmodel 188 ] -menuitem (_ [Shovel, free-standing]) [ newent mapmodel 189 ] -menuitem (_ [Shovel, horz]) [ newent mapmodel 190 ] - -newmenu Fencing - -menuitem (_ [Wire fence]) [ newent mapmodel 13 ] -menuitem (_ [Wire fencepost]) [ newent mapmodel 14 ] -menuitem (_ [Open wire fence-gate]) [ newent mapmodel 15 ] -menuitem (_ [Closed wire fence-gate]) [ newent mapmodel 16 ] -menuitem (_ [Barbwire fence-top]) [ newent mapmodel 127 ] -menuitem [] -1 -menuitem (_ [Corrugated fence]) [ newent mapmodel 102 ] -menuitem (_ [Corrugated fence 2]) [ newent mapmodel 103 ] -menuitem (_ [Corrugated fence post]) [ newent mapmodel 66 ] -menuitem [] -1 -menuitem (_ [Guard rail]) [ newent mapmodel 67 ] -menuitem (_ [Guard rail 2]) [ newent mapmodel 68 ] -menuitem (_ [Guard rail pole]) [ newent mapmodel 106 ] - -newmenu Signs - -menuitem (_ Flammable) [ saycommand "/newent mapmodel 43 " ] -menuitem (_ [Speed Limit 5]) [ saycommand "/newent mapmodel 44 " ] -menuitem (_ Maintenance) [ saycommand "/newent mapmodel 45 " ] -menuitem (_ Caution) [ saycommand "/newent mapmodel 46 " ] -menuitem (_ Biohazard) [ saycommand "/newent mapmodel 47 " ] -menuitem (_ Toxic) [ saycommand "/newent mapmodel 92 " ] -menuitem (_ [Biohazard (2)]) [ saycommand "/newent mapmodel 89 " ] -menuitem (_ Chemicals) [ saycommand "/newent mapmodel 90 " ] -menuitem (_ [Confined space]) [ saycommand "/newent mapmodel 91 " ] -menuitem (_ [Do not enter!]) [ saycommand "/newent mapmodel 93 " ] -menuitem (_ Explosives) [ saycommand "/newent mapmodel 94 " ] -menuitem (_ [First aid]) [ saycommand "/newent mapmodel 95 " ] -menuitem (_ [No entry]) [ saycommand "/newent mapmodel 96 " ] -menuitem (_ [No smoking]) [ saycommand "/newent mapmodel 97 " ] -menuitem (_ Radioactive) [ saycommand "/newent mapmodel 98 " ] -menuitem (_ [Restricted area]) [ saycommand "/newent mapmodel 99 " ] -menuitem (_ Arab) [ saycommand "/newent mapmodel 111 " ] -menuitem (_ [Wanted Poster]) [ saycommand "/newent mapmodel 55 " ] - -newmenu Other - -menuitem (_ Cigarette) [ newent mapmodel 48 ] -menuitem (_ Can) [ newent mapmodel 49 ] -menuitem (_ [Fallen Can]) [ newent mapmodel 50 ] -menuitem (_ [Broken Wood]) [ newent mapmodel 51 ] -menuitem (_ Coffee) [ newent mapmodel 53 ] -menuitem (_ Flyer) [ newent mapmodel 54 ] -menuitem (_ [Tree Flyer]) [ newent mapmodel 26 ] -menuitem (_ [Potato box]) [ newent mapmodel 56 ] -menuitem (_ [Cardboard box]) [ newent mapmodel 131 ] -menuitem (_ [Chinese take-out]) [ newent mapmodel 159 ] -menuitem (_ [Plastic bottle]) [ newent mapmodel 160 ] -menuitem (_ [Squashed plastic bottle]) [ newent mapmodel 161 ] -menuitem (_ [Plastic bag, white]) [ newent mapmodel 162 ] -menuitem (_ [Plastic bag, yellow]) [ newent mapmodel 163 ] -menuitem (_ [Newspaper (1)]) [ newent mapmodel 166 ] -menuitem (_ [Newspaper (2)]) [ newent mapmodel 167 ] -menuitem (_ Paintcan) [ newent mapmodel 176 ] - - newmenu [Ambient sounds] menuinit [ ambientsoundmenu = [] ] @@ -491,4 +231,276 @@ menuitemcheckbox (_ [Enable auto save map: ]) "$autosavemap" [ autosavemap = $ar menuitemslider (_ [Time between auto saves (in minutes): ]) 2 60 "(div $timeBetAutoSaves 60000)" 1 [] [ timeBetAutoSaves = (* $arg1 60000) ] menuitemtextinput (_ [Make a map backup (.BAK) every: ]) "$numAutoSaveBackups" [ numAutoSaveBackups = $arg1 ] [ if (! $showedBAKinfo) [ echo This setting effects the number of autosavemaps between making a map backup file. "(.BAK)"; showedBAKinfo = 1 ] ] 4 +//Mapmodels +newmenu Mapmodels +menuinit __rebuildmapmodelmenus + +tempalias __mapmodelmenulist [ + Platforms "" "" + "Bridge (8x8)" _1 makke/platform_bridge + "Platform (8x8)" _1 makke/platform + "Wire platform (8x8)" _1 toca/platformmet + "Ledge (4x1)" _1 toca/ledge/1_4cbs + "Ledge (8x1)" _1 toca/ledge/2_8cbs + "Ledge (16x1)" _1 toca/ledge/3_16cbs + "Ledge Corner" _1 toca/ledge/4_corner + Ladders/Stairs "" "" + "Single ladder rung (1)" _1 makke/ladder_1x + "Ladder(7)" _0 makke/ladder_7x + "Ladder(8)" _0 makke/ladder_8x + "Ladder(10)" _0 makke/ladder_10x + "Ladder(11)" _0 makke/ladder_11x + "Ladder(15)" _0 makke/ladder_15x + "" _0 -- + "Hangable Ladder (2)" _1 misterfloppy/hanging_ladder/ladder_2 + "Hangable Ladder (6)" _1 misterfloppy/hanging_ladder/ladder_6 + "Hangable Ladder (Top, Over)" _1 misterfloppy/hanging_ladder/ladder_top + "Hangable Ladder (Top, Side)" _1 misterfloppy/hanging_ladder/ladder_up + "Hangable Ladder (Bottom)" _1 misterfloppy/hanging_ladder/ladder_low + "" _0 -- + "Wire stairs (Top)" _1 toca/stairs1 + "Wire stairs (Bottom)" _1 toca/stairs2 + Fencing "" "" + "Wire fence" _0 makke/fence_chainlink + "Wire fencepost" _0 makke/fence_chainlink_post + "Open wire fence-gate" _0 makke/fence_chainlink_no_gate + "Closed wire fence-gate" _0 makke/fence_chainlink_closed_gate + "Barbwire fence-top" _0 toca/barbwire + "" _0 -- + "Corrugated fence" _0 toca/corrugated/fence1 + "Corrugated fence 2" _0 toca/corrugated/fence2 + "Corrugated fence post" _0 toca/corrugated/beam + "" _0 -- + "Guard rail" _0 toca/guardrail + "Guard rail 2" _0 toca/guardrail2 + "Guard rail pole" _0 toca/guardrail2/gr2pole + Plants "" "" + "Grass 1" _0 makke/grass_short + "Grass 1 (Dry)" _0 makke/grass_short_dry + "Grass 1 (Snow)" _0 makke/grass_short_snow + "Grass 2" _0 makke/grass_long + "Grass 2 (Dry)" _0 makke/grass_long_dry + "Grass 2 (Snow)" _0 makke/grass_long_snow + "Plant 1" _0 makke/plant_leafy + "Plant 1 (Dry)" _0 makke/plant_leafy_dry + "Plant 1 (Snow)" _0 makke/plant_leafy_snow + "Tree trunk" _0 toca/treetrunk1 + "Tree 1" _2 toca/tree1 + "Tree 2" _2 toca/tree2 + "Pine tree" _2 toca/pine + "Palm tree" _2 toca/palmtree1 + "Bush" _0 toca/plants/bush + "Small tree" _0 toca/plants/smaltree + "Grasses" _0 toca/plants/grass + Lights "" "" + "Strahler" _1 makke/wall_spotlight + "Fluorescent lamp" _1 makke/fluorescent_lamp + "LightBulb" _1 makke/lightbulb + "Hanging lamp" _1 jcdpc/hanginglamp + "Alarm lamp" _1 misterfloppy/alarmlamp + "Plate lamp" _1 misterfloppy/platelamp + "Street light" _0 makke/street_light + "Street light (2)" _0 misterfloppy/streetlamp + Street "" "" + "Park Bench" _0 makke/bench_seat + "Dumpster" _0 makke/dumpster + "Trashbag" _0 toca/trashbag + "Trashcan" _0 toca/trashcan + "Roadblock/Barrier" _0 makke/roadblock + "Roadblock/Barrier 2" _0 makke/roadblock_graffiti + "Barrier 3" _0 toca/cautionsign + "Cone" _0 cleaner/traffic_cones/up + "Fallen cone" _0 cleaner/traffic_cones/down + "Wheel: Vertical" _0 toca/wheel + "Tyre: Horizontal" _0 toca/tyre + "Gray milk crate" _0 toca/milkcrate + "Red milk crate" _0 ratboy/toca_milkcrate_red + "Blue milk crate" _0 ratboy/toca_milkcrate_blue + "Car battery" _0 toca/carbattery + "Antenna" _0 toca/antenna + "Hotel sign" _1 cleaner/hotel_sign + "Fire alarm" _1 cleaner/alarm_bell + "Electric box (1)" _0 cleaner/elecbox/elecbox1 + "Electric box (2)" _0 cleaner/elecbox/elecbox2 + Pipes "" "" + "Large concrete pipe" _0 toca/pipes/concretepipe + "Medium metal pipe" _0 toca/pipes/metalpipe + "Small metal pipe" _0 toca/pipes/metalpipe2 + "Drainpipe" _0 makke/drainpipe + "Closed pipe, horz" _1 toca/pipes/industrialpipes/horz + "Closed pipe, l-down" _1 toca/pipes/industrialpipes/ldwn + "Closed pipe, l-left" _1 toca/pipes/industrialpipes/lleft + "Closed pipe, l-right" _1 toca/pipes/industrialpipes/lright + "Closed pipe, l-up" _1 toca/pipes/industrialpipes/lup + "Closed pipe, vert" _1 toca/pipes/industrialpipes/vert + Office "" "" + "Office chair" _0 makke/office_chair + "Locker" _0 makke/locker + "Air Conditioner (Outer)" _0 toca/airconditioner + "Air Conditioner (Inner)" _0 toca/airconditioner/interior + "Office desk" _0 toca/officedesk + "Ceiling fan" _1 toca/ceilingfan + "Wall switch" _1 toca/electric/switch + "Wall power outlet" _1 toca/electric/outlet + "Pinboard" _1 toca/pinboard + "Fire extinguisher" _0 cleaner/extinguisher + "Fire extinguisher box" _0 cleaner/extinguisher_box + "Dropped ceiling, frame" _1 toca/droppedceiling/frame + "Dropped ceiling, tiles" _1 toca/droppedceiling/tiles + "Dropped ceiling, single" _1 toca/droppedceiling/single + "Dropped ceiling, light 1" _1 toca/droppedceiling/light1 + "Dropped ceiling, light 2" _1 toca/droppedceiling/light2 + "World map" _1 cleaner/worldmap + Computers "" "" + "Laptop" _0 jcdpc/laptop + "PC" _0 toca/computer/pc + "Computer interfaces" _0 toca/computer/monkeymou + "Communications rack" _0 toca/commrack + "Communications rack 2" _0 toca/commrack2 + "Server rack" _0 toca/servercluster/rack + "Server cluster 1" _1 toca/servercluster/U3_1 + "Server cluster 2" _1 toca/servercluster/U3_2 + "Server cluster 3" _1 toca/servercluster/U3_3 + "Server cluster 4" _1 toca/servercluster/U6_1 + "Server cluster 5" _1 toca/servercluster/U6_2 + "Server cluster 6" _1 toca/servercluster/U6_3 + Home "" "" + "Picture frame" _1 makke/picture + "Milk" _0 toca/milkcarton + "CRT TV" _0 toca/tv + "CRT TV in stand" _1 toca/monitor + "Plasma TV" _0 toca/plasmatv + "Power meter" _0 toca/powermeter + "Rack" _0 toca/rack + "Utility table" _0 toca/utilitytable + "Ceiling fan" _1 toca/ceilingfan + "Window" _0 toca/window1 + "Shelf" _0 toca/shelf + "Wall switch" _1 toca/electric/switch + "Wall power outlet" _1 toca/electric/outlet + Industrial "" "" + "Barrel" _0 makke/barrel + "Knocked-over barrel" _0 makke/barrel_fallen + "Electric meter" _0 makke/electric_meter + "Pallette" _0 makke/pallet + "Gastank" _0 makke/fuel_tank + "Grate (horizontal)" _0 cleaner/grates/grate_hor + "Grate (vertical)" _0 cleaner/grates/grate_vert + "Wrench" _0 makke/wrench + "Bolt" _0 makke/bolt_nut + "Hook" _0 makke/hook + "Cinderblock" _0 toca/cinderblock + "Radioactive drum" _0 toca/radioactivedrum + "Knocked-over radioactive drum" _0 toca/radioactivedrum2 + "Swiveling security camera" _1 toca/securitycam/secucam + "Camera mount (Vertical)" _1 toca/securitycam/vertmount + "Camera mount (Wall)" _1 toca/securitycam/wallmount + "Vent flap" _0 jcdpc/ventflap + "Pickaxe, horz" _0 toca/pickaxe/horz + "Pickaxe, vert" _0 toca/pickaxe/vert + "Shovel, vert" _0 cleaner/shovels/shovel1 + "Shovel, free-standing" _0 cleaner/shovels/shovel2 + "Shovel, horz" _0 cleaner/shovels/shovel3 + Military "" "" + "Bullet" _0 toca/bullet + "Shotgun shell" _0 toca/sgshell + "Target" _0 toca/signs/target + "Radar console" _0 toca/radarconsole + "Razor wire" _0 toca/razorwire + "Guard tower" _0 toca/guardtower + "Weapon rack" _0 cleaner/laundry + Signs "" "" + "Flammable" _1 makke/signs/flammable + "Speed Limit 5" _1 makke/signs/speed + "Maintenance" _1 makke/signs/caution_maintainence + "Caution" _1 makke/signs/caution_voltage + "Biohazard" _1 makke/signs/biohazard + "Toxic" _1 toca/signs/toxic + "Biohazard (2)" _1 toca/signs/biohazard + "Chemicals" _1 toca/signs/chemical + "Confined space" _1 toca/signs/confined + "Do not enter!" _1 toca/signs/donotenter + "Explosives" _1 toca/signs/explosives + "First aid" _1 toca/signs/firstaid + "No entry" _1 toca/signs/noentry + "No smoking" _1 toca/signs/nosmoking + "Radioactive" _1 toca/signs/radioactive + "Restricted area" _1 toca/signs/restricted + "Arab" _1 makke/signs/arab + "Wanted Poster" _1 makke/signs/wanted + Other "" "" + "Cigarette" _0 makke/cigarette + "Can" _0 makke/coke_can + "Fallen Can" _0 makke/coke_can_fallen + "Broken Wood" _0 makke/broken_wood + "Coffee" _0 makke/coffee_mug + "Flyer" _0 makke/flyer_propaganda + "Tree Flyer" _0 makke/flyer_environmental + "Potato box" _0 makke/aardapple_enginebox + "Cardboard box" _0 toca/cardboardbox + "Chinese take-out" _0 toca/takeoutbox + "Plastic bottle" _0 toca/plasticbottles/1 + "Squashed plastic bottle" _0 toca/plasticbottles/2 + "Plastic bag, white" _0 toca/plasticbags/1 + "Plastic bag, yellow" _0 toca/plasticbags/2 + "Newspaper (1)" _0 toca/newspaper/1 + "Newspaper (2)" _0 toca/newspaper/2 + "Paintcan" _0 toca/paintcan +] + +tempalias __treewarning [echo "\f3Trees are expensive mapmodels. Please don't use more than one or two in a map."] +tempalias __mm_unassigned [echo (yellow) sry: mapmodel (addpunct $arg1) has no slot assigned. Please edit your map config file.] +tempalias __mm_showmodel [concat chmenumdl $arg1 $arg2 all 40 3] + +tempalias __rebuildmapmodelmenus [ + if $mapmodelchanged [ + push __mm_menus [] + looplist $__mapmodelmenulist [title cmd path] [if (&& (! (strlen $path)) (< (findlist $__mm_menus $title) 0)) [__mm_menus = (concat $__mm_menus $title)]] + delmenu Mapmodels + newmenu Mapmodels + looplist $__mm_menus m [menuitem $m (concat showmenu $m) ; delmenu $m] + push _0 [concat newent mapmodel $arg1] + push _1 [concat saycommand (addpunct (concat /newent mapmodel $arg1))] + push _2 [concat __treewarning [;] newent mapmodel $arg1] + push __mm_done "" + push menu "" + push idxs "" + looplist $__mapmodelmenulist [title cmd path] [ + if (! (strlen $path)) [ + menu = $title + newmenu $menu + ][ + if (strlen $title) [ + path = (concatword "mapmodels/" $path) + idxs = (mapmodelbyname $path) + if (listlen $idxs) [ + __mm_done = (concat $__mm_done $idxs) + if (> (listlen $idxs) 1) [ + looplist $idxs i [menuitem (concat $title (concatword "#" $i)) (cmd $i) (__mm_showmodel $menu $path)] // several slots for the same mapmodel + ][ + menuitem $title (cmd $idxs) (__mm_showmodel $menu $path) // usual case: one slot per model + ] + ][ + menuitem (concatword "\f4" $title) (concat __mm_unassigned $path) (__mm_showmodel $menu $path) // mapmodel has no slot assigned + ] + ][ + menuitem [] -1 (concat chmenumdl $menu) // blank line + ] + ] + ] + push __mm_unsorted 0 + delmenu Unsorted + newmenu Unsorted + loop i 256 [ + if (&& (< (findlist $__mm_done $i) 0) (strlen (mapmodelname $i))) [ + menuitem (format "%1 #%2" (mapmodelname $i) $i) (_1 $i) (__mm_showmodel Unsorted (mapmodelname $i)) + __mm_unsorted = 1 + ] + ] + if $__mm_unsorted [newmenu Mapmodels ; menuitem Unsorted "showmenu Unsorted"] + pop menu __mm_menus _0 _1 _2 __mm_done __mm_unsorted idxs + mapmodelchanged 0 + ] +] + persistidents 1 diff --git a/source/src/menus.cpp b/source/src/menus.cpp index ee50aa6b..db37130b 100644 --- a/source/src/menus.cpp +++ b/source/src/menus.cpp @@ -813,25 +813,29 @@ struct mitemcheckbox : mitem void *addmenu(const char *name, const char *title, bool allowinput, void (__cdecl *refreshfunc)(void *, bool), bool (__cdecl *keyfunc)(void *, int, bool, int), bool hotkeys, bool forwardkeys) { - name = newstring(name); - gmenu &menu = menus[name]; - menu.name = name; - menu.title = title; - menu.header = menu.footer = NULL; - menu.menusel = 0; - menu.mdl = NULL; - menu.allowinput = allowinput; - menu.inited = false; - menu.hotkeys = hotkeys; - menu.refreshfunc = refreshfunc; - menu.keyfunc = keyfunc; - menu.initaction = NULL; - menu.usefont = NULL; - menu.allowblink = false; - menu.dirlist = NULL; - menu.forwardkeys = forwardkeys; - lastmenu = &menu; - return &menu; + gmenu *m = menus.access(name); + if(!m) + { + name = newstring(name); + m = &menus[name]; + m->name = name; + m->initaction = NULL; + m->header = m->footer = NULL; + } + m->title = title; + m->menusel = 0; + m->mdl = NULL; + m->allowinput = allowinput; + m->inited = false; + m->hotkeys = hotkeys; + m->refreshfunc = refreshfunc; + m->keyfunc = keyfunc; + m->usefont = NULL; + m->allowblink = false; + m->dirlist = NULL; + m->forwardkeys = forwardkeys; + lastmenu = m; + return m; } void newmenu(char *name, int *hotkeys, int *forwardkeys) @@ -1199,9 +1203,10 @@ void rendermenumdl() glScalef(1, -1, 1); bool isplayermodel = !strncmp(m.mdl, "playermodels", strlen("playermodels")); + bool isweapon = !strncmp(m.mdl, "weapons", strlen("weapons")); vec pos; - if(isplayermodel) pos = vec(2.0f, 1.2f, -0.4f); + if(!isweapon) pos = vec(2.0f, 1.2f, -0.4f); else pos = vec(2.0f, 0, 1.7f); float yaw = 1.0f; diff --git a/source/src/rendermodel.cpp b/source/src/rendermodel.cpp index a74f7004..e4899cf1 100644 --- a/source/src/rendermodel.cpp +++ b/source/src/rendermodel.cpp @@ -86,6 +86,8 @@ void mdlcachelimit(int *limit) COMMAND(mdlcachelimit, "i"); +VAR(mapmodelchanged, 0, 0, 1); + vector mapmodels; void mapmodel(int *rad, int *h, int *zoff, char *snap, char *name) @@ -96,11 +98,13 @@ void mapmodel(int *rad, int *h, int *zoff, char *snap, char *name) mmi.zoff = *zoff; mmi.m = NULL; formatstring(mmi.name)("mapmodels/%s", name); + mapmodelchanged = 1; } void mapmodelreset() { if(execcontext==IEXC_MAPCFG) mapmodels.shrink(0); + mapmodelchanged = 1; } mapmodelinfo &getmminfo(int i) { return mapmodels.inrange(i) ? mapmodels[i] : *(mapmodelinfo *)0; } @@ -108,6 +112,14 @@ mapmodelinfo &getmminfo(int i) { return mapmodels.inrange(i) ? mapmodels[i] : *( COMMAND(mapmodel, "iiiss"); COMMAND(mapmodelreset, ""); +COMMANDF(mapmodelname, "i", (int *idx) { result(mapmodels.inrange(*idx) ? mapmodels[*idx].name : ""); }); +COMMANDF(mapmodelbyname, "s", (char *name) +{ + string res = ""; + loopv(mapmodels) if(!strcmp(name, mapmodels[i].name)) concatformatstring(res, "%s%d", *res ? " " : "", i); + result(res); +}); + hashtable mdllookup; hashtable mdlnotfound;