From c789a8ddf5840cf7861c73536279da8bbd9281c3 Mon Sep 17 00:00:00 2001 From: Tiger Wang Date: Sun, 8 Sep 2013 00:14:57 +0100 Subject: Initial boat support + Boats are saved + Boats have physics + Boats spawn --- source/Entities/Boat.cpp | 84 ++++++++++++++++++++++++++++++++++++++++++++++++ source/Entities/Boat.h | 34 ++++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 source/Entities/Boat.cpp create mode 100644 source/Entities/Boat.h (limited to 'source/Entities') 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 -- cgit v1.2.3