Lua Script Example C++

LuaGenericCall - a single function to call Lua interpreter from C, exchanging nearly any type of data LuaLaunchers - sample code for launching Lua as a standalone app LexicalAnalysis; SimpleLuaApiExample - simple intro to interfacing to Lua from C: C program loads/runs a Lua script file, sets Lua variables and retrieves return value (example). Oct 05, 2017 Copy autolayoutgen4gen5tables.lua to the same directory; The script expects sprite files to be named as follows:.png (for example, pikachu.png) The script expects party slot image files (that are monitored by OBS) to be named as follows: p.png (for example, p1.png) The script expects a Pokeball image to be named. In the previous tutorial, the call to luaLdofile would execute the script. Since the Lua script in this tutorial only defines a function, calling luaLdofile simply makes the function available to our program. As I said earlier, functions in Lua can accept multiple arguments.

Lua has a very simple C API. You can run Lua code and access lua objects from C. Similarly, you can access C functions and libraries from Lua. In this post, we’ll primarily look at how to expose C functions to lua.

Install Lua

Let’s start off with the installation of lua. You can install lua using system package managers as

Mac:

Ubuntu:

You can also build lua from source. However, you have to build lua as a shared library and this can be a bit tricky.

Lua Stack

Communication between lua and C is held through stacks with each element in stack representing lua value (nil, number, string, etc.).

For example, a C wrapped function c_swap is called in lua as:

In C, you will receive arguments in a stack as

You will then read the arguments from the stack as (indexing for this stack starts with 1 like in lua):

This is actually unsafe because these calls will fail if value in the stack at the specified index is not a number. Following code uses auxiliary library lauxlib.h and is safer; it will raise errors instead of segfaulting.

Then, you will process the arguments and push the results to stack.

Stack will now look like

Since you need to communicate the number of return value to lua, you will return 2. Lua will then know that top 2 values in the stack are the returned values.

The stack we’ve described is not global. Each function has its own stack.

Code

Let’s put all this together into main.c. main() function illustrates how to run lua code from C. /adobe-cc-2017-crack/.

And build and execute as If you have installed lua with apt-get, build using gcc main.c -o swap -llua5.2 -I/usr/include/lua5.2/

which should print

Library

In the above code, you’ve not really used lua interpretor; you’ve run the lua code in C itself.You might rather want to create a module which you can load into a lua interpretor using

To do this, you’ll have to register your functions by creating a array of luaL_Reg and a function luaopen_mylib.

Let’s do this right away by editing main.c. We will also add additional mysin function.

This code works only for lua 5.2. For lua 5.1, please use luaL_register(L, 'mylib', mylib); instead of luaL_newlib(L, mylib);

Create a loadable .so file with

If you have installed lua with apt-get, build using gcc main.c -shared -o mylib.so -fPIC -llua5.2 -I/usr/include/lua5.2/

You can now load this module in lua.

Now, you should be able to wrap any C library by writing a lua wrapper.We still have some caveats:

Film Script Example

  1. We will have to write a wrapping function for each of the functions in your C library to ‘parse’ the arguments(luaL_checknumber etc.). This is repetitive and can be a potential source for bugs.
  2. C doesn’t have classes. What if your library is in C++? You cannot easily wrap classes like above. You will have to mess with metatables and so on.

A solution to both of these is to use Swig. Swig allows you to wrap C/C++ classes/functions into many languages like python, lua, java quite easily. In a later post, we will see how to use swig and wrap a simple library.

Overview¶

This tutorial intoduces the basics of creating scripts in Core, using the Lua Programming Language. You do not need to know how to program to start this tutorial. If you are interested in a basic overview of programming concepts, our Scripting Introduction is a great place to start.

In the first part of a tutorial, you will create and run your first script, following the programming tradition of making a 'Hello, World!' script to introduce yourself to to a new langauge.

In the second part, you will learn how to take an existing template in Core and use scripts to change it, by importing a bedroom scene into your project, and making a light switch that illuminates it.

About Lua and Core¶

