Murga-Projects Forums

Full Version: iGame3D MurgaLua'd
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
After a "Clean all targets" from XCode I got 197 erros ;-(
Everything based on svn "Updated to revision 368"

Bye
Christian
This is about our seventh system version since starting the project.
Onward marches progress.

I posted a link earlier and realised that the Data folder was missing.
You'll need to SVN the Data folder once we get this thing back on its tentacles.

Once you have a working version you should be able to drag this
script to the application icon (as a file from finder) and get Hello world.

Code:
-- text box creation 101
gTextboxes={}

-- note the image file and path you must have, its usually bundled.
gTextboxes[1]=make(ig3d_text_box, "Data/FontPngs/default32_1.png")

--font styling
setText_boxInfo(gTextboxes[1], IG3D_COLOR, 1.0,1.0,1.0,1)
setText_boxInfo(gTextboxes[1], IG3D_SIZE, 64)

--textbox position
setText_boxInfo(gTextboxes[1], IG3D_POSITION, 45 , 45)

--define a function for the game loop
function gamemodefunc()
setText_boxInfo(gTextboxes[1], IG3D_TEXT, "Hello World")
end

--tell engine what function to loop in game mode
game_func= gamemodefunc

--tell engine what the edit loop is, for now its the same
edit_func= gamemodefunc

ig3d_SetMode_i(4)  -- play mode!



Scripts branch beginning in iGame3D Player.app/Data/game script.lua

To have the engine do nothing but hello world the script above as the game script would do the job.

Theoretically a whole game or program could be run from game script.lua,
but that would be madness.

Usually at the end of the game script we send a loadLevel command which seeks a folder within the Levels folder and runs a "load script.lua" there in, clearing any level content previously loaded.

I'm getting ahead of myself, next we'll interact using the example above.
And clear up any questions..?

ok here's the same code as above, only "hello world" is now a clock
and the escape key toggles between play and edit modes.

In edit mode you'll be able to move the text box around with the mouse.

Code:
gTextboxes={}
gTextboxes[1]=make(ig3d_text_box, "Data/FontPngs/default32_1.png")
setText_boxInfo(gTextboxes[1], IG3D_COLOR, 1.0,1.0,1.0,1)
setText_boxInfo(gTextboxes[1], IG3D_POSITION, 45 , 45)
setText_boxInfo(gTextboxes[1], IG3D_SIZE, 64)

function time()
return string.sub(os.date(),11,20)
end

--define a function for the game loop
function gamemodefunc()
    setText_boxInfo(gTextboxes[1], IG3D_TEXT, time())
    fltk_update();
    char,code,name=input(false)
    --Toggle to edit mode on escape key down
    if name=="Escape" then ig3d_SetMode_i(1) end
end

--define a function to handle editing mode events
function editmodefunc()
    setText_boxInfo(gTextboxes[1], IG3D_TEXT, time())
    fltk_update();
    char,code,name=input(false)
--Toggle to play mode on escape key down
    if name=="Escape" then ig3d_SetMode_i(4) end
end

game_func= gamemodefunc--tell engine what the game loop is
edit_func= editmodefunc--tell engine what the edit loop is
ig3d_SetMode_i(4)  --- play game!


Next up a murgaLua UI.

I made the UI in Fluid, save to cxx, iGame3D converts it to a lua file and runs it on drag and drop to the application icon.

This UI controls the background color.

Code:
    

--UI roller callback for color values
function color_Rollers()

--retrieve roller values
RedBack=Red_roller:value()
BlueBack=Blue_roller:value()
GreenBack=Green_roller:value()

--set the background color
setSceneInfo(IG3D_BACKGROUND_COLOR, RedBack, BlueBack, GreenBack)

--update labels
Red_roller:label(RedBack)
Blue_roller:label(BlueBack)
Green_roller:label(GreenBack)
end

--a Window with three rollers
  do local object = fltk:Fl_Double_Window(155, 137);
    window = object;
    do BackgroundColor = fltk:Fl_Group(0, 10, 145, 125, "Background Color");
      BackgroundColor:labelsize(9);
      do Red_roller = fltk:Fl_Roller(10, 10, 135, 25);
        Red_roller:type(1);
        Red_roller:labelsize(9);
        Red_roller:callback(color_Rollers);
      end -- Fl_Roller* Red_roller
      do Blue_roller = fltk:Fl_Roller(10, 55, 135, 25);
        Blue_roller:type(1);
        Blue_roller:labelsize(9);
        Blue_roller:callback(color_Rollers);
      end -- Fl_Roller* Blue_roller
      do Green_roller = fltk:Fl_Roller(10, 100, 135, 25);
        Green_roller:type(1);
        Green_roller:labelsize(9);
        Green_roller:callback(color_Rollers);
      end -- Fl_Roller* Green_roller
      Fl_Group:current(Fl_Group:current():parent());
    end -- Fl_Group* BackgroundColor
    Fl_Group:current(Fl_Group:current():parent());
  end

  
--Activate this window
  window:show();
  ig3d_RebuildMacMenubar();

--lets ask tobi for a description of this section
  if game_func==nil then
      function runner()
          fltk_update();
      end
      game_func=runner;
  end

--UI style
  Fl:scheme("plastic")


If we wanted to set the text color interactively we might do something like

Code:
setText_boxInfo(gTextboxes[1], IG3D_COLOR, RedBack, BlueBack, GreenBack,1)


Ok that about covers the very basics. What next?

Hi,
I give up, trying to compile the code at Leopard now ;-(
Coming back when seeing a sign at svn update :-)

In the meantime I try to understand the idea of your engine and murgaLua integration... I think, it seems to be  a perfect environment for pseudo simulation (game like) robotics... Virtualisation ist the first step for my idea - simulation physics the next part :-)

