Jump to content

Kronos

Members
  • Posts

    31
  • Joined

  • Last visited

Everything posted by Kronos

  1. Is it possible to write a shader and then let the existing lighting shaders in Leadwerks do the lighting stuff or would I have to include a lighting element in my shader?
  2. Thanks for the input. I think I will take scaling out of the equation which will hopefully simplify things.
  3. I don't know if such a thing is possible but it would be helpful for the model editor I'm working on. At the moment scale seems to be getting messed up when parenting entities.
  4. A while ago I was looking at callbacks for the first time and wrote this little demo to test some things. Anyway I figure it might be useful to others so here is the code. 'A short demo to show how to setup certain callbacks in Blitzmax ' and how to associate an instance of a type with an entity which can hold additional info ' use wasd,lshift and space to move camera ' keys r,g,b to send message to entity (to change colour) 'count1 updates for every entity update 'count2 updates when entity is in defined range of camera and name of entity matches simple.name Framework leadwerks.engine Import "C:\Program Files (x86)\Leadwerks Engine SDK\BMX\Framework\framework.bmx" '***************************************************************************************** Type SimpleType ' our user data holder class Field health:Int Field Name:String = "Fred" Field Message:String Field BODY:TBody Field Count1:Long Field Count2:Long End Type '***************************************************************************************** Function CheckColour(ent:TEntity, message:String)' function used by MessageReceive callback Select message Case "Red" EntityColor(ent, Vec3(255, 0, 0)) Case "Green" EntityColor(ent, Vec3(0, 255, 0)) Case "Blue" EntityColor(ent, Vec3(0, 0, 255)) End Select Local Sim:SimpleType = simpletype(getentityuserdata(ent))' to access the userdata we have to cast to simpletype Sim.message = message End Function '******************************************************************************************* Function UpdateCounter(ent:TEntity) ' function used by EntityUpdate callback Local Sim:SimpleType = simpletype(getentityuserdata(ent)) Sim.count1:+1 End Function '******************************************************************************************* Function UpdateCounter2(ent:TEntity) 'function used by ForEachEntityInAABBDo If getentitykey(ent, "name") = "Fred" Then Local Sim:SimpleType = simpletype(getentityuserdata(ent)) If Sim.Name = "Fred" Then Sim.count2:+1 EndIf End Function '******************************************************************************************* 'main routine AppTitle:String = "Leadwerks Callback test" RegisterAbstractPath ("C:\Program Files (x86)\Leadwerks Engine SDK\") Graphics(1024, 768) Global fw:TFramework = CreateFramework() If Not fw RuntimeError "Failed to initialize engine." Local markcam:mCamsetup = New mcamsetup markcam.Camera = fw.Main.Camera Local Simple:SimpleType = New SimpleType Local MyMesh:TMesh = CreateCube()' create a mesh Setentitykey(MyMesh, "name", "Fred")' give it a name of "Fred" SetEntityCallback(MyMesh, Byte Ptr CheckColour, ENTITYCALLBACK_MESSAGERECEIVE)' associate a function to the message receive callback SetEntityCallback(MyMesh, Byte Ptr UpdateCounter, ENTITYCALLBACK_UPDATE)' associate a function to the update callback setentityuserdata(MyMesh, Simple) 'associates the instance of simpletype to MyMesh PositionEntity(fw.Main.Camera, Vec3(.5, 2, -2), 1) Global Light:TLight = CreateDirectionalLight() RotateEntity(Light, Vec3(45, 45, 0)) Local PLANE:TMesh = createPlane() ScaleEntity(PLANE, Vec3(5000, 1, 5000)) EntityColor(PLANE, Vec3(100, 100, 0)) Local Vec6:TAABB = New TAABB' needed for ForEachEntityInAABBDo HideMouse() While Not KeyHit(KEY_ESCAPE) And Not AppTerminate() markcam.Update() 'setup the area to search for entities Vec6.x0 = entityposition(markcam.Camera).X - 10 Vec6.x1 = entityposition(markcam.Camera).X + 10 Vec6.y0 = entityposition(markcam.Camera).Y - 10 Vec6.y1 = entityposition(markcam.Camera).Y + 10 Vec6.z0 = entityposition(markcam.Camera).Z - 10 Vec6.z1 = entityposition(markcam.Camera).Z + 10 ForEachEntityInAABBDo(Vec6, Byte Ptr UpdateCounter2) If KeyHit(KEY_R) Then sendentitymessage(MyMesh, "Red", 1200)'send message with a short delay If KeyHit(KEY_G) Then sendentitymessage(MyMesh, "Green", 1200) If KeyHit(KEY_B) Then sendentitymessage(MyMesh, "Blue", 1200) fw.Update() fw.render() DrawText(Int entityposition(markcam.Camera).X + " " + Int entityposition(markcam.Camera).Y + " " + Int entityposition(markcam.Camera).Z, 0, 16) DrawText("Simple.Message=" + Simple.message, 0, 32) DrawText("Simple.count1=" + Simple.count1, 0, 48) DrawText("Simple.count2=" + Simple.count2, 0, 64) Flip(0) Wend ShowMouse() End '********************************************************************************************* 'just a little camera control class Type mCamSetup Field mx:Float=0 Field my:Float=0 Field move:Float=1 Field wire:Int = -1 Field Camera:TCamera Field Py:Float Field toggle:Int = 1 Method New() End Method Method Update() mx=mx+(MouseX()-GraphicsWidth()/2)/10 my=my+(MouseY()-GraphicsHeight()/2)/10 MoveMouse(GraphicsWidth()/2,GraphicsHeight()/2) RotateEntity(Camera, Vec3(my, -mx, 0)) If toggle = 1 Then If KeyDown(KEY_W) = True Then MoveEntity Camera, Vec3(0, 0, move * AppSpeed()) If KeyDown(KEY_S) = True Then MoveEntity Camera, Vec3(0, 0, -move * AppSpeed()) If KeyDown(KEY_A) = True Then MoveEntity Camera, Vec3(-move * AppSpeed(), 0, 0) If KeyDown(KEY_D) = True Then MoveEntity Camera, Vec3(move * AppSpeed(), 0, 0) If KeyDown(KEY_SPACE) = True Then TranslateEntity Camera, Vec3(0, move * AppSpeed(), 0) If KeyDown(KEY_LSHIFT) = True Then TranslateEntity Camera, Vec3(0, -move * AppSpeed(), 0) EndIf End Method End Type
  5. Evangelise away it was a good read. I'm not sure why you think I haven't taken an OOP approach to this, I thought I had spelled it out pretty clearly.
  6. After a few of weeks of programming burnout I am now back in action. i think I was starting to feel a bit swamped with the increasing complexity of my project amongst other things however things are looking a bit rosier now. I probably should have sat down and made a proper plan because of all the dependencies of the various elements. My history with Leadwerks has been somewhat chequered and I have struggled for along time trying to do stuff with it in the past. However lately things just seem to be clicking so I have decided to move my main project over from Xors3d to Leadwerks. Xors is a good, easy to use engine but it has certain flaws which make it less than ideal for my purposes plus I am more of an OpenGL man. My aim is to make a sort of strategy/vehicle combat type game in the vein of battlezone/armourgeddon/carrier command. Due to my limited programming skill I am trying to make it as simple as possible at the moment.(Still seems pretty damn complicated) What I have so far:. Vehicle mesh loading - Had to write my own mesh loader to overcome certain problems Vehicle navigation - nothing fancy just point to point. I will probably have to add some simple(if there is such a thing) obstacle avoidance at some point. I have a sort of an idea about a passive avoidance system but haven't experimented with it yet. Order System - only 4 order types at the moment (only 1 thats actually working!) - vehicles and other entities will be controlled by orders Turret system - controls turret rotation/aiming - turrets attach to vehicles Gun system - controls the firing ie when to fire,where to fire from, reload times, etc - guns attach to turrets Projectile - guns fire projectiles - deals with collisions - projectile types and effects. One thing I am particularly keen to have is proper lighting on missiles and explosions ie so the landscape will light up when they fly past or explode. Arbitrary world partition system - manages vehicles and other entities - vehicles need to know about other vehicles and buildings in their vicinity whether they are friendly or not. I call it arbitrary because the world sectors can be any position, and theoretically any size, in 3d space. There are probably better ways to do it but in keeping with my mantra i am keeping it simple, Things to do. Next step is probably create some different particle effects for projectiles and explosions. Implement some actual vehicle behaviours - now that I have the order system in place vehicles should be able to issue their own orders under certain conditions ie aggressively pursuing detected enemies. I am kind of excited as I feel I am actually quite close to having something that will soon have a life of its own, just a couple more hills (mountains) to climb.
  7. it would probably help if you gave some background eg what programs you've used in the past. What type of game are you looking to make. What programming language do you intend to use?
  8. sound or sound triggers on emitters/particles? For explosions and the like.
  9. None that I am aware of. So are you saying leadwerks engine itself is running in debug mode when this option is set because it was written in blitzmax. Interesting.
  10. Seems odd.I haven't noticed this any other engines when using blitzmax. oh well.
  11. Just wondering if anyone else has this problem. All my leadwerks programs written in Blitzmax seems to run really slow when compiled in debug mode. As an example I have a simple app which has a scene , some animated characters running about and thats about it but it runs at less than 30 fps in debug mode. 60+ when debug is unchecked. Is this a windows 7 thing?
  12. One of the things that always amazes me in wow is the lack of visible lod'ing on anything. One wonders whether they use brute force for rendering the terrain. The only thing I know about the terrains in wow is that they use a max of 4 textures per terrain square.
  13. This seems to do the job for horizontal and vertical aiming. Local t:TVec3=TFormPoint(Vec3(0,0,0),enemytarget.chassis,chassis) dYaw = -ATan2(t.x,t.z) dPitch =-ATan2(t.y, Sqr(t.x*t.x + t.z*t.z)) mRotate(turret1,0,CurveAngle(dYaw,entityrotation(turret1).y,10.0/AppSpeed()),0) mRotate(barrel,CurveAngle(dPitch,entityrotation(barrel).x,10.0/AppSpeed()),0,0) never really understood TFormpoint and TFormVector before but its becoming clearer. Thanks Josh for pointing me in the right direction.(haha unintentional pun)
  14. I have a vehicle which has a turret base attached to it which can rotate locally around its y axis. A barrel is attached to this turret base that can move locally in the x axis but has an upper and lower limit on how far it can rotate. The vehicle will be travelling over uneven terrain. My question is how can I make the gun turret point towards a certain point, eg an enemy vehicle or a specific point in space. When i was using Blitz3d I used Deltayaw and Deltapitch for this which worked fine, but we do not have these functions in Leadwerks. I tried using the Deltapitch/yaw functions from minib3d but they don't work. I have also been trying to use PointEntity but it appears to only work using global angles and not local ones. The turret base must only rotate around its own y axis and the barrel must only rotate around its own x axis. Does anybody have any suggestions as to how I can achieve the result I am after?
  15. Don't you just want to use TerrainElevation or am I not understanding. This will give you the terrain height at ANY point on the terrain.
  16. I also agree with GameCreator. Short examples for all functions. You'll be able to use the same example for a bunch of different functions in some cases
  17. Whats the value you have to tweak to make the vehicle slow down and stop when no power is being supplied to the wheels. I find my vehicles just seem to keep on rolling forever.
  18. Using the method of cycling through all child entities of the scene will only return terrain as an entity. How can I get it as a terrain. I need to be able to access the terrain to retrieve height information via terrainelevation(). This code doesn't work because you can't cast from entity to terrain. Local Myscene:TEntity = loadscene("media\myscene2.sbx"); Local ent:TEntity Local terrain:TTerrain DebugLog "countChildren = "+CountChildren(myscene) For i = 1 To CountChildren(myscene) ent = GetChild(myscene,i) If GetEntityKey(ent,"class") = "Terrain" Then terrain=ent <--no good!! Next Thanks in advance.
  19. Rick Did you ever figure out how to reposition textures on a model? I need to something along these lines to simulate a tank track moving.
  20. Josh, Sorry to harp on about this but I don't know how you are getting that result. Here is what I get using uncompressed, save mipmaps options using the texturetool downloaded from the site. Its nowhere near as smooth as your one. Its no biggee I can use other progs for the conversion as mentioned above. aargh..file is too big to upload.. (edit:these files are rather big aren't they:()
  21. just X,Y,Z truncated to 3 decimal places or something
  22. I made a program that generates an 4 colour (rgba) alphamap as a jpg/png. The transitions between the colours are nice and smooth. However when I convert them to dds using Leadwerks tool the transitions are no longer smooth. Using the transformed DDS alphamap for a terrain results in obvious blocking on the terrain surface. This happens whether I use compressed or uncompressed DDS output. Its worse with compression. I have included a before and after in the attached zip. The difference is subtle but when you zoom in on the DDS you can see the blockier look. Just wondering whether the quality of translation could be improved a bit or whether this is a limitation of the DDS format. MARKLEAD_Alpha.zip
×
×
  • Create New...