|
| 1 | +--@name NUCLEAR ROCKET LAUNCH |
| 2 | +--@author |
| 3 | +--@shared |
| 4 | + |
| 5 | + if SERVER then |
| 6 | + |
| 7 | + -- autowire screen |
| 8 | + if chip():isWeldedTo() ~= nil and chip():isWeldedTo():getClass() == 'starfall_screen' then chip():isWeldedTo():linkComponent(chip()) else error('Place on a starfall screen') end |
| 9 | + local screen, state, selectedplayer, missle = chip():isWeldedTo(), 'ready', owner() screen:setColor(Color(0,0,0,1)) |
| 10 | + local counter = 0 |
| 11 | + |
| 12 | + -- keyboard input => gmod_wire_keyboard |
| 13 | + local keyboard = prop.createSent(screen:localToWorld(Vector(screen:obbSize().x/2,0,10)), screen:localToWorldAngles(Angle(-55,0,0)), 'gmod_wire_keyboard', false, |
| 14 | + { |
| 15 | + AutoBuffer = true, |
| 16 | + EnterKeyAscii = true, |
| 17 | + Model = "models/beer/wiremod/keyboard.mdl", |
| 18 | + Synchronous = true |
| 19 | + }) keyboard:setParent(screen) |
| 20 | + |
| 21 | + -- keyboard input => gmod_wire_keyboard |
| 22 | + local button = prop.createSent(screen:localToWorld(Vector(screen:obbSize().x/2-10,-screen:obbSize().y/2+9,2)), screen:localToWorldAngles(Angle(0,0,0)), 'gmod_wire_button', false, |
| 23 | + { |
| 24 | + description = "NUKE!!!!!!!!!!!", |
| 25 | + entityout = false, |
| 26 | + Model = "models/cheeze/buttons2/up.mdl", |
| 27 | + toggle = false, |
| 28 | + value_off = 0, |
| 29 | + value_on = 1 |
| 30 | + }) button:setParent(screen) |
| 31 | + |
| 32 | + -- inputs for starfall and wiring |
| 33 | + wire.adjustInputs({'KEYINPUT', 'BUTTON'}, {'string', 'number'}) |
| 34 | + wire.create(chip(), keyboard, 'KEYINPUT', 'Output', 1, Color(0,0,0), 'cable/cable2') |
| 35 | + wire.create(chip(), button, 'BUTTON', 'Out', 1, Color(0,0,0), 'cable/cable2') |
| 36 | + |
| 37 | + -- make the holo launcher prop that the missle shoots out of |
| 38 | + local launcher = holograms.create(screen:localToWorld(Vector(-screen:obbSize().x,screen:obbSize().y/2-6,45)), screen:localToWorldAngles(Angle(-30,0,90)), 'models/sprops/misc/tubes/size_1/tube_12x42.mdl', Vector(1,2.5,1)) launcher:setParent(chip()) |
| 39 | + launcher:setMaterial('models/debug/debugwhite') launcher:setColor(Color(0,0,0)) launcher:suppressEngineLighting(true) |
| 40 | + |
| 41 | + hook.add('input', 'checknames', function(input, value) |
| 42 | + if input == 'KEYINPUT' and value ~= nil then |
| 43 | + net.start('getinput') |
| 44 | + net.writeString(value) |
| 45 | + local plys = find.playersByName(value, true, false) |
| 46 | + selectedplayer = plys[1] or owner() |
| 47 | + net.writeTable(plys) |
| 48 | + net.send() |
| 49 | + end |
| 50 | + |
| 51 | + if input == 'BUTTON' and value ~= nil and value == 1 then |
| 52 | + if state == 'ready' then |
| 53 | + |
| 54 | + missle = prop.create(launcher:localToWorld(Vector(0,140,0)), launcher:localToWorldAngles(Angle(0,90,0)), 'models/props_phx/amraam.mdl', false) |
| 55 | + missle:setTrails(15, 25, 1, 'trails/smoke', Color(155)) |
| 56 | + state = 'firing' |
| 57 | + |
| 58 | + end |
| 59 | + end |
| 60 | + end) |
| 61 | + |
| 62 | + -- interval |
| 63 | + timer.create('interval', 0.05, 0, function() |
| 64 | + |
| 65 | + if state == 'firing' and isValid(missle) then |
| 66 | + --print(counter) |
| 67 | + if counter + 0.025 > 1 then |
| 68 | + --print('breaking') |
| 69 | + counter = 0 |
| 70 | + state = 'ready' |
| 71 | + if not isValid(selectedplayer) then missle:setPos(Vector(0,0,0)) else missle:setPos(selectedplayer:getPos()) end |
| 72 | + missle:breakEnt() |
| 73 | + else |
| 74 | + --print('flying', selectedplayer) |
| 75 | + counter = counter + 0.025 |
| 76 | + if not isValid(selectedplayer) then counter = 1 return end |
| 77 | + local curve = math.bezierVector(counter, launcher:localToWorld(Vector(0,140,0)),launcher:localToWorld(Vector(0,1600,200)),selectedplayer:getPos()) |
| 78 | + local angCurve = math.bezierVector(counter+0.05, launcher:localToWorld(Vector(0,140,0)),launcher:localToWorld(Vector(0,1600,200)),selectedplayer:getPos()) |
| 79 | + missle:setPos(curve) |
| 80 | + missle:setAngles((angCurve-curve):getAngle()) |
| 81 | + end |
| 82 | + end |
| 83 | + end) |
| 84 | + |
| 85 | + end |
| 86 | + |
| 87 | + if CLIENT then |
| 88 | + |
| 89 | + local keyinput, foundplys, cursorPos = 'input name...', find.allPlayers(), {x = 0, y = 0} |
| 90 | + net.receive('getinput', function() |
| 91 | + keyinput = net.readString() |
| 92 | + foundplys = net.readTable() |
| 93 | + if keyinput == '' then keyinput = 'input name...' end |
| 94 | + if #foundplys < 1 then foundplys = {owner()} end |
| 95 | + end) |
| 96 | + |
| 97 | + local selectedplyfont = render.createFont("Arial",30,1000,false,false,true, false,0, false,0) |
| 98 | + local inputfont = render.createFont("Arial",20,900,false,false,true, false,0, false,0) |
| 99 | + local followupfont = render.createFont("Arial",25,900,false,false,true, false,0, false,0) |
| 100 | + render.setFont(inputfont) -- set the font |
| 101 | + |
| 102 | + hook.add('render', 'drawscreen', function() |
| 103 | + |
| 104 | + cursorPos.x, cursorPos.y = render.cursorPos(player()) |
| 105 | + |
| 106 | + render.setColor(Color(0,0,0,255)) |
| 107 | + render.drawRect(0,0,512,512) |
| 108 | + |
| 109 | + render.setColor(Color(50,100,200)) |
| 110 | + render.drawRectOutline(60,150,512-120,1) |
| 111 | + render.setColor(Color(255,255,255)) |
| 112 | + render.drawRectOutline(60,152,512-120,1) |
| 113 | + |
| 114 | + render.setColor(Color(255,255,255,55)) -- input text draw |
| 115 | + render.setFont(inputfont) |
| 116 | + render.drawText(80,80,keyinput or 'nil',0) |
| 117 | + |
| 118 | + if not isValid(foundplys[1]) then foundplys[1] = owner() end |
| 119 | + |
| 120 | + render.setColor(team.getColor(foundplys[1]:getTeam())) |
| 121 | + render.setFont(selectedplyfont) |
| 122 | + render.drawText(256,110,foundplys[1]:getName(),1) |
| 123 | + |
| 124 | + if #foundplys > 1 then |
| 125 | + render.setFont(followupfont) |
| 126 | + for k = 2, #foundplys do |
| 127 | + if k > 13 then break end |
| 128 | + if not isValid(foundplys[k]) then |
| 129 | + render.setColor(Color(255,255,255,55)) |
| 130 | + render.drawText(256,140+23*(k-1),'Player left!',1) |
| 131 | + else |
| 132 | + render.setColor(team.getColor(foundplys[k]:getTeam())-Color(0,0,0,220)) |
| 133 | + render.drawText(256,140+23*(k-1),foundplys[k]:getName(),1) |
| 134 | + end |
| 135 | + end |
| 136 | + else |
| 137 | + render.setColor(Color(255,255,255,85)) |
| 138 | + render.setFont(followupfont) |
| 139 | + render.drawText(256,180,'<No other players found!>',1) |
| 140 | + end |
| 141 | + |
| 142 | + render.setColor(Color(255, 255, 255)) |
| 143 | + render.drawRect(0,450,512,512) |
| 144 | + render.setColor(Color(50,100,200)) |
| 145 | + render.drawRectOutline(0,0,512,512) |
| 146 | + |
| 147 | + end) |
| 148 | + |
| 149 | + end |
0 commit comments