mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-18 20:15:35 -04:00
More porting of Camera to C.
This commit is contained in:
parent
b9eb5f976c
commit
2281dffdbb
@ -170,27 +170,19 @@ namespace ClassicalSharp.GraphicsAPI {
|
|||||||
|
|
||||||
protected override int CreateTexture(int width, int height, IntPtr scan0, bool managedPool, bool mipmaps) {
|
protected override int CreateTexture(int width, int height, IntPtr scan0, bool managedPool, bool mipmaps) {
|
||||||
D3D.Texture texture = null;
|
D3D.Texture texture = null;
|
||||||
Usage usage = (mipmaps && AutoMipmaps) ? Usage.None : Usage.None;
|
int levels = mipmaps ? 5 : 1;
|
||||||
int levels = (mipmaps && AutoMipmaps) ? 5 : 1;
|
|
||||||
|
|
||||||
if (managedPool) {
|
if (managedPool) {
|
||||||
texture = device.CreateTexture(width, height, levels, usage, Format.A8R8G8B8, Pool.Managed);
|
texture = device.CreateTexture(width, height, levels, Usage.None, Format.A8R8G8B8, Pool.Managed);
|
||||||
texture.SetData(0, LockFlags.None, scan0, width * height * 4);
|
texture.SetData(0, LockFlags.None, scan0, width * height * 4);
|
||||||
|
|
||||||
// TODO: FIX THIS MEMORY LEAK!!!!!
|
// TODO: FIX THIS MEMORY LEAK!!!!!
|
||||||
if (mipmaps) DoMipmaps(texture, width, height, scan0);
|
if (mipmaps) DoMipmaps(texture, width, height, scan0);
|
||||||
|
|
||||||
/*if (mipmaps && AutoMipmaps) {
|
|
||||||
DoMipmaps(texture, 1, width / 2, height / 2, width, height, scan0);
|
|
||||||
DoMipmaps(texture, 2, width / 4, height / 4, width, height, scan0);
|
|
||||||
DoMipmaps(texture, 3, width / 8, height / 8, width, height, scan0);
|
|
||||||
DoMipmaps(texture, 4, width / 16, height / 16, width, height, scan0);
|
|
||||||
}*/
|
|
||||||
} else {
|
} else {
|
||||||
D3D.Texture sys = device.CreateTexture(width, height, levels, usage, Format.A8R8G8B8, Pool.SystemMemory);
|
D3D.Texture sys = device.CreateTexture(width, height, levels, Usage.None, Format.A8R8G8B8, Pool.SystemMemory);
|
||||||
sys.SetData(0, LockFlags.None, scan0, width * height * 4);
|
sys.SetData(0, LockFlags.None, scan0, width * height * 4);
|
||||||
|
|
||||||
texture = device.CreateTexture(width, height, levels, usage, Format.A8R8G8B8, Pool.Default);
|
texture = device.CreateTexture(width, height, levels, Usage.None, Format.A8R8G8B8, Pool.Default);
|
||||||
device.UpdateTexture(sys, texture);
|
device.UpdateTexture(sys, texture);
|
||||||
sys.Dispose();
|
sys.Dispose();
|
||||||
}
|
}
|
||||||
|
@ -147,16 +147,17 @@ namespace ClassicalSharp {
|
|||||||
if (!game.ViewBobbing) { tiltM = Matrix4.Identity; return; }
|
if (!game.ViewBobbing) { tiltM = Matrix4.Identity; return; }
|
||||||
LocalPlayer p = game.LocalPlayer;
|
LocalPlayer p = game.LocalPlayer;
|
||||||
Matrix4 tiltY, velX;
|
Matrix4 tiltY, velX;
|
||||||
|
|
||||||
Matrix4.RotateZ(out tiltM, -p.tilt.tiltX * p.anim.bobStrength);
|
Matrix4.RotateZ(out tiltM, -p.tilt.tiltX * p.anim.bobStrength);
|
||||||
Matrix4.RotateX(out tiltY, Math.Abs(p.tilt.tiltY) * 3 * p.anim.bobStrength);
|
Matrix4.RotateX(out tiltY, Math.Abs(p.tilt.tiltY) * 3 * p.anim.bobStrength);
|
||||||
tiltM *= tiltY;
|
Matrix4.Mult(out tiltM, ref tiltM, ref tiltY);
|
||||||
|
|
||||||
bobbingHor = (p.anim.bobbingHor * 0.3f) * p.anim.bobStrength;
|
bobbingHor = (p.anim.bobbingHor * 0.3f) * p.anim.bobStrength;
|
||||||
bobbingVer = (p.anim.bobbingVer * 0.6f) * p.anim.bobStrength;
|
bobbingVer = (p.anim.bobbingVer * 0.6f) * p.anim.bobStrength;
|
||||||
|
|
||||||
float vel = Utils.Lerp(p.OldVelocity.Y + 0.08f, p.Velocity.Y + 0.08f, t);
|
float vel = Utils.Lerp(p.OldVelocity.Y + 0.08f, p.Velocity.Y + 0.08f, t);
|
||||||
Matrix4.RotateX(out velX, -vel * 0.05f * p.tilt.velTiltStrength / velTiltScale);
|
Matrix4.RotateX(out velX, -vel * 0.05f * p.tilt.velTiltStrength / velTiltScale);
|
||||||
tiltM *= velX;
|
Matrix4.Mult(out tiltM, ref tiltM, ref velX);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -103,23 +103,28 @@ void PerspectiveCamera_UpdateMouse(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void PerspectiveCamera_CalcViewBobbing(Real32 t, Real32 velTiltScale) {
|
void PerspectiveCamera_CalcViewBobbing(Real32 t, Real32 velTiltScale) {
|
||||||
if (!Game_ViewBobbing) { Camera_TiltMatrix = Matrix_Identity; return; }
|
if (!Game_ViewBobbing) { Camera_TiltM = Matrix_Identity; return; }
|
||||||
LocalPlayer p = game.LocalPlayer;
|
LocalPlayer* p = &LocalPlayer_Instance;
|
||||||
Matrix tiltY, velX;
|
Entity* e = &p->Base.Base;
|
||||||
Matrix_RotateZ(out tiltM, -p.tilt.tiltX * p.anim.bobStrength);
|
Matrix Camera_tiltY, Camera_velX;
|
||||||
Matrix_RotateX(out tiltY, Math.Abs(p.tilt.tiltY) * 3 * p.anim.bobStrength);
|
|
||||||
tiltM *= tiltY;
|
|
||||||
|
|
||||||
bobbingHor = (p.anim.bobbingHor * 0.3f) * p.anim.bobStrength;
|
Matrix_RotateZ(&Camera_TiltM, -p->Tilt.TiltX * e->Anim.BobStrength);
|
||||||
bobbingVer = (p.anim.bobbingVer * 0.6f) * p.anim.bobStrength;
|
Matrix_RotateX(&Camera_tiltY, Math_AbsF(p->Tilt.TiltY) * 3.0f * e->Anim.BobStrength);
|
||||||
|
Matrix_MulBy(&Camera_TiltM, &Camera_tiltY);
|
||||||
|
|
||||||
float vel = Utils.Lerp(p.OldVelocity.Y + 0.08f, p.Velocity.Y + 0.08f, t);
|
Camera_BobbingHor = (e->Anim.BobbingHor * 0.3f) * e->Anim.BobStrength;
|
||||||
Matrix4.RotateX(out velX, -vel * 0.05f * p.tilt.velTiltStrength / velTiltScale);
|
Camera_BobbingVer = (e->Anim.BobbingVer * 0.6f) * e->Anim.BobStrength;
|
||||||
tiltM *= velX;
|
|
||||||
|
Real32 vel = Math_Lerp(e->OldVelocity.Y + 0.08f, e->Velocity.Y + 0.08f, t);
|
||||||
|
Matrix_RotateX(&Camera_velX, -vel * 0.05f * p->Tilt.VelTiltStrength / velTiltScale);
|
||||||
|
Matrix_MulBy(&Camera_TiltM, &Camera_velX);
|
||||||
}
|
}
|
||||||
|
|
||||||
void PerspectiveCamera_Init(Camera* cam) {
|
void PerspectiveCamera_Init(Camera* cam) {
|
||||||
|
cam->GetProjection = PerspectiveCamera_GetProjection;
|
||||||
|
cam->UpdateMouse = PerspectiveCamera_UpdateMouse;
|
||||||
|
cam->RegrabMouse = PerspectiveCamera_RegrabMouse;
|
||||||
|
cam->GetPickedBlock = PerspectiveCamera_GetPickedBlock;
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ThirdPersonCamera : PerspectiveCamera {
|
public class ThirdPersonCamera : PerspectiveCamera {
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Tilt matrix applied to the active camera. */
|
/* Tilt matrix applied to the active camera. */
|
||||||
Matrix Camera_TiltMatrix;
|
Matrix Camera_TiltM;
|
||||||
/* Bobbing applied to the active camera. */
|
/* Bobbing applied to the active camera. */
|
||||||
Real32 Camera_BobbingVer, Camera_BobbingHor;
|
Real32 Camera_BobbingVer, Camera_BobbingHor;
|
||||||
|
|
||||||
|
@ -129,15 +129,15 @@ void TiltComp_GetCurrent(TiltComp* anim, Real32 t) {
|
|||||||
anim->TiltY = Math_Sin(pAnim->WalkTime) * pAnim->Swing * (0.15f * MATH_DEG2RAD);
|
anim->TiltY = Math_Sin(pAnim->WalkTime) * pAnim->Swing * (0.15f * MATH_DEG2RAD);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HacksComponent_SetAll(HacksComponent* hacks, bool allowed) {
|
void HacksComponent_SetAll(HacksComp* hacks, bool allowed) {
|
||||||
hacks->CanAnyHacks = allowed; hacks->CanFly = allowed;
|
hacks->CanAnyHacks = allowed; hacks->CanFly = allowed;
|
||||||
hacks->CanNoclip = allowed; hacks->CanRespawn = allowed;
|
hacks->CanNoclip = allowed; hacks->CanRespawn = allowed;
|
||||||
hacks->CanSpeed = allowed; hacks->CanPushbackBlocks = allowed;
|
hacks->CanSpeed = allowed; hacks->CanPushbackBlocks = allowed;
|
||||||
hacks->CanUseThirdPersonCamera = allowed;
|
hacks->CanUseThirdPersonCamera = allowed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HacksComponent_Init(HacksComponent* hacks) {
|
void HacksComponent_Init(HacksComp* hacks) {
|
||||||
Platform_MemSet(hacks, 0, sizeof(HacksComponent));
|
Platform_MemSet(hacks, 0, sizeof(HacksComp));
|
||||||
HacksComponent_SetAll(hacks, true);
|
HacksComponent_SetAll(hacks, true);
|
||||||
hacks->SpeedMultiplier = 10.0f;
|
hacks->SpeedMultiplier = 10.0f;
|
||||||
hacks->Enabled = true;
|
hacks->Enabled = true;
|
||||||
@ -148,15 +148,15 @@ void HacksComponent_Init(HacksComponent* hacks) {
|
|||||||
hacks->HacksFlags = String_FromRawBuffer(&hacks->HacksFlagsBuffer[0], 128);
|
hacks->HacksFlags = String_FromRawBuffer(&hacks->HacksFlagsBuffer[0], 128);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HacksComponent_CanJumpHigher(HacksComponent* hacks) {
|
bool HacksComponent_CanJumpHigher(HacksComp* hacks) {
|
||||||
return hacks->Enabled && hacks->CanAnyHacks && hacks->CanSpeed;
|
return hacks->Enabled && hacks->CanAnyHacks && hacks->CanSpeed;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HacksComponent_Floating(HacksComponent* hacks) {
|
bool HacksComponent_Floating(HacksComp* hacks) {
|
||||||
return hacks->Noclip || hacks->Flying;
|
return hacks->Noclip || hacks->Flying;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HacksComponent_ParseHorizontalSpeed(HacksComponent* hacks) {
|
void HacksComponent_ParseHorizontalSpeed(HacksComp* hacks) {
|
||||||
String* joined = &hacks->HacksFlags;
|
String* joined = &hacks->HacksFlags;
|
||||||
String horSpeed = String_FromConstant("horspeed=");
|
String horSpeed = String_FromConstant("horspeed=");
|
||||||
Int32 start = String_IndexOfString(joined, &horSpeed);
|
Int32 start = String_IndexOfString(joined, &horSpeed);
|
||||||
@ -172,7 +172,7 @@ void HacksComponent_ParseHorizontalSpeed(HacksComponent* hacks) {
|
|||||||
hacks->MaxSpeedMultiplier = speed;
|
hacks->MaxSpeedMultiplier = speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
void HacksComponent_ParseFlag(HacksComponent* hacks, const UInt8* incFlag, const UInt8* excFlag, bool* target) {
|
void HacksComponent_ParseFlag(HacksComp* hacks, const UInt8* incFlag, const UInt8* excFlag, bool* target) {
|
||||||
String include = String_FromReadonly(incFlag);
|
String include = String_FromReadonly(incFlag);
|
||||||
String exclude = String_FromReadonly(excFlag);
|
String exclude = String_FromReadonly(excFlag);
|
||||||
String* joined = &hacks->HacksFlags;
|
String* joined = &hacks->HacksFlags;
|
||||||
@ -184,7 +184,7 @@ void HacksComponent_ParseFlag(HacksComponent* hacks, const UInt8* incFlag, const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void HacksComponent_ParseAllFlag(HacksComponent* hacks, const UInt8* incFlag, const UInt8* excFlag) {
|
void HacksComponent_ParseAllFlag(HacksComp* hacks, const UInt8* incFlag, const UInt8* excFlag) {
|
||||||
String include = String_FromReadonly(incFlag);
|
String include = String_FromReadonly(incFlag);
|
||||||
String exclude = String_FromReadonly(excFlag);
|
String exclude = String_FromReadonly(excFlag);
|
||||||
String* joined = &hacks->HacksFlags;
|
String* joined = &hacks->HacksFlags;
|
||||||
@ -198,7 +198,7 @@ void HacksComponent_ParseAllFlag(HacksComponent* hacks, const UInt8* incFlag, co
|
|||||||
|
|
||||||
/* Sets the user type of this user. This is used to control permissions for grass,
|
/* Sets the user type of this user. This is used to control permissions for grass,
|
||||||
bedrock, water and lava blocks on servers that don't support CPE block permissions. */
|
bedrock, water and lava blocks on servers that don't support CPE block permissions. */
|
||||||
void HacksComponent_SetUserType(HacksComponent* hacks, UInt8 value) {
|
void HacksComponent_SetUserType(HacksComp* hacks, UInt8 value) {
|
||||||
bool isOp = value >= 100 && value <= 127;
|
bool isOp = value >= 100 && value <= 127;
|
||||||
hacks->UserType = value;
|
hacks->UserType = value;
|
||||||
Block_CanPlace[BlockID_Bedrock] = isOp;
|
Block_CanPlace[BlockID_Bedrock] = isOp;
|
||||||
@ -212,7 +212,7 @@ void HacksComponent_SetUserType(HacksComponent* hacks, UInt8 value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Disables any hacks if their respective CanHackX value is set to false. */
|
/* Disables any hacks if their respective CanHackX value is set to false. */
|
||||||
void HacksComponent_CheckConsistency(HacksComponent* hacks) {
|
void HacksComponent_CheckConsistency(HacksComp* hacks) {
|
||||||
if (!hacks->CanFly || !hacks->Enabled) {
|
if (!hacks->CanFly || !hacks->Enabled) {
|
||||||
hacks->Flying = false; hacks->FlyingDown = false; hacks->FlyingUp = false;
|
hacks->Flying = false; hacks->FlyingDown = false; hacks->FlyingUp = false;
|
||||||
}
|
}
|
||||||
@ -235,7 +235,7 @@ void HacksComponent_CheckConsistency(HacksComponent* hacks) {
|
|||||||
/* Updates ability to use hacks, and raises HackPermissionsChanged event.
|
/* Updates ability to use hacks, and raises HackPermissionsChanged event.
|
||||||
Parses hack flags specified in the motd and/or name of the server.
|
Parses hack flags specified in the motd and/or name of the server.
|
||||||
Recognises +/-hax, +/-fly, +/-noclip, +/-speed, +/-respawn, +/-ophax, and horspeed=xyz */
|
Recognises +/-hax, +/-fly, +/-noclip, +/-speed, +/-respawn, +/-ophax, and horspeed=xyz */
|
||||||
void HacksComponent_UpdateState(HacksComponent* hacks) {
|
void HacksComponent_UpdateState(HacksComp* hacks) {
|
||||||
HacksComponent_SetAll(hacks, true);
|
HacksComponent_SetAll(hacks, true);
|
||||||
if (hacks->HacksFlags.length == 0) return;
|
if (hacks->HacksFlags.length == 0) return;
|
||||||
|
|
||||||
|
@ -96,26 +96,26 @@ typedef struct HacksComponent_ {
|
|||||||
UInt8 HacksFlagsBuffer[String_BufferSize(128)];
|
UInt8 HacksFlagsBuffer[String_BufferSize(128)];
|
||||||
/* The actual hack flags usage string.*/
|
/* The actual hack flags usage string.*/
|
||||||
String HacksFlags;
|
String HacksFlags;
|
||||||
} HacksComponent;
|
} HacksComp;
|
||||||
|
|
||||||
/* Initalises the state of this HacksComponent. */
|
/* Initalises the state of this HacksComponent. */
|
||||||
void HacksComponent_Init(HacksComponent* hacks);
|
void HacksComponent_Init(HacksComp* hacks);
|
||||||
|
|
||||||
/* Returns whether hacks flags allow for jumping higher usage. */
|
/* Returns whether hacks flags allow for jumping higher usage. */
|
||||||
bool HacksComponent_CanJumpHigher(HacksComponent* hacks);
|
bool HacksComponent_CanJumpHigher(HacksComp* hacks);
|
||||||
|
|
||||||
/* Returns whether noclip or flying modes are on.*/
|
/* Returns whether noclip or flying modes are on.*/
|
||||||
bool HacksComponent_Floating(HacksComponent* hacks);
|
bool HacksComponent_Floating(HacksComp* hacks);
|
||||||
|
|
||||||
/* Sets the user type of this user. This is used to control permissions for grass,
|
/* Sets the user type of this user. This is used to control permissions for grass,
|
||||||
bedrock, water and lava blocks on servers that don't support CPE block permissions. */
|
bedrock, water and lava blocks on servers that don't support CPE block permissions. */
|
||||||
void HacksComponent_SetUserType(HacksComponent* hacks, UInt8 value);
|
void HacksComponent_SetUserType(HacksComp* hacks, UInt8 value);
|
||||||
|
|
||||||
/* Disables any hacks if their respective CanHackX value is set to false. */
|
/* Disables any hacks if their respective CanHackX value is set to false. */
|
||||||
void HacksComponent_CheckConsistency(HacksComponent* hacks);
|
void HacksComponent_CheckConsistency(HacksComp* hacks);
|
||||||
|
|
||||||
/* Updates ability to use hacks, and raises UserEvents_HackPermissionsChanged event.
|
/* Updates ability to use hacks, and raises UserEvents_HackPermissionsChanged event.
|
||||||
Parses hack flags specified in the motd and/or name of the server.
|
Parses hack flags specified in the motd and/or name of the server.
|
||||||
Recognises +/-hax, +/-fly, +/-noclip, +/-speed, +/-respawn, +/-ophax, and horspeed=xyz */
|
Recognises +/-hax, +/-fly, +/-noclip, +/-speed, +/-respawn, +/-ophax, and horspeed=xyz */
|
||||||
void HacksComponent_UpdateState(HacksComponent* hacks);
|
void HacksComponent_UpdateState(HacksComp* hacks);
|
||||||
#endif
|
#endif
|
@ -19,10 +19,12 @@ typedef struct LocalPlayer_ {
|
|||||||
Vector3 Spawn;
|
Vector3 Spawn;
|
||||||
/* Orientation set to when player respawns.*/
|
/* Orientation set to when player respawns.*/
|
||||||
Real32 SpawnRotY, SpawnHeadX;
|
Real32 SpawnRotY, SpawnHeadX;
|
||||||
/* Hacks state of this player. */
|
/* Hacks state of the player. */
|
||||||
HacksComponent Hacks;
|
HacksComp Hacks;
|
||||||
/* Distance (in blocks) that players are allowed to reach to and interact/modify blocks in. */
|
/* Distance (in blocks) that players are allowed to reach to and interact/modify blocks in. */
|
||||||
Real32 ReachDistance;
|
Real32 ReachDistance;
|
||||||
|
/* Tilt animation state of the player. */
|
||||||
|
TiltComp Tilt;
|
||||||
} LocalPlayer;
|
} LocalPlayer;
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user