diff options
author | STRWarrior <niels.breuker@hotmail.nl> | 2013-11-25 20:05:52 +0100 |
---|---|---|
committer | STRWarrior <niels.breuker@hotmail.nl> | 2013-11-25 20:05:52 +0100 |
commit | 6641db058392dd6d7e170b95cd8616b920add63c (patch) | |
tree | 80691f970e071ec8277f5e4f601727d7b86ce4ca | |
parent | Implented SendExperienceOrb in ClientHandle. (diff) | |
download | cuberite-6641db058392dd6d7e170b95cd8616b920add63c.tar cuberite-6641db058392dd6d7e170b95cd8616b920add63c.tar.gz cuberite-6641db058392dd6d7e170b95cd8616b920add63c.tar.bz2 cuberite-6641db058392dd6d7e170b95cd8616b920add63c.tar.lz cuberite-6641db058392dd6d7e170b95cd8616b920add63c.tar.xz cuberite-6641db058392dd6d7e170b95cd8616b920add63c.tar.zst cuberite-6641db058392dd6d7e170b95cd8616b920add63c.zip |
-rw-r--r-- | source/Entities/ExpOrb.cpp | 60 | ||||
-rw-r--r-- | source/Entities/ExpOrb.h | 29 |
2 files changed, 89 insertions, 0 deletions
diff --git a/source/Entities/ExpOrb.cpp b/source/Entities/ExpOrb.cpp new file mode 100644 index 000000000..200f6e181 --- /dev/null +++ b/source/Entities/ExpOrb.cpp @@ -0,0 +1,60 @@ +#include "Globals.h" + +#include "ExpOrb.h" +#include "Player.h" +#include "../ClientHandle.h" + + +cExpOrb::cExpOrb(double a_X, double a_Y, double a_Z, int a_Reward) : + cEntity(etExpOrb, a_X, a_Y, a_Z, 0.98, 0.98), + m_Reward(a_Reward) +{ +} + + + + + +cExpOrb::cExpOrb(const Vector3d & a_Pos, int a_Reward) : + cEntity(etExpOrb, a_Pos.x, a_Pos.y, a_Pos.z, 0.98, 0.98), + m_Reward(a_Reward) +{ +} + + + + + +void cExpOrb::SpawnOn(cClientHandle & a_Client) +{ + a_Client.SendExperienceOrb(*this); + m_bDirtyPosition = false; + m_bDirtySpeed = false; + m_bDirtyOrientation = false; + m_bDirtyHead = false; +} + + + + + +void cExpOrb::Tick(float a_Dt, cChunk & a_Chunk) +{ + cPlayer * a_ClosestPlayer(m_World->FindClosestPlayer(Vector3f(GetPosition()), 3)); + if (a_ClosestPlayer) + { + Vector3f a_PlayerPos(a_ClosestPlayer->GetPosition()); + Vector3f a_Distance(a_PlayerPos - GetPosition()); + if (a_Distance.Length() < 0.1f) + { + a_ClosestPlayer->DeltaExperience(m_Reward); + a_ClosestPlayer->SendExperience(); + Destroy(true); + } + a_Distance.y = 0; + a_Distance.Normalize(); + a_Distance *= 3; + SetSpeedX( a_Distance.x ); + SetSpeedZ( a_Distance.z ); + } +}
\ No newline at end of file diff --git a/source/Entities/ExpOrb.h b/source/Entities/ExpOrb.h new file mode 100644 index 000000000..0f1b6ede7 --- /dev/null +++ b/source/Entities/ExpOrb.h @@ -0,0 +1,29 @@ + +#pragma once + +#include "Entity.h" + + + + + +class cExpOrb : + public cEntity +{ + typedef cExpOrb super; + +public: + + cExpOrb(double a_X, double a_Y, double a_Z, int a_Reward); + cExpOrb(const Vector3d & a_Pos, int a_Reward); + + // Override functions + virtual void Tick(float a_Dt, cChunk & a_Chunk) override; + virtual void SpawnOn(cClientHandle & a_Client) override; + + // cExpOrb functions + short int GetReward(void) const { return m_Reward; } + +protected: + int m_Reward; +} ;
\ No newline at end of file |