summary refs log tree commit diff
path: root/src/EntityComponents.h
diff options
context:
space:
mode:
authorWlodekM <[email protected]>2024-06-16 10:35:45 +0300
committerWlodekM <[email protected]>2024-06-16 10:35:45 +0300
commitabef6da56913f1c55528103e60a50451a39628b1 (patch)
treeb3c8092471ecbb73e568cd0d336efa0e7871ee8d /src/EntityComponents.h
initial commit
Diffstat (limited to 'src/EntityComponents.h')
-rw-r--r--src/EntityComponents.h135
1 files changed, 135 insertions, 0 deletions
diff --git a/src/EntityComponents.h b/src/EntityComponents.h
new file mode 100644
index 0000000..30f2882
--- /dev/null
+++ b/src/EntityComponents.h
@@ -0,0 +1,135 @@
+#ifndef CC_ENTITY_COMPONENTS_H
+#define CC_ENTITY_COMPONENTS_H
+#include "Vectors.h"
+#include "Constants.h"
+/* Various components for entities.
+   Copyright 2014-2023 ClassiCube | Licensed under BSD-3
+*/
+
+struct Entity;
+struct LocationUpdate;
+struct LocalPlayer;
+
+/* Entity component that performs model animation depending on movement speed and time */
+struct AnimatedComp {
+	float BobbingHor, BobbingVer, BobbingModel;
+	float WalkTime, Swing, BobStrength;
+	float WalkTimeO, WalkTimeN, SwingO, SwingN, BobStrengthO, BobStrengthN;
+
+	float LeftLegX, LeftLegZ, RightLegX, RightLegZ;
+	float LeftArmX, LeftArmZ, RightArmX, RightArmZ;
+};
+
+void AnimatedComp_Init(struct AnimatedComp* anim);
+void AnimatedComp_Update(struct Entity* entity, Vec3 oldPos, Vec3 newPos, float delta);
+void AnimatedComp_GetCurrent(struct Entity* entity, float t);
+
+/* Entity component that performs tilt animation depending on movement speed and time */
+struct TiltComp {
+	float TiltX, TiltY, VelTiltStrength;
+	float VelTiltStrengthO, VelTiltStrengthN;
+};
+
+void TiltComp_Init(struct TiltComp* anim);
+void TiltComp_Update(struct LocalPlayer* p, struct TiltComp* anim, float delta);
+void TiltComp_GetCurrent(struct LocalPlayer* p, struct TiltComp* anim, float t);
+
+/* Entity component that performs management of hack states */
+struct HacksComp {
+	cc_bool IsOp;
+	cc_bool Floating; /* true if NoClip or Flying */
+	/* Speed player move at, relative to normal speed, when the 'speeding' input binding is active */
+	float SpeedMultiplier;
+	/* Whether blocks that the player places that intersect themselves, should cause the player to
+	be pushed back in the opposite direction of the placed block */
+	cc_bool PushbackPlacing;
+	/* Whether the player should be able to step up whole blocks, instead of just slabs */
+	cc_bool FullBlockStep;
+	/* Whether user has allowed hacks as an option. Note 'can use X' set by the server override this */
+	cc_bool Enabled;
+
+	cc_bool CanAnyHacks, CanUseThirdPerson, CanSpeed, CanFly;
+	cc_bool CanRespawn, CanNoclip, CanPushbackBlocks,CanSeeAllNames;
+	cc_bool CanDoubleJump, CanBePushed;
+	float BaseHorSpeed;
+	/* Max amount of jumps the player can perform */
+	int MaxJumps;
+
+	/* Whether the player should slide after letting go of movement buttons in noclip */
+	cc_bool NoclipSlide;
+	/* Whether the player has allowed the usage of fast double jumping abilities */
+	cc_bool WOMStyleHacks; 
+
+	cc_bool Noclip, Flying, FlyingUp, FlyingDown, Speeding, HalfSpeeding;
+	float MaxHorSpeed;
+	cc_string HacksFlags;
+	char __HacksFlagsBuffer[STRING_SIZE * 2];	
+};
+
+void HacksComp_Init(struct HacksComp* hacks);
+cc_bool HacksComp_CanJumpHigher(struct HacksComp* hacks);
+/* Determines hacks permissions based on flags, then calls HacksComp_Update */
+/* e.g. +ophax allows all hacks if op, -push disables entity pushing */
+void HacksComp_RecheckFlags(struct HacksComp* hacks);
+/* Updates state based on permissions (e.g. Flying set to false if CanFly is false) */
+/* Raises UserEvents.HackPermsChanged */
+void HacksComp_Update(struct HacksComp* hacks);
+void HacksComp_SetFlying(struct HacksComp* hacks, cc_bool flying);
+void HacksComp_SetNoclip(struct HacksComp* hacks, cc_bool noclip);
+float HacksComp_CalcSpeedFactor(struct HacksComp* hacks, cc_bool canSpeed);
+
+#define InterpComp_Layout int RotYCount; float RotYStates[15];
+/* Base entity component that performs interpolation of position and orientation */
+struct InterpComp { InterpComp_Layout };
+
+void LocalInterpComp_SetLocation(struct InterpComp* interp, struct LocationUpdate* update, struct Entity* e);
+void LocalInterpComp_AdvanceState(struct InterpComp* interp, struct Entity* e);
+
+/* Represents a network orientation state */
+struct NetInterpAngles { float Pitch, Yaw, RotX, RotZ; };
+
+/* Entity component that performs interpolation for network players */
+struct NetInterpComp {
+	InterpComp_Layout
+	/* Last known position and orientation sent by the server */
+	Vec3 CurPos; struct NetInterpAngles CurAngles;
+	/* Interpolated position and orientation state */
+	int PositionsCount, AnglesCount;
+	Vec3 Positions[10]; struct NetInterpAngles Angles[10];
+};
+
+void NetInterpComp_SetLocation(struct NetInterpComp* interp, struct LocationUpdate* update, struct Entity* e);
+void NetInterpComp_AdvanceState(struct NetInterpComp* interp, struct Entity* e);
+
+/* Entity component that performs collision detection */
+struct CollisionsComp {
+	struct Entity* Entity;
+	cc_bool HitXMin, HitYMin, HitZMin, HitXMax, HitYMax, HitZMax, WasOn;
+	float StepSize;
+};
+cc_bool Collisions_HitHorizontal(struct CollisionsComp* comp);
+void Collisions_MoveAndWallSlide(struct CollisionsComp* comp);
+
+/* Entity component that performs collisions */
+struct PhysicsComp {
+	cc_bool UseLiquidGravity; /* used by BlockDefinitions */
+	cc_bool CanLiquidJump, Jumping;
+	int MultiJumps;
+	struct Entity* Entity;
+
+	float JumpVel, UserJumpVel, ServerJumpVel;
+	struct HacksComp* Hacks;
+	struct CollisionsComp* Collisions;
+};
+
+void PhysicsComp_Init(struct PhysicsComp* comp, struct Entity* entity);
+void PhysicsComp_UpdateVelocityState(struct PhysicsComp* comp);
+void PhysicsComp_DoNormalJump(struct PhysicsComp* comp);
+void PhysicsComp_PhysicsTick(struct PhysicsComp* comp, Vec3 vel);
+float PhysicsComp_CalcJumpVelocity(float jumpHeight);
+double PhysicsComp_CalcMaxHeight(float u);
+void PhysicsComp_DoEntityPush(struct Entity* entity);
+
+/* Entity component that plays block step sounds */
+void SoundComp_Tick(struct LocalPlayer* p, cc_bool wasOnGround);
+#endif