Jump to content

Josh

Staff
  • Posts

    23,391
  • Joined

  • Last visited

Blog Entries posted by Josh

  1. Josh
    A new build is available on the beta branch:
    Reverted to Visual Studio 2015 for final release. Information on downgrading your 2017 projects can be found here.
    Added soft particle shader.
    Added smoke and soft smoke particle prefabs.
    Added SSR post-effect (by Igor, Shadmar, and myself).
    Added trigger material and updated doors example map.

  2. Josh
    A full update is available now on the beta branch.
     
    Leadwerks Game Engine 4.2 features:
    Visual Studio 2017 support
    Compatible with the latest C++11 / GCC on Linux
    Refraction and heat haze effects.
    Analytics through gameanalytics.com
    New animation commands
    Spotlight texture: you can add a material to a spotlight and the first texture will be rendered onto the light (for flashlights).
    New material blend mode can be used to make objects that only appear in editor.

     
    Analytics are available (thanks MartyJ for his help on this!), on Windows only at this time. These are the commands:

    class Analytics { static bool Enable() static void Disable() static void SetKeys(const std::string& gamekey, const std::string& secretkey) static bool SendGenericEvent(const std::string& eventid) static bool SendGenericEvent(const std::string& eventid, const float value) static bool SendErrorEvent(const std::string& severity, const std::string& message) static bool SendProgressEvent(const std::string& status, const std::string& levelname) static bool SendProgressEvent(const std::string& status, const std::string& levelname, const int score) static bool SendProgressEvent(const std::string& status, const std::string& levelname, const int score, const int attempt_num) static bool SendResourceEvent(const std::string& flowType, const std::string& currency, const std::string& itemType, const std::string& itemid, const float amount) static bool SendBusinessEvent(const std::string& itemType, const std::string& itemid, const int amount, const std::string& currency, const uint64_t transaction_num, const std::string& cart_type = "", const std::string& receipt_info="")
     
    I had it working, but I am getting a lot of "rejected events" on my server now, so there's probably something else I need to do.
     
    C++ projects with Visual Studio need the following changes. This is now a complete list of changes since 4.1, but this will accommodate the additional libraries needed for the new analytics features:
     
    The following libraries must be added to your project:
    libcryptoMT.lib
    libsslMT.lib
    Rpcrt4.lib
    crypt32.lib
    libcurl.lib

     
    The following header search paths must be added to your project:
    $(LeadwerksHeaderPath)\Libraries\openssl\include

  3. Josh
    A Steam client update has gone out which improves the checkout process in the Leadwerks Workshop Store. When the user clicks the "Buy" button in the editor, the item will now be opened in the Steam client for purchase. You do not have to log into the Steam website with a browser to purchase Workshop items anymore.
     
    You must opt into the beta branch of Leadwerks for this behavior to work. This will be the default when 4.2 is released.
     
    More information here:
    http://store.steampowered.com/news/26185/
  4. Josh
    I've been working to upgrade Leadwerks to the latest Newton Dynamics 3.14, and I want to change it so the engine imports Newton as a DLL. This will allow the Newton developer to debug some of my applications when needed.
     
    World Factions has raised an important bug / issue and this the best route to solve it.
     
    I've been tinkering with some improvements to some of the physics stuff with promising results, but it needs more work and I don't want to say anything else about it yet. If I can get it out in the next two weeks for version 4.2 I will, otherwise I will roll everything back.
  5. Josh
    I've added an optional radius for rectangle corners, for use with the DrawRect() command, along with a new gradient mode that uses a second color to draw a linear gradient on primitives. I like the interface for the program Vue, and I am modeling my default widget scripts after this style.
     

     
    Here it is rendered at 800% scale. This is rendered directly on a window and sub-pixel antialias is used (Microsoft ClearType):
     

     
    The appearance of the button widget at this point is something I would be happy releasing in a final product. Of course you can modify or replace this script to meet your own needs.
  6. Josh
    I've updated the beta branch with a full build to address the following issues:
    GI / water bug where everything would get brighter (the blend mode wasn't being reset to "solid").
    "Cannot blit backbuffer" bug fixed.
    VC .usr file added back into template, which contains info on the default working directory. This is why games weren't launching in the right directory.
    SDK version set to 8.1 since the 10 SDK isn't installing on Windows 7 (what I'm on now).

     
    FYI, I tested on an AMD card and there were not any AMD-related errors in the previous build.
  7. Josh
    I'm hoping to add analytics to both the editor and the engine API. I need to know how many people are actively using the engine on a week to week basis, and how many of those users are opening the Workshop browser in the editor. There will be an option to opt out of stats collection (a real one, not like Windows 10), and even if you do allow stats to be collected no data will be traceable back to your SteamID or IP address.
     
    I've chosen the GameAnalytics.com API for this.
     
    This will also be extremely useful to integrate into your games for testing. You can set up an event to send to your GameAnalytics account when a player completes an achievement. We could even add a script that does this that the flowgraph can trigger. If you look at your account and see that although 100 people played your game, only 3 of them were able to find the blue key, that tells you your game has a problem! I think this kind of data will be incredibly useful for you. It basically ensures that you're always running a focus group, without having to sit people down in real life and watch them play. Instead of just getting one person's random opinion, you can objectively see how changes to your game affect playability for all users.
     
    This is still in development, but I believe the process will be:
     
    1. Create a GameAnalytics.com account.
    2. Set your API key in the main script.
    3. Start sending events for anything important you want information on such as starting the game, completing a level, or achieving a task.
     

    --Public values Script.eventname="MyEvent"--string "Event Name" function Script:SendEvent()--in if type(self.eventname)==string and self.eventname~="" then Analytics:SendEvent(self.eventname) end end
     
    For standalone games, you should give your users an option to disable stats collection. The game launcher will have a global option built in that covers all games.
     
    Any thoughts on this?
  8. Josh
    An early build of Leadwerks Game Engine 4.2 beta is available on the beta branch on Steam. This release will update the engine with the latest C++ tools and add new graphics and other features.
    Visual Studio 2017 support
    Compatible with the latest C++11 / GCC on Linux
    Refraction: apply "Materials\Effects\glass.mat" onto any object to see this in action.
    Heat haze: drag the heat haze emitter prefab into the scene to view ("Prefabs\Effects\heathaze.pfb").
    Spotlight texture: you can add a material to a spotlight and the first texture will be rendered onto the light (for flashlights).
    New animation commands
    Analytics (not working yet)

     
    It's funny that transparency with refraction used to be explained in a
    12 minute tutorial (in Leadwerks Game Engine 2), and now it is a simple effect you can drag into the scene. 

     

     


  9. Josh
    I've built a modified version of ReepBlue's C++ animation manager class (based off my Lua script) into the engine. This adds a new command and eliminates the need for the animation manager script.
     

    void Entity::PlayAnimation(const std::string& sequence, const float speed=1.0f, const int blendtime=500, const int mode=0, const std::string endhook="") void Entity::PlayAnimation(const int index, const float speed = 1.0f, const int blendtime = 500, const int mode = 0, const std::string endhook = "")
     
    The animation manager only updates when the entity is drawn, so this does away with the most common use of the entity draw hook. This will make the engine a bit simpler to use, and existing code will still work as before.

    Usage in Lua
    Although the animation manager script has been removed from the default scripts, you do not need to modify your existing projects. 
    The AI, weapon, and animation scripts have been updated to use the built-in animation manager. Previously these scripts would create an AnimationManager lua table and call it like this:

    self.animationmanager:SetAnimationSequence("Idle",0.02)
     
    These calls now look like this:

    self.entity:PlayAnimation("Idle",0.02)
     
    One-shot animations that call a callback when the end of the sequence is reached used to look like this:

    self.animationmanager:SetAnimationSequence("Death",0.04,300,1,self,self.EndDeath)
     
    Now we just pass the function name in:

    self.entity:PlayAnimation("Death",0.04,300,1,"EndDeath"
     
    Again, as long as you have the old AnimationManager.lua script in your project, your existing scripts do not need to be updated.
     
    Animation callbacks are not yet supported in C++.
     
    This update will be available later today, for C++ and Lua, on all platforms.
  10. Josh
    C++11 modernizes the C++ programming language with many new features and techniques. Below are just a few of the new ways you can use C++ with Leadwerks.
     
    auto
    You can automatically declare a new variable type by the data that is assigned to it:

    auto i = 42; // i is an int auto l = 42LL; // l is an long long
    auto p = new foo(); // p is a foo*
     
    Here's a more practical use that saves a lot of typing. The code below:

    std::map<std::string, std::vector<int>> map; for (std::map<std::string, std::vector<int>>::iterator it = begin(map); it != end(map); ++it)
    {
    }
     
    Can be replaced with this:

    std::map<std::string, std::vector<int>> map; for (auto it = begin(map); it != end(map); ++it)
    {
    }
     
    std::next
    You can retrieve the nth element of a standard list with the new std::next function. For example, I use this internally in the engine to retrieve a spotlight or other entity by index:

    return *(std::next(spotlights.begin(), n));  
    Shared Pointers
    C++11 supports unique pointers, which are like regular pointers we use now. It also supports shared pointers, which use automatic reference counting, and weak pointers, which do not increment the object reference count. This basically provides built-in functionality similar to the reference counting system Leadwerks uses. Future major versions of the engine may make more heavy use of this feature.
     
    And one bonus feature: nullptr
    The new nullptr value is not interchangeable with NULL, which can convert to an integer. This makes it easier to specify that a value is supposed to be a pointer and that zero is not a valid input.
     
    You can read more about new C++11 tricks and features here.
  11. Josh
    The beta branch of the professional version is upgraded to use Visual Studio 2017. You can download the release candidate for free here:
    https://www.visualstudio.com/vs/visual-studio-2017-rc/
     
    Your existing projects should work with VS 2017 with no changes, but you might want to hold off while we test if you are in the middle of a project. New projects you create should open with VS 2017 by default.
     

  12. Josh
    Leadwerks Game Launcher can now be used on SteamOS. I fixed a bunch of little issues that were preventing this from running. The interface is not optimal right now for controllers, and there is much left to do, but your games do run. It's pretty fun to play your games on a console, when most of them were developed on Windows and never even run on Linux before.
     
    If you have a Steam Machine give it a try!
     

  13. Josh
    Valve has delivered on their plan to add a new Steam browser protocol for paid Workshop items. The Leadwerks Game Engine beta branch on Steam has been updated so that Workshop Store purchases go through the Steam client instead of requiring you to log into a web browser. You must also opt into the Steam client beta for this functionality to work. At the moment, this feature is only available on Windows.
     

     
    This removes the biggest source of friction in the checkout process and makes the Workshop Store more convenient to use. I've also found the cause of and fixed some downloading problems that some users were experiencing earlier. Remember, all purchases are associated with your Steam account and can always be retrieved at a later time.
     
    The website has also been updated, although this also requires you to opt into the Steam beta update.
     
    This change was implemented by myself and Valve as a direct result of your feedback.
  14. Josh
    In this non-technical blog I will give you more of Josh's useful tips on how to live. In this blog I am talking about baggage, in the form of data physical possessions.
     
    Archive and Delete
    The first thing you need to do is organize. If you have all your files in dozens of different folders all over your computer, it will be very difficult to track them all down. This is why Leadwerks and most other programs store files in your Documents folder on your computer. Leadwerks projects, along with images, records, schools papers, and anything else you are working on should all be stored here. Your music is ideally stored in the cloud with iTunes, Steam, or another service.
     
    Next, take the entire contents of your documents folder and burn it onto a Blu-Ray disk. Put this disk in a nice CD case like this, and put it in your closet somewhere.
     

     
    Now, delete everything in your Documents folder you are not using right now on a daily basis. You have a copy of everything, and you can always go back and get whatever you need. All your tax records, old school papers, PDFs you never read, and everything else is all safely locked away.
     
    Do this and your computer and mind will feel free, clear, and refreshed. Nowadays I am thinking of the hard drive less as storage for files and more as a temporary cache to place program files that get installed from Steam, the Mac App Store, etc. Not only am I immune from hard drive failures and can easily migrate to a new machine at a moment's notice, but my computers always feel new and uncluttered. Here's my very Zen desktop:
     

     
    Prune Your Bookmarks
    How often do you visit all those hundreds of bookmarks in your web browser? Go through and visit each one. if it's not worth coming back to, delete it. If it's just a random idea you might someday want to look at, archive it. If it's an article you might someday read, read it today. If it's not worth reading today, delete it.
     
    There is presently no way I know of to sync bookmarks between browsers on Windows, Linux, and Mac, unfortunately. This is probably by design or at least by lack of motivation to be cross-platform.
     
    Minimize the Number of Programs You Have Installed
    Unless you are developing a web page, don't install more than one web browser. Don't horde programs to make your computer feel more capable. Keep the bare number of programs you need right now installed on your computer. If you're using an app store of some kind then it's easy to install and uninstall programs at a moment's notice, so don't be afraid to remove them. Having fewer programs will make you more focused when you sit down to work.
     
    Minimize the Number of Machines You Own
    For cross-platform development, I recommend owning two computers, a Mac and a PC with dual boot Windows / Linux. I am not presently following this advice because I also own an Alienware Steam Machine and a Gigabyte Brix Mini PC I take to the office with me. However, I feel better the fewer CPUs I have in my life. For this reason, I favor the Steam Link, as it only requires you to have games installed on one single PC. I am waiting for the day the DAN A4-SFX case becomes available so I can get my PC into an even smaller footprint:
     

     
    Compress, Compress, Compress
    Below is the smallest possible way you can get an entire home entertainment system. A Steam Link acts as a very capable console and Netflix player. A mini projector provides a ten foot tall screen that fits in your hand. Sound is provided by a Bose music player that can be streamed to from your phone or have an audio cable plugged in from the projector. And it all fits in a shoe box.
     

     
    Fix it or Lose it
    Do you have any broken electronics or other equipment lying around you might someday use? Maybe a bicycle with a flat tire? If you can't fix it today you never will be able to, and it's worthless. Fix it and start using it or throw it out. Unused equipment = mental baggage.
     
    Conclusion
    It has been said that "Things you own, end up owning you". This really is true. That nice expensive sofa you bought will have to be carefully transported across the country if you decide you want to live somewhere else. You'll always have to pay rent in an apartment with a living room or buy a house to provide storage for that object. One way or another, you're paying rent for an inanimate object that reduces your options.
     

     
    Follow my useful tips and you will feel more focused, alert, and less stressed. Although my work requires me to keep a hefty amount of electronic equipment, I hope to live semi-nomadically in the near future. The old-style life goals of collecting a lot of stuff in a house in the suburbs need to be updated. I'd rather collect stickers on my laptop from different cities I've lived in. The internet and remote working have given us new options in life, and we need to find new perspectives to define our happiness and goals.
  15. Josh
    I was optimizing and downsizing my computer systems yesterday, and I thought I would write a blog about how I keep my Windows, Mac, and Linux systems running, along with email on my iPhone.
     
    Install Windows and Linux on Two Separate Hard Drives
    The best way to run Windows and Linux side by side is on two separate drives. Try anything else and you will run into trouble. You should unplug the other drive when installing the OS to make sure they don't interfere with each other. Use the boot options in BIOS to control which hard drive gets booted, to switch back and forth between Windows and Linux.
     
    Use Drive Encryption
    Windows, Mac, and Linux all feature hard drive encryption. You should have this enabled so that if your computer is stolen the data stays safe. Even if someone removes the hard drive and tries to read it from another PC, the data will be scrambled and unreadable.
     
    Make sure your computers are set to require the user to enter a password any time the monitor comes back on. There's also a feature on phones that requires the user to enter a password or a short number sequence to unlock the phone.
     
    Don't Use BootCamp
    Do not use BootCamp to install Windows on Mac. BitLocker, the Windows encryption system, is not compatible with Mac encryption and will not work with BootCamp.
     
    So optimally, you will have one Mac (probably a MacBook Pro) and a desktop PC with two hard drives for Windows and Linux. You can also plug the MacBook into your monitor to use it like a desktop PC.
     
    Buy an Intel CPU
    Intel CPUs are more expensive per unit processing power, but having an Intel CPU with built-in graphics allows you to test Intel graphics by removing your GPU. So with one desktop PC you can test Nvidia, AMD, and Intel graphics, on Windows and Linux. This works a lot better than maintaining and testing on six different computers. You could swap the MacBook for a Mac Mini to save space, but it is nice to have a Laptop when you want to be remote.
     

    Everything you need for cross-platform development.
     
    Get a Monitor with Built-In Speakers
    Fewer cords is better. The sound isn't going to be great, but if you really care about audio quality you should have some headphones plugged in anyways.
     
    Don't Waste Time Configuring Your System
    There might be a way to make BootCamp and BitLocker work together, but is it worth it? You don't want to have to go through a complicated series of steps any time you change computers, and who knows if the trick will keep working in the future. If something isn't supported easily by default it's usually not worth messing around a lot when you'll only end up breaking something.
     
    You Don't Need as Many Programs Anymore
    A lot of specialized functionality that used to be provided by third-party programs has now been baked into the operating system, at no additional charge. When they are sufficient, I recommend using the default programs provided by your OS. This means you have a smaller list of programs to install when reformatting or switching machines.
     
    Use App Stores
    App stores are convenient because one login provides access to all your purchased applications. I can't tell you the number of lost passwords and registration keys I have from programs I bought off the web. On Mac I use the Mac App Store and on Windows I use Steam. When possible, I use the Ubuntu App Store.
     
    Use IMAP EmaiI
    In the past I had a lot of trouble configuring email clients to use the IMAP protocol, but today most clients will find the correct settings automatically. IMAP leaves all your mail on the server and lets you log into the server to read mail. This is great because your mail can be shared across multiple devices, and if you reformat your computer or get a new one, there is no mail data to archive.
     
    Use a Cloud Service
    You should put all documents, pictures, and any other files you don't want to lose in a service like iCloud, Microsoft SkyDrive, or DropBox. Just make sure you never store anything sensitive here like tax records or anything with your identification in it. Assume it can be hacked at any time. Do NOT store a list of passwords in any cloud service!
     
    Use Version Control Software
    Your projects should be stored in version control software like SVN, Git, or Mercurial. Don't just store source code files, make sure you commit project files, 3D models, images, and anything else you need to build and run the game. Do not store intermediate build files, config files, or other files that aren't necessary.
     
    Make Physical Backups
    Don't forget to make physical backups of anything important. A Blu-Ray burner is great for this. I make backups of the Leadwerks repository and entire website about once a month. Make sure you have a copy of your photos, documents, and other files you don't want to lose. In the worst case scenario (lost account, DropBox goes out of business, etc.) you won't lose these.
     
    Use Time Machine if You Have a Mac
    Time Machine is a very good full-drive backup system that can be used to migrate your Mac to a new machine or restore it. You just need one external drive and your whole machine can be periodically backed up. Make sure your backup drive only uses a USB cord, because HD power supplies are easy to lose or mix up. Then you plug in the wrong one, and sparks fly out of it. (I actually have done this.) Because of the reliability and convenience of Time Machine, Mac has become my "main" machine, while Windows and Linux are just for development or games. I pretty much assume my Windows or Linux machines could stop working at any point, while Mac gives better backup options in the case of a catastrophic drive failure.
     
    NEVER Use Public Wifi - Even if it's Encrypted
    If you connect to an unsecured network, you are broadcasting your passwords through the air to anyone with a packet sniffer running on their computer. If you are using password-"protected" wifi, then your data is encrypted using the same password the coffee shop employees are handing out to everyone else...meaning that your passwords can still be easily read.
     
    Always use your cellular data or your own home wifi that no one else knows the password to. If you are using a laptop in a coffee shop, tether your computer to your phone's cellular data.
     
    Recommended Programs
    These are the important software applications I use on my PCs:
     
    Windows
    Microsoft Edge
    Windows Mail
    SmartFTP
    TortoiseSVN
    Notepad++
    iTunes
    Steam
     
    Mac
    Safari
    Mac Mail
    Xcode
    Transmit
    Cornerstone
    TextWrangler
    iTunes
    Pages
    Keynote
    Numbers
    Steam
     
    Linux
    Chrome
    Code::Blocks
    SmartSVN
    Steam
     
    And of course, Leadwerks Game Engine on Windows, Linux, and soon Mac.
  16. Josh
    I figured out why some Workshop items weren't installing correctly. There's a series of steps I need to go through to make a paid item ready for sale, and I omitted one button press in the Steamworks interface.
     
    If you experienced downloading problems with the nature model pack, zombies, or any of the scifi material packs, they should work now.
     
    Let me know if you still have any problems.
  17. Josh
    Everything I'm working on right now is a real grind. Trying to get some window code to run on Mac and chatting with Valve on how to optimize the Workshop Store. If I didn't have a plan this would not feel like I was going anywhere. I think that's why programmers often fail to reach beyond a certain level of success. I don't mean simply financial success, I mean they don't go big enough to make a really complete product. They make a car with 22 different gears and no seat. If you don't have a really clear idea of what you are going to bring into existence you just get stuck on little details forever.
     
    In six months there will be a classroom full of students learning game development with Leadwerks for the first time, and loving it.
  18. Josh
    Being reasonably confident that my GUI design will work on Windows and Linux, I wanted to make sure it would also work for Mac computers. The first step was to compile Leadwerks Game Engine in Apple's Xcode IDE. Like Visual Studio and Code::Blocks, I was able to create two targets so that the same project can be used to compile both the static library and standalone executable.
     

     
    At this point the Window class for Mac contains mostly empty functions that don't do anything, but this is a first step.
  19. Josh
    A small update is available on the beta branch. This just changes it so that surfaces using the leaves or groundplant vegetation shader will be skipped when computing a convex decomposition. This was implemented specifically to make it easier for Nenero to get his Tree Pack approved for sale in the Workshop Store. At this time, only the Windows build is affected.
     

     
    I will be in Seattle tomorrow evening for Steam Dev Days, along with some other people from the Leadwerks community.
     

  20. Josh
    The most interesting thing about the development of Leadwerks is digging into low-level X11 libraries that no one really understands. If the stock answers of "use GTK" or "use QT" were sufficient, this project would not be necessary. No one really knows how X11 works anymore, so it's like we are exploring an archaeological ruin and discovering ancient forbidden knowledge.
     

     
    Here's me looking at the X11 documentation.
     

     
    X11 doesn't really have a concept of non-embedded child windows like Win32 and Mac have. The desired behavior has two characteristics:
    A child window always appears on top of the parent.
    A child window does not appear in the taskbar.

     
    Here's how we do it:

    //Make it act like it's parented to the parent window, but not really if (parent) XSetTransientForHint(display, window->handle, parent->handle);
     
    //Hide from taskbar
    window_type = XInternAtom(display, "_NET_WM_STATE", false);
    value = XInternAtom(display, "_NET_WM_STATE_SKIP_TASKBAR", false);
    XChangeProperty(display,window->handle, window_type, XA_ATOM, 32, PropModeReplace, (unsigned char *) &value, 1);
     
    (The child window should actually be parented to the desktop window, not the intended parent.)
     
    Here is the result. Notice the main window is the active one, but the subwindow and its child still appear on top, in the correct order.
     

     
    So at this point I think it's safe to say this design will work with Linux, with an absolute minimum of external libraries installed. (Possibly working on SteamOS.) I frankly have more confidence that Mac will provide everything we need, so at this point I think we're going to be good.
     
    If you've tried the Game Launcher on Linux, you'll know that LeadwerksGUI is a huge upgrade over GTK. Our user experience for Linux users is about to get a lot better. It's been a slow gradual process, but moving away from Windows dependency is really happening, and other options are becoming more viable.
  21. Josh
    I got back last night from Steam Dev Days 2016 in Seattle. This year focused heavily on VR, with Valve mentioning they are working on a new unannounced title built for VR. Valve also announced Steamworks will begin supporting the PS4 controller, with other controller support in the works.
     

     
    This was also an opportunity for me to meet with a bunch of people on the Steam dev team and chat with other developers. I got a lot done! We're getting our Steam controller integration fixed, as I presently can't upload controller configurations in the backend.
     
    I also talked to several Valve people about the friction we're seeing in the Workshop Store. I used quotes from this forum and your comments on my blog to show them how customers were reacting and where the problems were. I hope to keep simplifying the purchase process of these items so that your Workshop Store items sell as well as our DLCs. Being able to show graphs of DLCs versus Workshop Store sales, together with customer feedback from this forum made a convincing presentation. Below are a couple of my slides.
     

     

     
    My recommendations to Valve are as follows:
    Add a Steam browser protocol call to open an item page in the Steam client.
    Streamline the checkout process for inventory items.
    Add a mechanism for sales discounts in item store.

     
    The first item is the simplest to implement, and will make an immediate difference because you will be able to complete purchases through the Steam client instead of having to log into your Steam account with a web browser.
     
    Unlike previous GDCs and Steam Dev Days 2014, which was after Leadwerks launched on Steam, at this conference everyone knew about Leadwerks. I met with ReepBlue and got to play his Blue Portals mod, and also talked to the Black Mesa Source devs about map design and art, which was awesome.
     
    And of course the afterparty was a blast:
     

  22. Josh
    The general GUI elements for LeadwerksGUI are more or less done, and I have turned my attention to another problem. The LeadwerksGUI system is built around the notion that GUI widgets have a discrete bounding box in which they are contained. All events and drawing occur within these bounds, which are further constrained by either their parent widget's bounds or the area of the window they are created on. However, there are three situations where this paradigm breaks down.
     
    Menus

     
    Window menus expand when clicked on, and the submenu stretches depending on the number of menu items it contains. Furthermore, the menu may extend below the bottom edge of the window. This indicates that the menu itself must be another window that is parented to and moves with the parent. However, clicking on the menu would normally deactivate the parent, which is not the desired behavior. To get around this, I made the window class process return MA_NOACTIVATEANDEAT when a WM_MOUSEACTIVATE event occurs, for this type of window.
     
    Dropdown Boxes

     
    Dropdown boxes are similar to menus. In fact I think the Windows API creates menus as a special form of dropdown boxes. The same rules apply here.
     
    Tool Tips

     
    Tool tips can appear anywhere and can extend beyond the bounds of the parent window. Furthermore, tool tips do not gain the mouse focus and allow mouse events to pass through to the underlying window. At least I think they do. In practice, the tool tip will disappear as soon as you move the mouse off the hovered widget, so it should be impossible to ever click on them anyways. However, I did find a method of allowing mouse events to pass through the tool tip window to the window below. On Windows you can make mouse events pass through a window by returning HTTRANSPARENT when an WM_NCHITTEST event occurs.
     
    So here's an unimpressive shot of a window with another window on top of it (the black rectangle on the top left). It's not visually amazing, but it is working.
     

     
    At this point I know our design will work 100% on Windows, but there is still Linux and Mac support to consider. Stay tuned.
  23. Josh
    These are the top-ten top grossing items in the Leadwerks Workshop Store over the last three months:
    Nature Model Pack
    SciFi Materials 1
    Modern Sewer Construction Kit
    Zombie Action Figures
    Old Furniture Pack
    SciFi Materials 5
    Mercenary Action Figure
    Morgue
    Strike Troop
    The Stalker

     
    First of all, we can see that outdoor vegetation and rocks sells best. This is consistent with what I have seen with our DLCs and with products in the past.
     
    We also see four character models, with the character pack selling better than single characters.
     
    There are three environment models packs.
     
    Finally, texture packs are actually selling. I believe this is because of our focus on easy CSG mapping, which makes good textures very useful.
     
    All of these products are priced at roughly $10, $20, or $30. Lower prices don't seem to make up with higher volume sales, based on the data we have. In fact, the highest priced item in the store also happens to be the top-grossing.
  24. Josh
    If you opt into the beta branch of Leadwerks Game Launcher on Steam, you can now try the application out on Linux, using the new LeadwerksGUI user interface.
     
    LeadwerksGUI is a cross-platform GUI library that features DPI scaling for any resolution, supporting 4K and retina screens.
     

     

  25. Josh
    Below you can see LeadwerksGUI running nicely on Ubuntu. Once we get through the window and event code, the GUI code acts exactly the same on Linux and Windows. The behavior of the widgets is reliable and double-buffered rendering makes the appearance perfectly solid. Image loading is not working yet, but you can see the vector graphics are working perfectly.
     

     
    Leadwerks GUI will provide a smoother user experience on Linux and give us cross-platform UI consistency across all operating systems.
×
×
  • Create New...