How to make a rotating camera on class selection -
Lorenc_ - 22.10.2011
A tutorial to creating camera rotating
Why? What? Why'd you make this?
Out of boredom, I decided to make a class rotating camera tutorial. Would be nice for A/D servers to have such a feature.
What you'll need in this tutorial:- A little bit about trignometry (using COS, SIN)
- A brain (which you all have :P)
Okay, note that this is not even close to what
Dice7 wrote a long time ago on his class rotating camera selection. So yeah, don't say it is.
The camera rotates around the player and goes by the circumference of this circle. Some options are tweak-able to adjust the camera though you must get rid of your current camera inside of your gamemode before using.
Basic structure - Diagram
Lets script!
Variables
Using variables/constants looks more neater than defining for me (yes, I'm creating some 32 bit variables facepalm.jpg)
pawn Code:
/* ** Server Data ** */
const // Constant values, you may change it to "new" if they're going to be modified once rotating.
Float: spawnX = 0.0, // The SPAWN X you're willing to work from
Float: spawnY = 0.0, // The SPAWN Y you're willing to work from
Float: spawnZ = 5.0, // The SPAWN Y you're willing to work from
Float: camRadius = 20.0, // The radius of the camera rotating
Float: camSpeed = 1.25, // The speed of the camera moving around. MUST NOT BE NULL; IT WONT MOVE IF SO!
Float: camHeight = 6.0 // The height of the camera once moving!
;
/* ** Player Data ** */
new
prc_Timer [MAX_PLAYERS], // The timer for the movement.
bool: prc_Moving [MAX_PLAYERS], // Check if the player is moving his camera
Float: prc_Degree [MAX_PLAYERS] // The degree counter to show which the player is on.
;
forward MoveCamera(playerid); // We'll add this here to prevent future warnings..
OnPlayerRequestClass
pawn Code:
public OnPlayerRequestClass(playerid, classid)
{
SetPlayerPos(playerid, spawnX, spawnY, spawnZ); // Set the player at those 3 const spawn values from before.
if(prc_Moving[playerid] == false) // Check whether the camera is already set.
{
prc_Degree[playerid] = 0; // Reseting the variable
prc_Timer[playerid] = SetTimerEx("MoveCamera", 75, true, "d", playerid); // Setting the timer
prc_Moving[playerid] = true; // okay, now we're going to activate the moving variable
}
return 1;
}
Camera movement
pawn Code:
public MoveCamera(playerid) // The core of the movement
{
static // Static for the repeation :O
Float: nX, // The newX
Float: nY // the newY
;
if(prc_Moving[playerid] == false) // check whether the timer is activated and the variable isn't.
{
KillTimer(prc_Timer[playerid]); // Killing the timer, ofc we don't want a 75 ms timer always running.
prc_Degree[playerid] = 0; // Reseting the variable
}
if(prc_Degree[playerid] >= 360) prc_Degree[playerid] = 0; // If the rotation is past 360, reset to 0 (looks more neater)
prc_Degree[playerid] += camSpeed; // For some smooth rotation, I'm using 1.25
nX = spawnX + camRadius * floatcos(prc_Degree[playerid], degrees);
nY = spawnY + camRadius * floatsin(prc_Degree[playerid], degrees);
// So, we're going to get the spawn axis and add the radius in to them.
// Then we use the trignometric functions to apply such angles to the movement
// making it look nice.
SetPlayerCameraPos(playerid, nX, nY, spawnZ + camHeight); // Setting the Camera position around the player
SetPlayerCameraLookAt(playerid, spawnX, spawnY, spawnZ); // Looking at the player position from there :)
SetPlayerFacingAngle(playerid, prc_Degree[playerid] - 90.0); // to make it face the camera :)
return 1;
}
OnPlayerDisconnect
pawn Code:
public OnPlayerDisconnect(playerid, reason)
{
if(prc_Moving[playerid] == true)
{
KillTimer(prc_Timer[playerid]); // Killing the timer, ofc we don't want a 75 ms timer always running.
prc_Degree[playerid] = 0; // Reseting the variable
prc_Moving[playerid] = false; // Reseting the variable
}
return 1;
}
OnPlayerSpawn
pawn Code:
public OnPlayerSpawn(playerid)
{
if(prc_Moving[playerid] == true)
{
KillTimer(prc_Timer[playerid]); // Killing the timer, ofc we don't want a 75 ms timer always running.
prc_Degree[playerid] = 0; // Reseting the variable
prc_Moving[playerid] = false; // Reseting the variable
SetCameraBehindPlayer(playerid); // Preventing bugs from appearing.
}
return 1;
}
Screenshots
I rather have screenies than a video, since ******* wrecks the video quality for me - Uploaded with imageShack, sorry for people that cannot view it!
Download
Example gamemode with the default structure
Problems?
If there is any problems which mostly said not to be, please report them and I'll fix them.
Re: How to make a rotating camera on class selection -
©•Riddy•© - 22.10.2011
Looking good Lorenc, Gonna use it on BlackOps or it is on? :P
Basic tutorial, could help me in the future
Re: How to make a rotating camera on class selection -
Lorenc_ - 22.10.2011
Quote:
Originally Posted by ©•Riddy•©
Looking good Lorenc, Gonna use it on BlackOps or it is on? :P
Basic tutorial, could help me in the future
|
Yeah I might for 0.3d, basically rotating the player just to see how his player looks
Still have a lot to improve on that gamemode for 0.3d, hoping for it to be the most epic/realistic CoD server around (I would say yes in realism of the server between the actual blackops game)
Thanks for the comment Riddy
Re: How to make a rotating camera on class selection -
Xx_OutLawZ_xX - 22.10.2011
Looks good
Re: How to make a rotating camera on class selection -
vassilis - 22.10.2011
Hmm its good however you could explain better.Btw its good tutorial
GG.
Re: How to make a rotating camera on class selection - Max_Coldheart - 22.10.2011
Looking good once again ! Good job.
Re: How to make a rotating camera on class selection -
SmiT - 22.10.2011
Nice one. Good job.
Re: How to make a rotating camera on class selection -
System64 - 22.10.2011
wow awesome, I was always wondering how to create something like this
Re: How to make a rotating camera on class selection -
Twizted - 22.10.2011
Awesome work Lorenc.
Re: How to make a rotating camera on class selection -
Lorenc_ - 22.10.2011
Quote:
Originally Posted by vassilis
Hmm its good however you could explain better.Btw its good tutorial GG.
|
IF YOU DON'T KNOW TRIGNOMETRY THEN READ THIS
Re: How to make a rotating camera on class selection -
vassilis - 22.10.2011
lmao of course i know trigonometry and i am not talking about that i am talking about that,however its a very good tutorial which is full of experience
Re: How to make a rotating camera on class selection -
juraska - 22.10.2011
The example gamemode with the default structure is doesn't work!
btw: nice tutorial, I just looking tutorial like that
EDIT: That's works - thanks
Re: How to make a rotating camera on class selection -
Lorenc_ - 22.10.2011
Quote:
Originally Posted by juraska
The example gamemode with the default structure is doesn't work!
btw: nice tutorial, I just looking tutorial like that
EDIT: That's works - thanks
|
lol
Thanks for the comments.
Re: How to make a rotating camera on class selection -
vassilis - 22.10.2011
Lorenc i added your account system to the useful tutorials topic
Regards,
Re: How to make a rotating camera on class selection -
Luis- - 23.10.2011
Thanks for this, been wanting to know how to do it for quite a while.
Re: How to make a rotating camera on class selection -
Lorenc_ - 26.10.2011
No problem, suggestions are welcome :3
Re: How to make a rotating camera on class selection -
Niko_boy - 26.10.2011
Great Job
When i firstly Look on it , i thought its the old topic which other guy made.
But when i read it I came to know that it even looks better
Keep It Up !!
Re: How to make a rotating camera on class selection -
Michael@Belgium - 26.10.2011
Awesome !
New idea for my future server
Re: How to make a rotating camera on class selection -
Aira - 04.11.2011
Nice man! But can i ask something? Why does the player move too?
Re: How to make a rotating camera on class selection -
Lorenc_ - 19.11.2011
Quote:
Originally Posted by [RaZ]Hal_Moore
Nice man! But can i ask something? Why does the player move too?
|
I just wanted something fancy going on though you can remove that by deleting the line "SetPlayerFacingAngle"