Thanks for all
Bye
Christian
I had a longer post, now lost to the ether, a more complex script was created for this demonstration but here's a quick and dirty version to demonstrate object creation at its leanest and direct translation of the object in space via the keyboard WASDRF keys.

Code:
--Create an object
gObjects[1]={}
gObjects[1].cObj=make(ig3d_object, "cube.wtf")
theCube=gObjects[1].cObj
setObjectInfo(theCube, IG3D_NAME, "cube1")
                                       
--define a function for the game loop
function MoveBoxWithWASDRF()
objectSpeed=0.02
--control the object with keyboard
fltk_update();
char, code, name=input(false)
--forward and back
    if key("w","-") then zm= -objectSpeed end
    if key("s","-") then zm=objectSpeed end
    if zm~=0 then xm,ym=0,0 end
--left and right
    if key("a","-") then xm= -objectSpeed end
    if key("d","-") then xm=objectSpeed end
    if xm~=0 then zm,ym=0,0 end
--up and down
    if key("r","-") then ym=objectSpeed end
    if key("f","-") then ym= -objectSpeed end
    if ym~=0 then xm,zm=0,0 end
--stop the motion with spacebar
    if key(" ","-") then xm,ym,zm=0,0,0 end

--get object coordinates
ox,oy,oz=getObjectInfo(theCube,IG3D_POSITION)

--modify coordinates
ox=ox+xm
oy=oy+ym
oz=oz+zm

--reposition object
setObjectInfo(theCube,IG3D_POSITION, ox,oy,oz)
end

--tell engine what function to loop in game mode
game_func= MoveBoxWithWASDRF

-- for now edit is the same as game loop
edit_func= MoveBoxWithWASDRF

ig3d_SetMode_i(4)  -- play mode!


The same basic code can be used to create and manipulate other entities in the iGame3D scene. In a game scenario we don't manipulate objects so directly, we use physics, which I'll demonstrate soon with this robot thing in mind.

Perhaps a simple robot emulation program for me to test?
What data will the robot and 3D scene share?

Hi,

I use a very simple testprogram for my old simulation with murgaLua...
It uses a field of LEGO-brick and walls, moving around and should never collidate
with the walls :-)

What format is used for the moving object ?
Are png's OK for the static objects (bricks for the wall) ?

I think your environment will make me happy in the future :-)

Christian


Code:
-----------------------------------
-- Robot Programm for Lua Beginners
-- VERSION
-- @Author: chrimo@moccy.xdsnet.de
-- @DATE: May 2007
-- @LASTCHANGE: today
-----------------------------------


-- Robot for Beginners Project --
-- Simple framework for kids or young people without programming experience
-- functions are filled up step by step
--

--[[
Implemented robot functions:
**********************
robot.forward(speed)
robot.backward(speed)
robot.turn(degree);
robot.left(speed)
robot.right(speed)
robot.stop()
robot.off()
robot.beep(count)
robot.idle(mseconds)
robot.info()
--]]

-- nxt.SimInit();
near_distance=30;
-- robot.info(1);
while(nxt.ButtonRead() == -1) ) do
    -- Simple Ant-Brain :D forward or back-left algorithm
    
    if(robot.USRead(4) <= near_distance) then
        robot.backward(100);
        robot.left();
    else
        robot.forward(100);
    end
end

Hi Christian,

You can use PNGs (and only PNGs) for your textures.
Those textures can be applied to both dynamic objects and the static world, ie brickwalls. We'd be glad to see some robot action happening in iGame3D!

Getting back to the linking problem:
Obviously there is a problem with the newton physics engine.
It would be great help if you could download the mac version of this engine from http://www.newtongamedynamics.com and try to build it with your xcode and tell us the results of this of course Wink

Regards,

Tobi

chrimo Wrote:
Hi,

I use a very simple testprogram for my old simulation with murgaLua...
It uses a field of LEGO-brick and walls, moving around and should never collidate
with the walls :-)

What format is used for the moving object ?
Are png's OK for the static objects (bricks for the wall) ?

I think your environment will make me happy in the future :-)

Christian

Hi Tobi,

give me a second, I try it now...

Bye
Christian
Result:
download, extract, double click xcode.project-file, build and run...

The earth rotates very fast !

What now ?

Christian
Pages: 1 2 3 4 5
Reference URL's