diff options
author | Tiger Wang <ziwei.tiger@hotmail.co.uk> | 2013-09-08 01:14:57 +0200 |
---|---|---|
committer | Tiger Wang <ziwei.tiger@hotmail.co.uk> | 2013-09-08 01:14:57 +0200 |
commit | c789a8ddf5840cf7861c73536279da8bbd9281c3 (patch) | |
tree | b310df7724901b570d442039f196b073a1397fd3 /source/Entities | |
parent | Implemented SteerVehicle packet. (diff) | |
download | cuberite-c789a8ddf5840cf7861c73536279da8bbd9281c3.tar cuberite-c789a8ddf5840cf7861c73536279da8bbd9281c3.tar.gz cuberite-c789a8ddf5840cf7861c73536279da8bbd9281c3.tar.bz2 cuberite-c789a8ddf5840cf7861c73536279da8bbd9281c3.tar.lz cuberite-c789a8ddf5840cf7861c73536279da8bbd9281c3.tar.xz cuberite-c789a8ddf5840cf7861c73536279da8bbd9281c3.tar.zst cuberite-c789a8ddf5840cf7861c73536279da8bbd9281c3.zip |
Diffstat (limited to 'source/Entities')
-rw-r--r-- | source/Entities/Boat.cpp | 84 | ||||
-rw-r--r-- | source/Entities/Boat.h | 34 |
2 files changed, 118 insertions, 0 deletions
diff --git a/source/Entities/Boat.cpp b/source/Entities/Boat.cpp new file mode 100644 index 000000000..f29766fc1 --- /dev/null +++ b/source/Entities/Boat.cpp @@ -0,0 +1,84 @@ + +// Minecart.cpp + +// Implements the cMinecart class representing a minecart in the world +// Indiana Jones! + +#include "Globals.h" +#include "Boat.h" +#include "../World.h" +#include "../ClientHandle.h" +#include "Player.h" + + + + + +cBoat::cBoat(double a_X, double a_Y, double a_Z) : + super(etBoat, a_X, a_Y, a_Z, 0.98, 0.7) +{ + SetMass(20.f); + SetMaxHealth(6); + SetHealth(6); +} + + + + +void cBoat::SpawnOn(cClientHandle & a_ClientHandle) +{ + a_ClientHandle.SendSpawnVehicle(*this, 1, 0); +} + + + + + +void cBoat::DoTakeDamage(TakeDamageInfo & TDI) +{ + super::DoTakeDamage(TDI); + + if (GetHealth() == 0) + { + Destroy(true); + } +} + + + + + +void cBoat::OnRightClicked(cPlayer & a_Player) +{ + if (m_Attachee != NULL) + { + if (m_Attachee->GetUniqueID() == a_Player.GetUniqueID()) + { + // This player is already sitting in, they want out. + a_Player.Detach(); + return; + } + + if (m_Attachee->IsPlayer()) + { + // Another player is already sitting in here, cannot attach + return; + } + + // Detach whatever is sitting in this minecart now: + m_Attachee->Detach(); + } + + // Attach the player to this minecart + a_Player.AttachTo(this); +} + + + + + +void cBoat::HandlePhysics(float a_Dt, cChunk & a_Chunk) +{ + super::HandlePhysics(a_Dt, a_Chunk); + BroadcastMovementUpdate(); +} diff --git a/source/Entities/Boat.h b/source/Entities/Boat.h new file mode 100644 index 000000000..439b73a09 --- /dev/null +++ b/source/Entities/Boat.h @@ -0,0 +1,34 @@ + +// Boat.h + +// Declares the cBoat class representing a minecart in the world + + + + + +#pragma once + +#include "Entity.h" +#include "../Item.h" + + + + + +class cBoat : + public cEntity +{ + typedef cEntity super; + +public: + CLASS_PROTODEF(cBoat); + + // cEntity overrides: + virtual void SpawnOn(cClientHandle & a_ClientHandle) override; + virtual void OnRightClicked(cPlayer & a_Player) override; + virtual void DoTakeDamage(TakeDamageInfo & TDI) override; + virtual void HandlePhysics(float a_Dt, cChunk & a_Chunk) override; + + cBoat(double a_X, double a_Y, double a_Z); +} ;
\ No newline at end of file |