Jump to content

LEX2 Evaluation Demo

reepblue

1,292 views

For the past few months, (on top of working on my greenlit mod) I've been developing a new foundation for Vectronic that will take care of all the 'internal yucky bits' such as window/context/world management, and other features and functions. I really wasn't happy how the first implementation came out as I felt like I was taking too much from the developer, and it was messy and confusing to do something simple like adding a loading screen.

 

LEX2 is more lua friendly, not bloated with scripts that you may or may not use, and has more comments than my Blue Portals 2 video in the code! You just need the executables, App.lua, and engine.pak which contains standard assets that the application will call if something is missing.

 

You can play with it here. I've used the latest beta with probes so if you don't have the probe beta, don't load map 07 I guess. Here are somethings you might notice looking at scripts or general usage.

 

 

Developer Console:

 

lex2eval1.jpg

 

LEX2 comes with a developer console for visually debugging your game while you play. Draw stats, show physics, show navigation, or change settings on the fly. All commands use the standard system properties.

 

lex2eval2.jpg

 

To access the console, the game must be started with -dev or launched from the editor. When the game is paused, it the tilde key (`) and start typing. Hit Enter to submit your command. You can use PageUp and PageDn to scroll through pass commands.

 

You can type 'help' to report a list of current commands. There is no display box, so it's best used when the game is windowed with the log from the script editor visible.

 

 

Asset Manager:

 

self.sound = Sound:Load(AssetManager:Check("Sound/MySound.wav))

 

Never crash again because you moved something or mistyped an asset. AssetManager:Check() returns a error asset from engine.pak if what you've sent is not found. The game will not start at all unless the error assets are found at startup.

 

You can also easily preload models for later use with AssetManager:Precache(string). You can also make a Precache list with AssetManager:PrecacheGlobal(string). This is great if you have a model or prefab that might spawn at anytime in any map.

 

 

PostStart():

 

PostStart is a command fired after the level loads instead of during it like Start does.

 

function Script:Start()
self.source = Source:Create()
self.source:SetVolume(self.volume/100)
self.source:SetPitch(self.pitch)
self.source:SetLoopMode(self.loop)
self.source:SetRange(self.range)
self.source:SetPosition(self.entity:GetPosition(true))
end

function Script:PostStart()
local sound = Sound:Load(AssetManager:Check(self.soundfile))
if sound~=nil then
self.source:SetSound(sound)
if self.playing==true and self.enabled==true then
self.source:Play()
end
sound:Release()
sound=nil
end
end

 

 

Input System:

 

if Input:Forward(true) then self.input[1]=self.input[1]+1 end
if Input:Backward(true) then self.input[1]=self.input[1]-1 end
if Input:Right(true) then self.input[0]=self.input[0]+1 end
if Input:Left(true) then self.input[0]=self.input[0]-1 end

 

You can now allow your player to change their controls. by calling a general function. Controls can be controlled with System:SetProperty or by editing settings.config. The control commands are based off of the default steam controller layout. I just need too add previous/next weapon, but wasn't 100% sure how I was gonna do that since it may be a scroll wheel.

 

 

Basic UI System:

 

Use Lua to create your own UI with LEX2's exposed UI classes. If you replace the app start and loop functions with this code, it'll make a square in the corner with a text button that says "Leadwerks".

 

--This function will be called once when the program starts
function App:Start()
Rect = UIRectangle:Create(4,4,200,200)
Rect:SetColor(40, 40, 40)
Rect:SetBorderLineWidth(4)
Rect:SetBorderColor(92, 92, 92)
Rect:EnableBorder(true)
Rect:Hide()
local testfont = Font:Load(AssetManager:Check("Fonts/consola.ttf"), 20)
Rect3 = UIText:Create(Rect:GetCenter().x, Rect:GetCenter().y, "Leadwerks", testfont, "Test");
Rect3:Center();
Rect3:SetShadowMode(false)
Rect3:SetAsInteractive(true)
Rect:AddChild(Rect3);
return true
end
--This is our main program loop and will be called continuously until the program ends
function App:Loop()
context:SetBlendMode(Blend.Alpha)
-- Here is code to darken the scene when the game is paused.
if self:IsPaused() and self:IsConnected() then
context:SetColor(0,0,0,0.5)
context:DrawRect(0,0,context:GetWidth(),context:GetHeight())
end

Rect:Update()
if (Rect3:GetMouseEvent() == Rect3.MouseLeftUp) then
System:Print("Pressed!")
elseif(Rect3:GetMouseEvent() == Rect3.MouseOver) then
Rect3:SetColor(100, 100, 100)
elseif (Rect3:GetMouseEvent() == Rect3.MouseLeftDown) then
Rect3:SetColor(80, 80, 80)
else
Rect3:SetColor(255, 255, 255)
end

if window:KeyHit(Key.F11) then
if (Rect:IsVisible()) then
Rect:FadeOut()
else
Rect:FadeIn()
end
end

context:SetBlendMode(Blend.Solid)

return true
end

 

I haven't really did much with the UI as it's a future feature of the engine, plus I've been playing with other stuff. But with UIRectangle and UIText is pretty much the foundation of buttons, sliders and other stuff anyway. Or you can use another UI library if you want.

 

Again, you can play with it by downloading the project here:

https://dl.dropboxusercontent.com/u/16218991/Requests/LEX2Test.7z

 

I'm really stress testing it now making sure I don't have to touch anything when I'm ready to revist Vectronic. Speaking of Vectronic, it's almost been a year since I've released the demo. I might later this week write a blog about it and my battle plan for it.



1 Comment


Recommended Comments

I've been having a quick look at this, seems pretty solid. I liked the settings loading from the first version and the input system looks like a useful extension of it.

Share this comment


Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...