Core uses the Lua programming language, which has the advantage of being beginner-friendly but suitable for advanced programming projects.

  • The Event Log window in Core shows output from scripts, including errors. You can enable it by clicking Window in the top menu bar, and selecting Event Log.
  • The Core API page lists code created for you to use in Core.
  • The API Examples page has sample code using the Core API with explanations that you can use to better understand how the objects and functions are used.
  • The Programming in Lua, a free online version of the official 'Programming in Lua' book by Roberto Ierusalimschy.
  • The Scripting Help Section on the Core Creator Forums.

Part One: Creating Your First Script¶

Create a New Project¶

In the Core Launcher, use the Create menu to create a new empty project. You can name this project Lua Tutorial, or whatever you like.

Create the Script¶

Open up the editor and click the Create Script button in the toolbar at the top left of the editor.

Name it TutorialScript for now.

You can rename scripts by clicking on the name of the script in the Hierarchy and F2.

Lua script example c++ online

Open the Script for Editing¶

Your new script will appear in the Project Content window, in the My Scripts section. Double click TutorialScript to open the Script Editor

Info

You can also configure Core to open in an external editor instead of the built-in editor. See the editor integrations page to learn more.

Writing the Script¶

Type the text below into your new empty script:

Next, press Ctrl + S to save.

Running the Script¶

Now we have created a simple script! However, we need to actually add it to our game for it to do the code we wrote.

  1. To add your script to the game, drag it from the My Scripts area of the Project Content tab to the Hierarchy window, usually on the right side of the editor.

    If any of these windows are missing, open them again from the Window menu in the top menu bar.

  2. Press Play or = at the top of the editor, and see your message appear on screen in the top left corner!

The function UI.PrintToScreen(string) writes whatever is between () in ' on the screen of your game. This is one of many of the built-in Core API functions.

Review: Creating and Running a Script¶

  1. Create new script with the Create Script .
  2. Open the script by clicking its name in the My Scripts section of Project.
  3. Add code to the script and save.
  4. Drag the script from Project Content to the Hierarchy to make it run when the game starts.
  5. Press Play or = to run the script.

About Functions¶

In programming, a function is a named section of a script that performs a procedure.

You could think of it in terms of sandwich making. For a task like slicing an ingredient, you would need to use procedures like:

  • Locate cutting board
  • Grab knife
  • Hold object to cut properly
  • Begin slicing

For each item you want to slice for the sandwich, you would have to type out that whole list each time! That would mean repeating all of these steps for the tomatoes, cheese, pickles, and other sandwich ingredients. If you made a function instead, you could just type SliceObject(tomato) to do all those steps.

In order to be able to perform our task exactly when and how we want to, we're going to change TutorialScript to use a function to say 'Hello, World!'

Create the Init Function¶

To put UI.PrintToScreen line is within a function, make a new function called Init.

  1. Open up your TutorialScript.
  2. Replace your existing code with this:

Note

Putting -- at the beginning of a line makes that line a comment, which means it is ignored by the computer. Comments are used to help humans understand what a piece of code is doing.

Call the Function¶

If you save and run this code, nothing will happen.

The code you added defined the function, telling the computer that there is a process called Init, and UI.PrintToScreen('Hello from a function') is what it should do when it is time to do this process.

To make Init run, you need to call it. You can do this multiple times, or in many different points in a script.

To call a function, use its name and () on a separate line:

Lua Script Example C++ Online

Your entire script should now look like this:

Now if you save and run this, you'll see your message appear on the screen! Excellent.

Note

Lua requires functions to be declared on a line before any line that calls them. To keep this organized, we will put all function declarations at the top of the script, and calls further down.

Lua Script Example C++ Free

Review: Creating and Using a Function¶

  1. Define the function, including the code that it should run.
  2. Call the function to make that code run.
  3. Use comments to explain what the function should do.

You can now delete the TutorialScript from your project Hierarchy. The contents of the script will be saved, but it will no longer run when the game preview starts.

Lua Script Tutorial

In the next part of this tutorial, you will put your knowledge to the test!

Part Two: Lightbulb¶

Lua Example Code

Start on Part Two: Lightbulb now to learn more about moving and changing objects in with Lua!