Advanced Camera
by Thomas \"Man of Ice\" Lund · 04/03/2008 (11:57 am) · 480 comments
Download Code File
Description
Over time a lot of people have released camera resources, but some do not work anymore, others are hard to implement etc.
I've tried to assemble a single class to add to the engine that implements them all in one go using the same basic architecture. This enables minimum code bloat and makes it way easier to keep the code up to date.
Change log
March 3rd, 2005
Manoel made some changes to the orbit camera. Works in multiplayer now and is much nicer by using console variables
February 3rd, 2005
Fixed small big in interpolation.
February 2nd, 2005
Major changes in this one with various contributors.
* Static camera mode
* Smooth interpolation and transition between modes
* Smooth orbit camera!!!
* Vertical freedom mode when in 3rd person
* Better collision check with terrain and interiors
* Mouse control of orbit camera
* Totally reworked codebase and lots of cleanups. Much more readable now
Manoel Neto contributed the new orbit camera and the interpolation
Zik Saleeba contributed the vertical freedom mode and better collision check
Thanks a lot!!!!
I have marked changes with a New in the text below for those who upgrade
January 23rd, 2005
Minor changes. Larger update soon with new functionality
* Now takes GameBase objects as target + player
* Removed debug message in orbit camera
* Added getters for player and target object
June 25th, 2004
Updated the bindings for orbit camera. Switched left+right.
June 23rd, 2004
A big thanks to Stephen Zepp for contributing with an orbit camera mode. Its added to the resource, and is perfect for RTS games and action adventures. It allows for a camera to rotate around a user as if placed on a sphere. The user can zoom in/out, rotate and tilt the camera.
June 9th, 2004
Added getter/setter for the 3 offset values accessible from script
Added a "follow terrain" mode for the third person camera, so the camera follows the terrain slope - doesnt work perfectly
April 5th, 2004
All camera modes now use a raycast to not get hidden behind terrain or interiors
April 3rd, 2004
This release is the first release, and might not be as "advanced" as the author would like, but its time to release it and get some feedback to further enhance it down the road.
Camera Modes Implemented
The resource currently implements the following camera systems:
* Track Mode
This is the same as the tracking camera resource posted by Cory Osborn. A stationary camera tracks the player and keeps him in focus.
* New Static Mode
Camera stays in its position and rotation. Useful for e.g. scene based adventures where the camera doesnt move with the players
* Third Person Mode
The camera is placed at an offset behind the player and rotates with the player. The camera itself is not controllable
* Third Person Track Mode
The camera is placed in third person mode but rotated so it always looks at a specified object, but with the player in full view
* God View
Camera is placed at an offset from the player and does not rotate with the player. This is your typical "Diablo" kind of camera.
* New Orbit Mode
Camera is placed on a sphere looking at the player, and can rotate/tilt and zoom controlled by the player. There are bindings to the mouse when in single player game (server and client on same machine)
Movie
Here is a small movie displaying the different camera modes (3 MB)
www.codejar.com/advancedcamerademo.wmv
How to Add
First off all you need to take the attached advancedCamera.cc/h files and add to engine\game and add them to the project.
Then you need to expose the camera object in GameConnection as described in Cory's resource www.garagegames.com/index.php?sec=mg&mod=resource&page=view&qid=4720
I took the liberty to paste the relevant parts in here too
Exposing mCameraObject
The first thing you want to do is add console method's to access the GameConnection setCameraObject/getCameraObject methods. I added these to GameConnection.cc right after the console method for getControlObject:
After playing around with it, I also found you need some adjustments to the setCameraObject and setControlObject methods - otherwise the client connection can screw things up if you bounce the same object from your connection's control to camera or vice versa. Here is my GameConnection::setControlObject:
and here is my GameConnection::setCameraObject:
Camera read/write packets
None of this will work unless the client copy of the camera object gets packets updated. Here we're going to modify GameConnection::readPacket and GameConnection::writePacket.
In GameConnection::readPacket, find this block of code:
and change it to
In GameConnection::writePacket, find this block of code:
and change it to:
Recompile it all and the engine is ready to go.
Script
To use the camera you need to follow some of Corys resource, but with some modifications. Datablock and naming has changed
First, add a datablock for the tracking camera to /fps/server/scripts/camera.cs:
Next, add it to the connection just like is currently done with the base camera class. Add this inside GameConnection::onClientEnterGame (/fps/server/scripts/game.cs), right after %this.camera is set up:
We'll need to clean it up after the client leaves the game, so add this to GameConnection::onClientLeaveGame
We need to tell it what to do when added and assign the connection's camera object, so add this to the end of GameConnection::createPlayer:
And we'll want to unhook it when the player dies. Insert this at the beginning of GameConnection::onDeath:
The last thing to know, is if you're in first-person mode, GameConnection automatically uses the control object to render the engine rather than the camera object. So if you don't see this working when you first enter a mission, toggle out of first-person.
Orbit mode
To use the orbit camera, one needs to add some key binds to manipulating the camera.
All you need to do, is add the following to your client\config.cs or better to your client\scripts\default.bind.cs
Remember to comment out the mouse commands for the player movement, as these are overwritten by the orbit camera controls
Script API
To use the different camera modes you can use the following API
Selecting the camera mode is done with e.g.:
Prior to calling the above modes you have to set the PlayerObject using
To use the 3rd person target mode you also need to set a TargetObject using
To use the static or tracking camera you need to set the position the camera should be placed suing
To use the follow terrain mode in 3rd person you give a bool to
To use the vertical freedom mode in 3rd person you give a bool to
The offset values in the datablock can be changed for the camera object via script using
The orbit camera can be manipulated from script using
You can also manipulate the orbit camera directly by assigning values to the following variables
[code]
$advCamera::Yaw
$advCamera::Pitch
$advCamera::Zoom
$advCamera::azimuth
$advCamera::declination
$advCamera::zoomDistance
[code]
All camera modes coexist, so you can set the position, player object and target object once and then switch camera modes around as you see fit. Switching mode will not clear the old objects/positions.
Description
Over time a lot of people have released camera resources, but some do not work anymore, others are hard to implement etc.
I've tried to assemble a single class to add to the engine that implements them all in one go using the same basic architecture. This enables minimum code bloat and makes it way easier to keep the code up to date.
Change log
March 3rd, 2005
Manoel made some changes to the orbit camera. Works in multiplayer now and is much nicer by using console variables
February 3rd, 2005
Fixed small big in interpolation.
February 2nd, 2005
Major changes in this one with various contributors.
* Static camera mode
* Smooth interpolation and transition between modes
* Smooth orbit camera!!!
* Vertical freedom mode when in 3rd person
* Better collision check with terrain and interiors
* Mouse control of orbit camera
* Totally reworked codebase and lots of cleanups. Much more readable now
Manoel Neto contributed the new orbit camera and the interpolation
Zik Saleeba contributed the vertical freedom mode and better collision check
Thanks a lot!!!!
I have marked changes with a New in the text below for those who upgrade
January 23rd, 2005
Minor changes. Larger update soon with new functionality
* Now takes GameBase objects as target + player
* Removed debug message in orbit camera
* Added getters for player and target object
June 25th, 2004
Updated the bindings for orbit camera. Switched left+right.
June 23rd, 2004
A big thanks to Stephen Zepp for contributing with an orbit camera mode. Its added to the resource, and is perfect for RTS games and action adventures. It allows for a camera to rotate around a user as if placed on a sphere. The user can zoom in/out, rotate and tilt the camera.
June 9th, 2004
Added getter/setter for the 3 offset values accessible from script
Added a "follow terrain" mode for the third person camera, so the camera follows the terrain slope - doesnt work perfectly
April 5th, 2004
All camera modes now use a raycast to not get hidden behind terrain or interiors
April 3rd, 2004
This release is the first release, and might not be as "advanced" as the author would like, but its time to release it and get some feedback to further enhance it down the road.
Camera Modes Implemented
The resource currently implements the following camera systems:
* Track Mode
This is the same as the tracking camera resource posted by Cory Osborn. A stationary camera tracks the player and keeps him in focus.
* New Static Mode
Camera stays in its position and rotation. Useful for e.g. scene based adventures where the camera doesnt move with the players
* Third Person Mode
The camera is placed at an offset behind the player and rotates with the player. The camera itself is not controllable
* Third Person Track Mode
The camera is placed in third person mode but rotated so it always looks at a specified object, but with the player in full view
* God View
Camera is placed at an offset from the player and does not rotate with the player. This is your typical "Diablo" kind of camera.
* New Orbit Mode
Camera is placed on a sphere looking at the player, and can rotate/tilt and zoom controlled by the player. There are bindings to the mouse when in single player game (server and client on same machine)
Movie
Here is a small movie displaying the different camera modes (3 MB)
www.codejar.com/advancedcamerademo.wmv
How to Add
First off all you need to take the attached advancedCamera.cc/h files and add to engine\game and add them to the project.
Then you need to expose the camera object in GameConnection as described in Cory's resource www.garagegames.com/index.php?sec=mg&mod=resource&page=view&qid=4720
I took the liberty to paste the relevant parts in here too
Exposing mCameraObject
The first thing you want to do is add console method's to access the GameConnection setCameraObject/getCameraObject methods. I added these to GameConnection.cc right after the console method for getControlObject:
ConsoleMethod( GameConnection, setCameraObject, bool, 3, 3, "(ShapeBase object)")
{
ShapeBase *gb;
if(!Sim::findObject(argv[2], gb))
return false;
object->setCameraObject(gb);
return true;
}
ConsoleMethod( GameConnection, getCameraObject, S32, 2, 2, "")
{
argv;
SimObject* cp = object->getCameraObject();
return cp ? cp->getId(): 0;
}
ConsoleMethod( GameConnection, clearCameraObject, void, 2, 2, "")
{
object->setCameraObject(NULL);
}After playing around with it, I also found you need some adjustments to the setCameraObject and setControlObject methods - otherwise the client connection can screw things up if you bounce the same object from your connection's control to camera or vice versa. Here is my GameConnection::setControlObject:
void GameConnection::setControlObject(ShapeBase *obj)
{
if(mControlObject == obj)
return;
if(mControlObject && mControlObject != mCameraObject)
mControlObject->setControllingClient(0);
if(obj)
{
// Nothing else is permitted to control this object.
if (ShapeBase* coo = obj->getControllingObject())
coo->setControlObject(0);
if (GameConnection *con = obj->getControllingClient())
{
if (this != con)
{
// was it controlled via camera or control?
if (con->getControlObject() == obj)
con->setControlObject(0);
else
con->setCameraObject(0);
}
}
// We are now the controlling client of this object.
obj->setControllingClient(this);
}
// Okay, set our control object.
mControlObject = obj;
if (mCameraObject.isNull())
setScopeObject(mControlObject);
}and here is my GameConnection::setCameraObject:
void GameConnection::setCameraObject(ShapeBase *obj)
{
if(mCameraObject == obj)
return;
if(mCameraObject && mCameraObject != mControlObject)
mCameraObject->setControllingClient(0);
if (obj) {
// Nothing else is permitted to control this object.
if (ShapeBase* coo = obj->getControllingObject())
coo->setControlObject(0);
if (GameConnection *con = obj->getControllingClient())
{
if (this != con)
{
// was it controlled via camera or control?
if (con->getControlObject() == obj)
con->setControlObject(0);
else
con->setCameraObject(0);
}
}
// We are now the controlling client of this object.
obj->setControllingClient(this);
}
// Okay, set our camera object.
mCameraObject = obj;
if (mCameraObject.isNull()) {
setScopeObject(mControlObject);
} else {
setScopeObject(mCameraObject);
// if this is a client then set the fov and active image
if(isServerConnection())
{
F32 fov = mCameraObject->getDefaultCameraFov();
GameSetCameraFov(fov);
}
}
}Camera read/write packets
None of this will work unless the client copy of the camera object gets packets updated. Here we're going to modify GameConnection::readPacket and GameConnection::writePacket.
In GameConnection::readPacket, find this block of code:
if (bstream->readFlag())
{
S32 gIndex = bstream->readInt(10);
ShapeBase* obj = static_cast<ShapeBase*>(resolveGhost(gIndex));
setCameraObject(obj);
}
else
setCameraObject(0);and change it to
if (bstream->readFlag())
{
S32 gIndex = bstream->readInt(NetConnection::GhostIdBitSize);
ShapeBase* obj = static_cast<ShapeBase*>(resolveGhost(gIndex));
setCameraObject(obj);
obj->readPacketData(this, bstream);
}
else
setCameraObject(0);In GameConnection::writePacket, find this block of code:
if (!mCameraObject.isNull() && mCameraObject != mControlObject)
{
gIndex = getGhostIndex(mCameraObject);
if (bstream->writeFlag(gIndex != -1))
bstream->writeInt(gIndex, 10);
}
else
bstream->writeFlag( false );and change it to:
if (!mCameraObject.isNull() && mCameraObject != mControlObject)
{
gIndex = getGhostIndex(mCameraObject);
if (bstream->writeFlag(gIndex != -1)) {
bstream->writeInt(gIndex, NetConnection::GhostIdBitSize);
mCameraObject->writePacketData(this, bstream);
}
}
else
bstream->writeFlag( false );Recompile it all and the engine is ready to go.
Script
To use the camera you need to follow some of Corys resource, but with some modifications. Datablock and naming has changed
First, add a datablock for the tracking camera to /fps/server/scripts/camera.cs:
...
datablock AdvancedCameraData(AdvCameraData)
{
lookAtOffset = "0 0 2";
thirdPersonOffset = "0 -3 3";
godViewOffset = "0 -20 20";
maxTerrainDiff = 2;
orbitMinMaxZoom = "5 100";
orbitMinMaxDeclination = "10 80";
damping = 0.25;
};
...Next, add it to the connection just like is currently done with the base camera class. Add this inside GameConnection::onClientEnterGame (/fps/server/scripts/game.cs), right after %this.camera is set up:
...
// create advanced camera
%this.advCamera = new AdvancedCamera() {
dataBlock = AdvCameraData;
};
MissionCleanup.add(%this.advCamera);
%this.advCamera.scopeToClient(%this);
...We'll need to clean it up after the client leaves the game, so add this to GameConnection::onClientLeaveGame
...
if (isObject(%this.advCamera))
%this.advCamera.delete();
...We need to tell it what to do when added and assign the connection's camera object, so add this to the end of GameConnection::createPlayer:
... // We set the camera system to run in 3rd person mode around the %player %this.advCamera.setPlayerObject(%player); %this.advCamera.setThirdPersonMode(); %this.advCamera.setFollowTerrainMode(false); %this.advCamera.setVerticalFreedomMode(false); %this.setCameraObject(%this.advCamera); ...
And we'll want to unhook it when the player dies. Insert this at the beginning of GameConnection::onDeath:
... // clear connections camera %this.advCamera.clearPlayerObject(); %this.advCamera.clearTargetObject(); %this.clearCameraObject(); ...
The last thing to know, is if you're in first-person mode, GameConnection automatically uses the control object to render the engine rather than the camera object. So if you don't see this working when you first enter a mission, toggle out of first-person.
Orbit mode
To use the orbit camera, one needs to add some key binds to manipulating the camera.
All you need to do, is add the following to your client\config.cs or better to your client\scripts\default.bind.cs
//------------------------------------------------------------------------------
// Advanced Camera Movement
//------------------------------------------------------------------------------
$cameraYawSpeed = -100.0;
$cameraPitchSpeed = -50.0;
$cameraZoomSpeed = -5.0;
function rotateCameraHorizontal(%val)
{
$advCamera::Yaw = getMouseAdjustAmount(%val)*$cameraYawSpeed ;
}
function rotateCameraVertical(%val)
{
$advCamera::Pitch = getMouseAdjustAmount(%val)*$cameraPitchSpeed;
}
function zoomCamera(%val)
{
$advCamera::Zoom = getMouseAdjustAmount(%val)*$cameraZoomSpeed;
}
moveMap.bind( mouse, xaxis, rotateCameraHorizontal);
moveMap.bind( mouse, yaxis, rotateCameraVertical );
moveMap.bind( mouse, zaxis, zoomCamera );Remember to comment out the mouse commands for the player movement, as these are overwritten by the orbit camera controls
//moveMap.bind( mouse, xaxis, yaw ); //moveMap.bind( mouse, yaxis, pitch );
Script API
To use the different camera modes you can use the following API
Selecting the camera mode is done with e.g.:
%this.advCamera.setTrackMode(); %this.advCamera.setThirdPersonMode(); %this.advCamera.setThirdPersonTargetMode(); %this.advCamera.setGodViewMode(); %this.advCamera.setOrbitMode(); %this.advCamera.setStaticMode();
Prior to calling the above modes you have to set the PlayerObject using
setPlayerObject();
To use the 3rd person target mode you also need to set a TargetObject using
setTargetObject();
To use the static or tracking camera you need to set the position the camera should be placed suing
setCameraPosition(Point3F pos);
To use the follow terrain mode in 3rd person you give a bool to
setFollowTerrainMode(true/false);
To use the vertical freedom mode in 3rd person you give a bool to
setVerticalFreedomMode(true/false);This only works if the player object is a Player, because it uses the head movement.
The offset values in the datablock can be changed for the camera object via script using
get/setLookAtOffset(); get/setThirdPersonOffset(); get/setGodViewOffset();The setters take a Point3F as argument.
The orbit camera can be manipulated from script using
get/setOrbitMinMaxZoom() get/setOrbitMinMaxDeclination()The min/max take a Point2F
You can also manipulate the orbit camera directly by assigning values to the following variables
[code]
$advCamera::Yaw
$advCamera::Pitch
$advCamera::Zoom
$advCamera::azimuth
$advCamera::declination
$advCamera::zoomDistance
[code]
All camera modes coexist, so you can set the position, player object and target object once and then switch camera modes around as you see fit. Switching mode will not clear the old objects/positions.
#162
My game (different to the one I was writing before... ideas too grand, time too short) requires a semi free looking camera.
I have 4 objects I can control. I want to be able to switch between them at will.
I want the advanced camera set to Orbit mode to move smoothly between the objects I'm controlling.
Is this possible with the camera at the moment?
I'm also thinking of implementing the Actor resource so I cam make objects I'm not controlling use AI.. [http://www.garagegames.com/index.php?sec=mg&mod=resource&page=view&qid=8503
Will it take much work to support this?
08/26/2005 (5:28 am)
Question...My game (different to the one I was writing before... ideas too grand, time too short) requires a semi free looking camera.
I have 4 objects I can control. I want to be able to switch between them at will.
I want the advanced camera set to Orbit mode to move smoothly between the objects I'm controlling.
Is this possible with the camera at the moment?
I'm also thinking of implementing the Actor resource so I cam make objects I'm not controlling use AI.. [http://www.garagegames.com/index.php?sec=mg&mod=resource&page=view&qid=8503
Will it take much work to support this?
#163
09/02/2005 (7:52 pm)
Hi. I'm still a bit confused about the script API part, could someone give me an example of where to place it or where it should go? Thanks.
#164
(fixed with a suggestion on this page but seems to make the camera movement very choppy, any suggestions on how to fix this will be appreciated)
My issue now is more of a "how do I?" question.
I want to control my character using the orbit camera. In other words, when my orbit camera changes direction, I want to be able to read the angle it's facing and give this to the player so he can move too (actually I want to give it to a turret but for now, I think getting the info to the player is enough)
It's just that I don't know where to start.
I'm imagining some kind of CameraMoved event which has a new angle parameter so I can give it to the controlled object..
or is the solution simpler than that?
I'm only interested in the rotation around the Z-axis.
Anyone done anything like this?
09/06/2005 (5:45 am)
OK, I've implemented the camera now, it's cool. but I've noticed that Objects disappear if they go too far (fixed with a suggestion on this page but seems to make the camera movement very choppy, any suggestions on how to fix this will be appreciated)
My issue now is more of a "how do I?" question.
I want to control my character using the orbit camera. In other words, when my orbit camera changes direction, I want to be able to read the angle it's facing and give this to the player so he can move too (actually I want to give it to a turret but for now, I think getting the info to the player is enough)
It's just that I don't know where to start.
I'm imagining some kind of CameraMoved event which has a new angle parameter so I can give it to the controlled object..
or is the solution simpler than that?
I'm only interested in the rotation around the Z-axis.
Anyone done anything like this?
#165
I commented out the adv cam init in game.cs and the aiplayers appeared right away using the regular built-in camera. I would like to be able to see the game entities with the orbit camera.
Has anyone seen this behavior before? If so, where should I be looking in AdvCam.cc to be making changes?
09/06/2005 (1:01 pm)
I have implemented this resource as described above, however in conjunction with Dreamer's Adv MMORPG series which moves the player datablocks to a different path [ among other things =) ], any AIPlayer or world spawn entity (such as the crossbows and health patches) will be functional with the exception of being visable. (collision works...but they are totally invisible)I commented out the adv cam init in game.cs and the aiplayers appeared right away using the regular built-in camera. I would like to be able to see the game entities with the orbit camera.
Has anyone seen this behavior before? If so, where should I be looking in AdvCam.cc to be making changes?
#166
09/06/2005 (2:29 pm)
no, i can see everything just fine with any camera mode.
#167
09/09/2005 (9:25 am)
anyone getting problems with the camera starting from (0,0,0) even after setCameraPosition()?a
#168
My current copy of the camera is very different from whats in the resource. So it will be a while before I can attempt to fix it.
Anyone else care to try?
09/09/2005 (3:33 pm)
Yeah - there is some bug in there, that doesnt seem to set the camera position to anything but 0,0,0 - meaning things can go out of scope when moved far away from 0,0,0My current copy of the camera is very different from whats in the resource. So it will be a while before I can attempt to fix it.
Anyone else care to try?
#169
please list the new features if you can - thanks
09/09/2005 (3:40 pm)
id be willing to try it :)please list the new features if you can - thanks
#170
I've hacked it up to attempt fixing jittering I was experiencing during cut scenes.
Then I've redone how the orbit camera works with the offsets. When offset'ing in the x,y directions, you would get weird orbits. I now use x and y as "radius" values instead. I should have both - an offset and then a radius part, but it works for my current game.
Then lots of smaller modifications to the script interface.
My best guess at the problem at hand:
The camera moved around the new camera object introduced in Corys resource. That has a position and rotation of its own. The Adv Camera inherits from ShapeBase (if I recall), and the underlying transform is never updated.
All positions/rotations (thats my guess) in the code should be removed, and the underlying ShapeBase should be used instead - or the other way around. Just a guess, but thats most likely the only thing I can see that would introduce the going out of scope
09/09/2005 (3:51 pm)
New stuff in my local copy:I've hacked it up to attempt fixing jittering I was experiencing during cut scenes.
Then I've redone how the orbit camera works with the offsets. When offset'ing in the x,y directions, you would get weird orbits. I now use x and y as "radius" values instead. I should have both - an offset and then a radius part, but it works for my current game.
Then lots of smaller modifications to the script interface.
My best guess at the problem at hand:
The camera moved around the new camera object introduced in Corys resource. That has a position and rotation of its own. The Adv Camera inherits from ShapeBase (if I recall), and the underlying transform is never updated.
All positions/rotations (thats my guess) in the code should be removed, and the underlying ShapeBase should be used instead - or the other way around. Just a guess, but thats most likely the only thing I can see that would introduce the going out of scope
#171
09/09/2005 (5:05 pm)
i have god view mode and it's as if you're walking with lag. Any fix for that?
#172
09/10/2005 (12:39 am)
can you please send me the latest?
#173
Gimme a few days.
None of my changes touch on the 0,0,0 problem though if I recall
09/10/2005 (2:07 am)
I'll dl the code from this resource and do a diff. See if I can clean up my local mess and make it nicer + merge it.Gimme a few days.
None of my changes touch on the 0,0,0 problem though if I recall
#174
Here is what I do to duplicate the problem:
- Start up the example FPS
- Enter into the game
- ~ to open the command window
- I then exec a method in a script file that does this:
function InsertMyShape()
{
%shape = new Item () {
datablock = Crossbow;
rotation = "0 0 1 0";
};
MissionCleanup.add(%shape);
%shape.setTransform("350 320 240 0 0 1 0");
echo("Inserting Shape " @ %shape);
return %shape;
}
- I get the handle from the echo and zoom on over to where the Item shape should be... and it is there, but invisible.
Any thoughts as to why this is happening?
09/17/2005 (9:44 pm)
I am getting the same problem that Tom "epicglottis" MacGregor and others have posted about. If I insert a new shape the object that is placed into the world it is not visible. I can select the object and verify it's settings, but there is no graphical picture associated to it. the object functions like it is there, but it is not visible. If I remove the advanced camera I can insert new shapes without any problem. Some people have seen this issue, but others can't verify it. Does anyone out there have an idea as to why this is happening to some of us?Here is what I do to duplicate the problem:
- Start up the example FPS
- Enter into the game
- ~ to open the command window
- I then exec a method in a script file that does this:
function InsertMyShape()
{
%shape = new Item () {
datablock = Crossbow;
rotation = "0 0 1 0";
};
MissionCleanup.add(%shape);
%shape.setTransform("350 320 240 0 0 1 0");
echo("Inserting Shape " @ %shape);
return %shape;
}
- I get the handle from the echo and zoom on over to where the Item shape should be... and it is there, but invisible.
Any thoughts as to why this is happening?
#175
It displayed 3DS shapes correctly, but it didnt for DTS all the time. For DIF it works fine.
09/18/2005 (3:08 am)
hmmm wait a minute. I had a problem like this to, but i thought it was because of the .3DS resource... (maybe i shouldnt just apply every resource without testing the previous heh)It displayed 3DS shapes correctly, but it didnt for DTS all the time. For DIF it works fine.
#176
Got to track this down before IGC
*puts on todo list*
09/18/2005 (3:12 am)
Hmmm - I have it too. But not consistently. Thought it was some problem with our custom object code. Might be some random scoping issue.Got to track this down before IGC
*puts on todo list*
#177
09/18/2005 (3:25 am)
same here, the 3ds was our costum object code.
#178
09/18/2005 (5:42 am)
Could it have anything to do with the fact that the advanced camera doesn't overload the setTransform function like the regular camera to set its internal position when %shape.setTransform is called?
#179
I dont know if lineage has had any luck recoding that part. Else I'll give it a shoot very soon. If for nothing else to eliminate the possibility of this being the problem
09/18/2005 (6:09 am)
That is my best bet Aaron.I dont know if lineage has had any luck recoding that part. Else I'll give it a shoot very soon. If for nothing else to eliminate the possibility of this being the problem
#180
09/18/2005 (7:31 am)
Try this as a quick fix (can't test right now myself):// Set transform
void AdvancedCamera::setTransform(const MatrixF& mat)
{
setCameraPosition(mat.getPosition());
mRot = mat.toEuler();
Parent::setTransform(mat);
} 
Torque Owner Nicholas Chilton
the bool isServerConnection()
is now
isConnectionToServer()
So may need to take note and not just cut n paste :)