1
0
Fork 0

Use clang-tidy to check more code conventions (#4214)

* Create clang-tidy.sh
* Add clang-tidy to circle.yml
* Fixed some naming violations

Fixes #4164
This commit is contained in:
Bond-009 2018-05-06 19:07:34 +02:00 committed by peterbell10
parent fbf5cf7aa6
commit b9fdaf8a94
13 changed files with 224 additions and 168 deletions

17
.clang-tidy Normal file
View File

@ -0,0 +1,17 @@
Checks: '-*,readability-identifier-naming'
CheckOptions:
- key: readability-identifier-naming.PrivateMemberPrefix
value: 'm_'
- key: readability-identifier-naming.ClassConstantCase
value: aNy_CasE
# an empty *Prefix needs a *Case to work
- key: readability-identifier-naming.ClassConstantPrefix
value: ''
#- key: readability-identifier-naming.PrivateMemberCase
# value: CamelCase
#- key: readability-identifier-naming.FunctionCase
# value: CamelCase
#- key: readability-identifier-naming.EnumCase
# value: camelBack
WarningsAsErrors: '*'
HeaderFilterRegex: '/cuberite/src/\.?[^\.]'

5
.gitignore vendored
View File

@ -111,6 +111,11 @@ Server/cuberite_api.lua
Server/official_undocumented.lua Server/official_undocumented.lua
Server/NewlyUndocumented.lua Server/NewlyUndocumented.lua
Server/.luacheckrc Server/.luacheckrc
compile_commands.json
# compile.sh folder # compile.sh folder
build-cuberite build-cuberite
# clang-tidy
tidy-build
run-clang-tidy.py

View File

@ -4,9 +4,17 @@
dependencies: dependencies:
pre: pre:
- sudo apt-get install lua5.1 - sudo apt-get update
- sudo apt-get install lua5.1 cmake clang-3.9 clang-tidy-3.9
- sudo ln -s /usr/bin/clang-tidy-3.9 /usr/bin/clang-tidy
- sudo ln -s /usr/bin/clang-apply-replacements-3.9 /usr/bin/clang-apply-replacements
- pip install PyYAML
test: test:
override: override:
- cd src && find . -name \*.cpp -or -name \*.h > AllFiles.lst && lua CheckBasicStyle.lua - cd src && find . -name \*.cpp -or -name \*.h > AllFiles.lst && lua CheckBasicStyle.lua
- cd src/Bindings && lua CheckBindingsDependencies.lua - cd src/Bindings && lua CheckBindingsDependencies.lua
- curl -o "$HOME/bin/run-clang-tidy.py" "https://raw.githubusercontent.com/llvm-mirror/clang-tools-extra/45fb9b20ed7da2f6b95d83e5ef45bb536f49d8ca/clang-tidy/tool/run-clang-tidy.py"
- chmod +x "$HOME/bin/run-clang-tidy.py"
- git submodule update --init
- ./clang-tidy.sh

19
clang-tidy.sh Executable file
View File

@ -0,0 +1,19 @@
#!/bin/sh
set -e
FIXES_FILE="tidy-fixes.yaml"
REGEX="/cuberite/src/\.?[^\.]"
# TODO: Add -quiet when Circle CI is updated to 2.0 with a newer version of Ubuntu
ARGS="-header-filter $REGEX -export-fixes $FIXES_FILE "$@" $REGEX"
mkdir -p tidy-build
cd tidy-build
cmake --target Cuberite -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..
if run-clang-tidy.py $ARGS; then
echo "clang-tidy: No violations found"
else
echo "clang-tidy: Found violations"
exit 1
fi

View File

@ -154,7 +154,7 @@ bool cIniFile::ReadFile(const AString & a_FileName, bool a_AllowExampleRedirect)
case ';': case ';':
case '#': case '#':
{ {
if (names.empty()) if (m_Names.empty())
{ {
AddHeaderComment(line.substr(pLeft + 1)); AddHeaderComment(line.substr(pLeft + 1));
} }
@ -168,7 +168,7 @@ bool cIniFile::ReadFile(const AString & a_FileName, bool a_AllowExampleRedirect)
} // while (getline()) } // while (getline())
f.close(); f.close();
if (keys.empty() && names.empty() && comments.empty()) if (m_Keys.empty() && m_Names.empty() && m_Comments.empty())
{ {
// File be empty or unreadable, equivalent to nonexistant // File be empty or unreadable, equivalent to nonexistant
return false; return false;
@ -199,10 +199,10 @@ bool cIniFile::WriteFile(const AString & a_FileName) const
} }
// Write header comments. // Write header comments.
size_t NumComments = comments.size(); size_t NumComments = m_Comments.size();
for (size_t commentID = 0; commentID < NumComments; ++commentID) for (size_t commentID = 0; commentID < NumComments; ++commentID)
{ {
f << ';' << comments[commentID] << iniEOL; f << ';' << m_Comments[commentID] << iniEOL;
} }
if (NumComments > 0) if (NumComments > 0)
{ {
@ -210,20 +210,20 @@ bool cIniFile::WriteFile(const AString & a_FileName) const
} }
// Write keys and values. // Write keys and values.
for (size_t keyID = 0; keyID < keys.size(); ++keyID) for (size_t keyID = 0; keyID < m_Keys.size(); ++keyID)
{ {
f << '[' << names[keyID] << ']' << iniEOL; f << '[' << m_Names[keyID] << ']' << iniEOL;
// Comments. // Comments.
for (size_t commentID = 0; commentID < keys[keyID].comments.size(); ++commentID) for (size_t commentID = 0; commentID < m_Keys[keyID].m_Comments.size(); ++commentID)
{ {
f << ';' << keys[keyID].comments[commentID] << iniEOL; f << ';' << m_Keys[keyID].m_Comments[commentID] << iniEOL;
} }
// Values. // Values.
for (size_t valueID = 0; valueID < keys[keyID].names.size(); ++valueID) for (size_t valueID = 0; valueID < m_Keys[keyID].m_Names.size(); ++valueID)
{ {
f << keys[keyID].names[valueID] << '=' << keys[keyID].values[valueID] << iniEOL; f << m_Keys[keyID].m_Names[valueID] << '=' << m_Keys[keyID].m_Values[valueID] << iniEOL;
} }
f << iniEOL; f << iniEOL;
} }
@ -239,9 +239,9 @@ bool cIniFile::WriteFile(const AString & a_FileName) const
int cIniFile::FindKey(const AString & a_KeyName) const int cIniFile::FindKey(const AString & a_KeyName) const
{ {
AString CaseKeyName = CheckCase(a_KeyName); AString CaseKeyName = CheckCase(a_KeyName);
for (size_t keyID = 0; keyID < names.size(); ++keyID) for (size_t keyID = 0; keyID < m_Names.size(); ++keyID)
{ {
if (CheckCase(names[keyID]) == CaseKeyName) if (CheckCase(m_Names[keyID]) == CaseKeyName)
{ {
return static_cast<int>(keyID); return static_cast<int>(keyID);
} }
@ -255,15 +255,15 @@ int cIniFile::FindKey(const AString & a_KeyName) const
int cIniFile::FindValue(const int keyID, const AString & a_ValueName) const int cIniFile::FindValue(const int keyID, const AString & a_ValueName) const
{ {
if (!keys.size() || (keyID >= static_cast<int>(keys.size()))) if (!m_Keys.size() || (keyID >= static_cast<int>(m_Keys.size())))
{ {
return noID; return noID;
} }
AString CaseValueName = CheckCase(a_ValueName); AString CaseValueName = CheckCase(a_ValueName);
for (size_t valueID = 0; valueID < keys[static_cast<size_t>(keyID)].names.size(); ++valueID) for (size_t valueID = 0; valueID < m_Keys[static_cast<size_t>(keyID)].m_Names.size(); ++valueID)
{ {
if (CheckCase(keys[static_cast<size_t>(keyID)].names[valueID]) == CaseValueName) if (CheckCase(m_Keys[static_cast<size_t>(keyID)].m_Names[valueID]) == CaseValueName)
{ {
return int(valueID); return int(valueID);
} }
@ -277,9 +277,9 @@ int cIniFile::FindValue(const int keyID, const AString & a_ValueName) const
int cIniFile::AddKeyName(const AString & keyname) int cIniFile::AddKeyName(const AString & keyname)
{ {
names.resize(names.size() + 1, keyname); m_Names.resize(m_Names.size() + 1, keyname);
keys.resize(keys.size() + 1); m_Keys.resize(m_Keys.size() + 1);
return static_cast<int>(names.size()) - 1; return static_cast<int>(m_Names.size()) - 1;
} }
@ -288,9 +288,9 @@ int cIniFile::AddKeyName(const AString & keyname)
AString cIniFile::GetKeyName(const int keyID) const AString cIniFile::GetKeyName(const int keyID) const
{ {
if (keyID < static_cast<int>(names.size())) if (keyID < static_cast<int>(m_Names.size()))
{ {
return names[static_cast<size_t>(keyID)]; return m_Names[static_cast<size_t>(keyID)];
} }
else else
{ {
@ -304,9 +304,9 @@ AString cIniFile::GetKeyName(const int keyID) const
int cIniFile::GetNumValues(const int keyID) const int cIniFile::GetNumValues(const int keyID) const
{ {
if (keyID < static_cast<int>(keys.size())) if (keyID < static_cast<int>(m_Keys.size()))
{ {
return static_cast<int>(keys[static_cast<size_t>(keyID)].names.size()); return static_cast<int>(m_Keys[static_cast<size_t>(keyID)].m_Names.size());
} }
return 0; return 0;
} }
@ -322,7 +322,7 @@ int cIniFile::GetNumValues(const AString & keyname) const
{ {
return 0; return 0;
} }
return static_cast<int>(keys[static_cast<size_t>(keyID)].names.size()); return static_cast<int>(m_Keys[static_cast<size_t>(keyID)].m_Names.size());
} }
@ -331,9 +331,9 @@ int cIniFile::GetNumValues(const AString & keyname) const
AString cIniFile::GetValueName(const int keyID, const int valueID) const AString cIniFile::GetValueName(const int keyID, const int valueID) const
{ {
if ((keyID < static_cast<int>(keys.size())) && (valueID < static_cast<int>(keys[static_cast<size_t>(keyID)].names.size()))) if ((keyID < static_cast<int>(m_Keys.size())) && (valueID < static_cast<int>(m_Keys[static_cast<size_t>(keyID)].m_Names.size())))
{ {
return keys[static_cast<size_t>(keyID)].names[static_cast<size_t>(valueID)]; return m_Keys[static_cast<size_t>(keyID)].m_Names[static_cast<size_t>(valueID)];
} }
return ""; return "";
} }
@ -364,8 +364,8 @@ void cIniFile::AddValue(const AString & a_KeyName, const AString & a_ValueName,
keyID = int(AddKeyName(a_KeyName)); keyID = int(AddKeyName(a_KeyName));
} }
keys[static_cast<size_t>(keyID)].names.push_back(a_ValueName); m_Keys[static_cast<size_t>(keyID)].m_Names.push_back(a_ValueName);
keys[static_cast<size_t>(keyID)].values.push_back(a_Value); m_Keys[static_cast<size_t>(keyID)].m_Values.push_back(a_Value);
} }
@ -392,11 +392,11 @@ void cIniFile::AddValueF(const AString & a_KeyName, const AString & a_ValueName,
bool cIniFile::SetValue(const int keyID, const int valueID, const AString & value) bool cIniFile::SetValue(const int keyID, const int valueID, const AString & value)
{ {
if ((static_cast<size_t>(keyID) >= keys.size()) || (static_cast<size_t>(valueID) >= keys[static_cast<size_t>(keyID)].names.size())) if ((static_cast<size_t>(keyID) >= m_Keys.size()) || (static_cast<size_t>(valueID) >= m_Keys[static_cast<size_t>(keyID)].m_Names.size()))
{ {
return false; return false;
} }
keys[static_cast<size_t>(keyID)].values[static_cast<size_t>(valueID)] = value; m_Keys[static_cast<size_t>(keyID)].m_Values[static_cast<size_t>(valueID)] = value;
return true; return true;
} }
@ -423,12 +423,12 @@ bool cIniFile::SetValue(const AString & a_KeyName, const AString & a_ValueName,
{ {
return false; return false;
} }
keys[static_cast<size_t>(keyID)].names.push_back(a_ValueName); m_Keys[static_cast<size_t>(keyID)].m_Names.push_back(a_ValueName);
keys[static_cast<size_t>(keyID)].values.push_back(a_Value); m_Keys[static_cast<size_t>(keyID)].m_Values.push_back(a_Value);
} }
else else
{ {
keys[static_cast<size_t>(keyID)].values[static_cast<size_t>(valueID)] = a_Value; m_Keys[static_cast<size_t>(keyID)].m_Values[static_cast<size_t>(valueID)] = a_Value;
} }
return true; return true;
@ -467,9 +467,9 @@ bool cIniFile::SetValueF(const AString & a_KeyName, const AString & a_ValueName,
AString cIniFile::GetValue(const int keyID, const int valueID, const AString & defValue) const AString cIniFile::GetValue(const int keyID, const int valueID, const AString & defValue) const
{ {
if ((keyID < static_cast<int>(keys.size())) && (valueID < static_cast<int>(keys[static_cast<size_t>(keyID)].names.size()))) if ((keyID < static_cast<int>(m_Keys.size())) && (valueID < static_cast<int>(m_Keys[static_cast<size_t>(keyID)].m_Names.size())))
{ {
return keys[static_cast<size_t>(keyID)].values[static_cast<size_t>(valueID)]; return m_Keys[static_cast<size_t>(keyID)].m_Values[static_cast<size_t>(valueID)];
} }
return defValue; return defValue;
} }
@ -492,7 +492,7 @@ AString cIniFile::GetValue(const AString & keyname, const AString & valuename, c
return defValue; return defValue;
} }
return keys[static_cast<size_t>(keyID)].values[static_cast<size_t>(valueID)]; return m_Keys[static_cast<size_t>(keyID)].m_Values[static_cast<size_t>(valueID)];
} }
@ -537,7 +537,7 @@ AString cIniFile::GetValueSet(const AString & keyname, const AString & valuename
return defValue; return defValue;
} }
return keys[static_cast<size_t>(keyID)].values[static_cast<size_t>(valueID)]; return m_Keys[static_cast<size_t>(keyID)].m_Values[static_cast<size_t>(valueID)];
} }
@ -586,13 +586,13 @@ Int64 cIniFile::GetValueSetI(const AString & keyname, const AString & valuename,
bool cIniFile::DeleteValueByID(const int keyID, const int valueID) bool cIniFile::DeleteValueByID(const int keyID, const int valueID)
{ {
if ((keyID < static_cast<int>(keys.size())) && (valueID < static_cast<int>(keys[static_cast<size_t>(keyID)].names.size()))) if ((keyID < static_cast<int>(m_Keys.size())) && (valueID < static_cast<int>(m_Keys[static_cast<size_t>(keyID)].m_Names.size())))
{ {
// This looks strange, but is neccessary. // This looks strange, but is neccessary.
vector<AString>::iterator npos = keys[static_cast<size_t>(keyID)].names.begin() + valueID; vector<AString>::iterator npos = m_Keys[static_cast<size_t>(keyID)].m_Names.begin() + valueID;
vector<AString>::iterator vpos = keys[static_cast<size_t>(keyID)].values.begin() + valueID; vector<AString>::iterator vpos = m_Keys[static_cast<size_t>(keyID)].m_Values.begin() + valueID;
keys[static_cast<size_t>(keyID)].names.erase(npos, npos + 1); m_Keys[static_cast<size_t>(keyID)].m_Names.erase(npos, npos + 1);
keys[static_cast<size_t>(keyID)].values.erase(vpos, vpos + 1); m_Keys[static_cast<size_t>(keyID)].m_Values.erase(vpos, vpos + 1);
return true; return true;
} }
return false; return false;
@ -631,10 +631,10 @@ bool cIniFile::DeleteKey(const AString & keyname)
return false; return false;
} }
vector<AString>::iterator npos = names.begin() + keyID; vector<AString>::iterator npos = m_Names.begin() + keyID;
vector<key>::iterator kpos = keys.begin() + keyID; vector<key>::iterator kpos = m_Keys.begin() + keyID;
names.erase(npos, npos + 1); m_Names.erase(npos, npos + 1);
keys.erase(kpos, kpos + 1); m_Keys.erase(kpos, kpos + 1);
return true; return true;
} }
@ -645,9 +645,9 @@ bool cIniFile::DeleteKey(const AString & keyname)
void cIniFile::Clear(void) void cIniFile::Clear(void)
{ {
names.clear(); m_Names.clear();
keys.clear(); m_Keys.clear();
comments.clear(); m_Comments.clear();
} }
@ -674,7 +674,7 @@ bool cIniFile::HasValue(const AString & a_KeyName, const AString & a_ValueName)
void cIniFile::AddHeaderComment(const AString & comment) void cIniFile::AddHeaderComment(const AString & comment)
{ {
comments.push_back(comment); m_Comments.push_back(comment);
// comments.resize(comments.size() + 1, comment); // comments.resize(comments.size() + 1, comment);
} }
@ -684,9 +684,9 @@ void cIniFile::AddHeaderComment(const AString & comment)
AString cIniFile::GetHeaderComment(const int commentID) const AString cIniFile::GetHeaderComment(const int commentID) const
{ {
if (commentID < static_cast<int>(comments.size())) if (commentID < static_cast<int>(m_Comments.size()))
{ {
return comments[static_cast<size_t>(commentID)]; return m_Comments[static_cast<size_t>(commentID)];
} }
return ""; return "";
} }
@ -697,10 +697,10 @@ AString cIniFile::GetHeaderComment(const int commentID) const
bool cIniFile::DeleteHeaderComment(int commentID) bool cIniFile::DeleteHeaderComment(int commentID)
{ {
if (commentID < static_cast<int>(comments.size())) if (commentID < static_cast<int>(m_Comments.size()))
{ {
vector<AString>::iterator cpos = comments.begin() + commentID; vector<AString>::iterator cpos = m_Comments.begin() + commentID;
comments.erase(cpos, cpos + 1); m_Comments.erase(cpos, cpos + 1);
return true; return true;
} }
return false; return false;
@ -712,9 +712,9 @@ bool cIniFile::DeleteHeaderComment(int commentID)
int cIniFile::GetNumKeyComments(const int keyID) const int cIniFile::GetNumKeyComments(const int keyID) const
{ {
if (keyID < static_cast<int>(keys.size())) if (keyID < static_cast<int>(m_Keys.size()))
{ {
return static_cast<int>(keys[static_cast<size_t>(keyID)].comments.size()); return static_cast<int>(m_Keys[static_cast<size_t>(keyID)].m_Comments.size());
} }
return 0; return 0;
} }
@ -730,7 +730,7 @@ int cIniFile::GetNumKeyComments(const AString & keyname) const
{ {
return 0; return 0;
} }
return static_cast<int>(keys[static_cast<size_t>(keyID)].comments.size()); return static_cast<int>(m_Keys[static_cast<size_t>(keyID)].m_Comments.size());
} }
@ -739,9 +739,9 @@ int cIniFile::GetNumKeyComments(const AString & keyname) const
bool cIniFile::AddKeyComment(const int keyID, const AString & comment) bool cIniFile::AddKeyComment(const int keyID, const AString & comment)
{ {
if (keyID < static_cast<int>(keys.size())) if (keyID < static_cast<int>(m_Keys.size()))
{ {
keys[static_cast<size_t>(keyID)].comments.resize(keys[static_cast<size_t>(keyID)].comments.size() + 1, comment); m_Keys[static_cast<size_t>(keyID)].m_Comments.resize(m_Keys[static_cast<size_t>(keyID)].m_Comments.size() + 1, comment);
return true; return true;
} }
return false; return false;
@ -767,9 +767,9 @@ bool cIniFile::AddKeyComment(const AString & keyname, const AString & comment)
AString cIniFile::GetKeyComment(const int keyID, const int commentID) const AString cIniFile::GetKeyComment(const int keyID, const int commentID) const
{ {
if ((keyID < static_cast<int>(keys.size())) && (commentID < static_cast<int>(keys[static_cast<size_t>(keyID)].comments.size()))) if ((keyID < static_cast<int>(m_Keys.size())) && (commentID < static_cast<int>(m_Keys[static_cast<size_t>(keyID)].m_Comments.size())))
{ {
return keys[static_cast<size_t>(keyID)].comments[static_cast<size_t>(commentID)]; return m_Keys[static_cast<size_t>(keyID)].m_Comments[static_cast<size_t>(commentID)];
} }
return ""; return "";
} }
@ -794,10 +794,10 @@ AString cIniFile::GetKeyComment(const AString & keyname, const int commentID) co
bool cIniFile::DeleteKeyComment(const int keyID, const int commentID) bool cIniFile::DeleteKeyComment(const int keyID, const int commentID)
{ {
if ((keyID < static_cast<int>(keys.size())) && (commentID < static_cast<int>(keys[static_cast<size_t>(keyID)].comments.size()))) if ((keyID < static_cast<int>(m_Keys.size())) && (commentID < static_cast<int>(m_Keys[static_cast<size_t>(keyID)].m_Comments.size())))
{ {
vector<AString>::iterator cpos = keys[static_cast<size_t>(keyID)].comments.begin() + commentID; vector<AString>::iterator cpos = m_Keys[static_cast<size_t>(keyID)].m_Comments.begin() + commentID;
keys[static_cast<size_t>(keyID)].comments.erase(cpos, cpos + 1); m_Keys[static_cast<size_t>(keyID)].m_Comments.erase(cpos, cpos + 1);
return true; return true;
} }
return false; return false;
@ -823,9 +823,9 @@ bool cIniFile::DeleteKeyComment(const AString & keyname, const int commentID)
bool cIniFile::DeleteKeyComments(const int keyID) bool cIniFile::DeleteKeyComments(const int keyID)
{ {
if (keyID < static_cast<int>(keys.size())) if (keyID < static_cast<int>(m_Keys.size()))
{ {
keys[static_cast<size_t>(keyID)].comments.clear(); m_Keys[static_cast<size_t>(keyID)].m_Comments.clear();
return true; return true;
} }
return false; return false;
@ -910,9 +910,9 @@ std::vector<std::pair<AString, AString>> cIniFile::GetValues(AString a_keyName)
{ {
return ret; return ret;
} }
for (size_t valueID = 0; valueID < keys[static_cast<size_t>(keyID)].names.size(); ++valueID) for (size_t valueID = 0; valueID < m_Keys[static_cast<size_t>(keyID)].m_Names.size(); ++valueID)
{ {
ret.emplace_back(keys[static_cast<size_t>(keyID)].names[valueID], keys[static_cast<size_t>(keyID)].values[valueID]); ret.emplace_back(m_Keys[static_cast<size_t>(keyID)].m_Names[valueID], m_Keys[static_cast<size_t>(keyID)].m_Values[valueID]);
} }
return ret; return ret;
} }

View File

@ -42,14 +42,14 @@ private:
struct key struct key
{ {
std::vector<AString> names; std::vector<AString> m_Names;
std::vector<AString> values; std::vector<AString> m_Values;
std::vector<AString> comments; std::vector<AString> m_Comments;
} ; } ;
std::vector<key> keys; std::vector<key> m_Keys;
std::vector<AString> names; std::vector<AString> m_Names;
std::vector<AString> comments; std::vector<AString> m_Comments;
/** If the object is case-insensitive, returns s as lowercase; otherwise returns s as-is */ /** If the object is case-insensitive, returns s as lowercase; otherwise returns s as-is */
AString CheckCase(const AString & s) const; AString CheckCase(const AString & s) const;
@ -109,7 +109,7 @@ public:
int FindValue(const int keyID, const AString & valuename) const; int FindValue(const int keyID, const AString & valuename) const;
/** Returns number of keys currently in the ini */ /** Returns number of keys currently in the ini */
int GetNumKeys(void) const { return static_cast<int>(keys.size()); } int GetNumKeys(void) const { return static_cast<int>(m_Keys.size()); }
/** Add a key name */ /** Add a key name */
int AddKeyName(const AString & keyname) override; int AddKeyName(const AString & keyname) override;
@ -184,7 +184,7 @@ public:
// Header comments are those comments before the first key. // Header comments are those comments before the first key.
/** Returns the number of header comments */ /** Returns the number of header comments */
int GetNumHeaderComments(void) {return static_cast<int>(comments.size());} int GetNumHeaderComments(void) {return static_cast<int>(m_Comments.size());}
/** Adds a header comment */ /** Adds a header comment */
void AddHeaderComment(const AString & comment); void AddHeaderComment(const AString & comment);
@ -196,7 +196,7 @@ public:
bool DeleteHeaderComment(int commentID); bool DeleteHeaderComment(int commentID);
/** Deletes all header comments */ /** Deletes all header comments */
void DeleteHeaderComments(void) {comments.clear();} void DeleteHeaderComments(void) {m_Comments.clear();}
// Key comment functions. // Key comment functions.

View File

@ -75,8 +75,8 @@ protected:
cEnderman::cEnderman(void) : cEnderman::cEnderman(void) :
super("Enderman", mtEnderman, "entity.endermen.hurt", "entity.endermen.death", 0.5, 2.9), super("Enderman", mtEnderman, "entity.endermen.hurt", "entity.endermen.death", 0.5, 2.9),
m_bIsScreaming(false), m_bIsScreaming(false),
CarriedBlock(E_BLOCK_AIR), m_CarriedBlock(E_BLOCK_AIR),
CarriedMeta(0) m_CarriedMeta(0)
{ {
} }

View File

@ -24,8 +24,8 @@ public:
virtual void Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk) override; virtual void Tick(std::chrono::milliseconds a_Dt, cChunk & a_Chunk) override;
bool IsScreaming(void) const {return m_bIsScreaming; } bool IsScreaming(void) const {return m_bIsScreaming; }
BLOCKTYPE GetCarriedBlock(void) const {return CarriedBlock; } BLOCKTYPE GetCarriedBlock(void) const {return m_CarriedBlock; }
NIBBLETYPE GetCarriedMeta(void) const {return CarriedMeta; } NIBBLETYPE GetCarriedMeta(void) const {return m_CarriedMeta; }
/** Returns if the current sky light level is sufficient for the enderman to become aggravated */ /** Returns if the current sky light level is sufficient for the enderman to become aggravated */
bool CheckLight(void); bool CheckLight(void);
@ -33,7 +33,7 @@ public:
private: private:
bool m_bIsScreaming; bool m_bIsScreaming;
BLOCKTYPE CarriedBlock; BLOCKTYPE m_CarriedBlock;
NIBBLETYPE CarriedMeta; NIBBLETYPE m_CarriedMeta;
} ; } ;

View File

@ -9,6 +9,14 @@
const double cNetherPortalScanner::OutOffset = 2;
const double cNetherPortalScanner::AcrossOffset = 0.5;
cNetherPortalScanner::cNetherPortalScanner(cEntity * a_MovingEntity, cWorld * a_DestinationWorld, Vector3d a_DestPosition, int a_MaxY) : cNetherPortalScanner::cNetherPortalScanner(cEntity * a_MovingEntity, cWorld * a_DestinationWorld, Vector3d a_DestPosition, int a_MaxY) :
m_Entity(a_MovingEntity), m_Entity(a_MovingEntity),
m_World(a_DestinationWorld), m_World(a_DestinationWorld),

View File

@ -39,8 +39,8 @@ private:
static const int SearchSolidBaseWidth = 3; static const int SearchSolidBaseWidth = 3;
/** Where to place the player out from the face and across the face */ /** Where to place the player out from the face and across the face */
const double OutOffset = 2; static const double OutOffset;
const double AcrossOffset = 0.5; static const double AcrossOffset;
/** Builds a portal. */ /** Builds a portal. */
void BuildNetherPortal(Vector3i a_Location, Direction a_Direction, bool a_IncludePlatform); void BuildNetherPortal(Vector3i a_Location, Direction a_Direction, bool a_IncludePlatform);

View File

@ -36,7 +36,6 @@
#include "LoggerListeners.h" #include "LoggerListeners.h"
#include "BuildInfo.h" #include "BuildInfo.h"
#include "IniFile.h" #include "IniFile.h"
#include "SettingsRepositoryInterface.h"
#include "OverridesSettingsRepository.h" #include "OverridesSettingsRepository.h"
#include "Logger.h" #include "Logger.h"
#include "ClientHandle.h" #include "ClientHandle.h"

View File

@ -75,78 +75,78 @@ void cTracer::SetValues(const Vector3f & a_Start, const Vector3f & a_Direction)
ASSERT(a_Direction.HasNonZeroLength()); ASSERT(a_Direction.HasNonZeroLength());
// calculate the direction of the ray (linear algebra) // calculate the direction of the ray (linear algebra)
dir = a_Direction; m_Dir = a_Direction;
// decide which direction to start walking in // decide which direction to start walking in
step.x = SigNum(dir.x); m_Step.x = SigNum(m_Dir.x);
step.y = SigNum(dir.y); m_Step.y = SigNum(m_Dir.y);
step.z = SigNum(dir.z); m_Step.z = SigNum(m_Dir.z);
// normalize the direction vector // normalize the direction vector
dir.Normalize(); m_Dir.Normalize();
// how far we must move in the ray direction before // how far we must move in the ray direction before
// we encounter a new voxel in x-direction // we encounter a new voxel in x-direction
// same but y-direction // same but y-direction
if (dir.x != 0.f) if (m_Dir.x != 0.f)
{ {
tDelta.x = 1 / std::abs(dir.x); m_tDelta.x = 1 / std::abs(m_Dir.x);
} }
else else
{ {
tDelta.x = 0; m_tDelta.x = 0;
} }
if (dir.y != 0.f) if (m_Dir.y != 0.f)
{ {
tDelta.y = 1 / std::abs(dir.y); m_tDelta.y = 1 / std::abs(m_Dir.y);
} }
else else
{ {
tDelta.y = 0; m_tDelta.y = 0;
} }
if (dir.z != 0.f) if (m_Dir.z != 0.f)
{ {
tDelta.z = 1 / std::abs(dir.z); m_tDelta.z = 1 / std::abs(m_Dir.z);
} }
else else
{ {
tDelta.z = 0; m_tDelta.z = 0;
} }
// start voxel coordinates // start voxel coordinates
pos.x = static_cast<int>(floorf(a_Start.x)); m_Pos.x = static_cast<int>(floorf(a_Start.x));
pos.y = static_cast<int>(floorf(a_Start.y)); m_Pos.y = static_cast<int>(floorf(a_Start.y));
pos.z = static_cast<int>(floorf(a_Start.z)); m_Pos.z = static_cast<int>(floorf(a_Start.z));
// calculate distance to first intersection in the voxel we start from // calculate distance to first intersection in the voxel we start from
if (dir.x < 0) if (m_Dir.x < 0)
{ {
tMax.x = (static_cast<float>(pos.x) - a_Start.x) / dir.x; m_tMax.x = (static_cast<float>(m_Pos.x) - a_Start.x) / m_Dir.x;
} }
else else
{ {
tMax.x = (static_cast<float>(pos.x + 1) - a_Start.x) / dir.x; // TODO: Possible division by zero m_tMax.x = (static_cast<float>(m_Pos.x + 1) - a_Start.x) / m_Dir.x; // TODO: Possible division by zero
} }
if (dir.y < 0) if (m_Dir.y < 0)
{ {
tMax.y = (static_cast<float>(pos.y) - a_Start.y) / dir.y; m_tMax.y = (static_cast<float>(m_Pos.y) - a_Start.y) / m_Dir.y;
} }
else else
{ {
tMax.y = (static_cast<float>(pos.y + 1) - a_Start.y) / dir.y; // TODO: Possible division by zero m_tMax.y = (static_cast<float>(m_Pos.y + 1) - a_Start.y) / m_Dir.y; // TODO: Possible division by zero
} }
if (dir.z < 0) if (m_Dir.z < 0)
{ {
tMax.z = (static_cast<float>(pos.z) - a_Start.z) / dir.z; m_tMax.z = (static_cast<float>(m_Pos.z) - a_Start.z) / m_Dir.z;
} }
else else
{ {
tMax.z = (static_cast<float>(pos.z + 1) - a_Start.z) / dir.z; // TODO: Possible division by zero m_tMax.z = (static_cast<float>(m_Pos.z + 1) - a_Start.z) / m_Dir.z; // TODO: Possible division by zero
} }
} }
@ -169,21 +169,21 @@ bool cTracer::Trace(const Vector3f & a_Start, const Vector3f & a_Direction, int
SetValues(a_Start, a_Direction); SetValues(a_Start, a_Direction);
Vector3f End = a_Start + (dir * static_cast<float>(a_Distance)); Vector3f End = a_Start + (m_Dir * static_cast<float>(a_Distance));
if (End.y < 0) if (End.y < 0)
{ {
float dist = -a_Start.y / dir.y; // No division by 0 possible float dist = -a_Start.y / m_Dir.y; // No division by 0 possible
End = a_Start + (dir * dist); End = a_Start + (m_Dir * dist);
} }
// end voxel coordinates // end voxel coordinates
end1.x = static_cast<int>(floorf(End.x)); m_End1.x = static_cast<int>(floorf(End.x));
end1.y = static_cast<int>(floorf(End.y)); m_End1.y = static_cast<int>(floorf(End.y));
end1.z = static_cast<int>(floorf(End.z)); m_End1.z = static_cast<int>(floorf(End.z));
// check if first is occupied // check if first is occupied
if (pos.Equals(end1)) if (m_Pos.Equals(m_End1))
{ {
return false; return false;
} }
@ -194,54 +194,54 @@ bool cTracer::Trace(const Vector3f & a_Start, const Vector3f & a_Direction, int
while (Iterations < a_Distance) while (Iterations < a_Distance)
{ {
Iterations++; Iterations++;
if ((tMax.x < tMax.y) && (tMax.x < tMax.z)) if ((m_tMax.x < m_tMax.y) && (m_tMax.x < m_tMax.z))
{ {
tMax.x += tDelta.x; m_tMax.x += m_tDelta.x;
pos.x += step.x; m_Pos.x += m_Step.x;
} }
else if (tMax.y < tMax.z) else if (m_tMax.y < m_tMax.z)
{ {
tMax.y += tDelta.y; m_tMax.y += m_tDelta.y;
pos.y += step.y; m_Pos.y += m_Step.y;
} }
else else
{ {
tMax.z += tDelta.z; m_tMax.z += m_tDelta.z;
pos.z += step.z; m_Pos.z += m_Step.z;
} }
if (step.x > 0.0f) if (m_Step.x > 0.0f)
{ {
if (pos.x >= end1.x) if (m_Pos.x >= m_End1.x)
{ {
reachedX = true; reachedX = true;
} }
} }
else if (pos.x <= end1.x) else if (m_Pos.x <= m_End1.x)
{ {
reachedX = true; reachedX = true;
} }
if (step.y > 0.0f) if (m_Step.y > 0.0f)
{ {
if (pos.y >= end1.y) if (m_Pos.y >= m_End1.y)
{ {
reachedY = true; reachedY = true;
} }
} }
else if (pos.y <= end1.y) else if (m_Pos.y <= m_End1.y)
{ {
reachedY = true; reachedY = true;
} }
if (step.z > 0.0f) if (m_Step.z > 0.0f)
{ {
if (pos.z >= end1.z) if (m_Pos.z >= m_End1.z)
{ {
reachedZ = true; reachedZ = true;
} }
} }
else if (pos.z <= end1.z) else if (m_Pos.z <= m_End1.z)
{ {
reachedZ = true; reachedZ = true;
} }
@ -251,17 +251,17 @@ bool cTracer::Trace(const Vector3f & a_Start, const Vector3f & a_Direction, int
return false; return false;
} }
if ((pos.y < 0) || (pos.y >= cChunkDef::Height)) if ((m_Pos.y < 0) || (m_Pos.y >= cChunkDef::Height))
{ {
return false; return false;
} }
BLOCKTYPE BlockID = m_World->GetBlock(pos.x, pos.y, pos.z); BLOCKTYPE BlockID = m_World->GetBlock(m_Pos);
// Block is counted as a collision if we are not doing a line of sight and it is solid, // Block is counted as a collision if we are not doing a line of sight and it is solid,
// or if the block is not air and not water. That way mobs can still see underwater. // or if the block is not air and not water. That way mobs can still see underwater.
if ((!a_LineOfSight && cBlockInfo::IsSolid(BlockID)) || (a_LineOfSight && (BlockID != E_BLOCK_AIR) && !IsBlockWater(BlockID))) if ((!a_LineOfSight && cBlockInfo::IsSolid(BlockID)) || (a_LineOfSight && (BlockID != E_BLOCK_AIR) && !IsBlockWater(BlockID)))
{ {
BlockHitPosition = pos; BlockHitPosition = m_Pos;
int Normal = GetHitNormal(a_Start, End, pos); int Normal = GetHitNormal(a_Start, End, m_Pos);
if (Normal > 0) if (Normal > 0)
{ {
HitNormal = m_NormalTable()[static_cast<size_t>(Normal - 1)]; HitNormal = m_NormalTable()[static_cast<size_t>(Normal - 1)];
@ -346,7 +346,7 @@ int cTracer::intersect3D_SegmentPlane(const Vector3f & a_Origin, const Vector3f
int cTracer::GetHitNormal(const Vector3f & start, const Vector3f & end, const Vector3i & a_BlockPos) int cTracer::GetHitNormal(const Vector3f & a_Start, const Vector3f & a_End, const Vector3i & a_BlockPos)
{ {
Vector3i SmallBlockPos = a_BlockPos; Vector3i SmallBlockPos = a_BlockPos;
BLOCKTYPE BlockID = static_cast<BLOCKTYPE>(m_World->GetBlock(a_BlockPos.x, a_BlockPos.y, a_BlockPos.z)); BLOCKTYPE BlockID = static_cast<BLOCKTYPE>(m_World->GetBlock(a_BlockPos.x, a_BlockPos.y, a_BlockPos.z));
@ -359,19 +359,19 @@ int cTracer::GetHitNormal(const Vector3f & start, const Vector3f & end, const Ve
Vector3f BlockPos; Vector3f BlockPos;
BlockPos = Vector3f(SmallBlockPos); BlockPos = Vector3f(SmallBlockPos);
Vector3f Look = (end - start); Vector3f Look = (a_End - a_Start);
Look.Normalize(); Look.Normalize();
float dot = Look.Dot(Vector3f(-1, 0, 0)); // first face normal is x -1 float dot = Look.Dot(Vector3f(-1, 0, 0)); // first face normal is x -1
if (dot < 0) if (dot < 0)
{ {
int Lines = LinesCross(start.x, start.y, end.x, end.y, BlockPos.x, BlockPos.y, BlockPos.x, BlockPos.y + 1); int Lines = LinesCross(a_Start.x, a_Start.y, a_End.x, a_End.y, BlockPos.x, BlockPos.y, BlockPos.x, BlockPos.y + 1);
if (Lines == 1) if (Lines == 1)
{ {
Lines = LinesCross(start.x, start.z, end.x, end.z, BlockPos.x, BlockPos.z, BlockPos.x, BlockPos.z + 1); Lines = LinesCross(a_Start.x, a_Start.z, a_End.x, a_End.z, BlockPos.x, BlockPos.z, BlockPos.x, BlockPos.z + 1);
if (Lines == 1) if (Lines == 1)
{ {
intersect3D_SegmentPlane(start, end, BlockPos, Vector3f(-1, 0, 0)); intersect3D_SegmentPlane(a_Start, a_End, BlockPos, Vector3f(-1, 0, 0));
return 1; return 1;
} }
} }
@ -379,13 +379,13 @@ int cTracer::GetHitNormal(const Vector3f & start, const Vector3f & end, const Ve
dot = Look.Dot(Vector3f(0, 0, -1)); // second face normal is z -1 dot = Look.Dot(Vector3f(0, 0, -1)); // second face normal is z -1
if (dot < 0) if (dot < 0)
{ {
int Lines = LinesCross(start.z, start.y, end.z, end.y, BlockPos.z, BlockPos.y, BlockPos.z, BlockPos.y + 1); int Lines = LinesCross(a_Start.z, a_Start.y, a_End.z, a_End.y, BlockPos.z, BlockPos.y, BlockPos.z, BlockPos.y + 1);
if (Lines == 1) if (Lines == 1)
{ {
Lines = LinesCross(start.z, start.x, end.z, end.x, BlockPos.z, BlockPos.x, BlockPos.z, BlockPos.x + 1); Lines = LinesCross(a_Start.z, a_Start.x, a_End.z, a_End.x, BlockPos.z, BlockPos.x, BlockPos.z, BlockPos.x + 1);
if (Lines == 1) if (Lines == 1)
{ {
intersect3D_SegmentPlane(start, end, BlockPos, Vector3f(0, 0, -1)); intersect3D_SegmentPlane(a_Start, a_End, BlockPos, Vector3f(0, 0, -1));
return 2; return 2;
} }
} }
@ -393,13 +393,13 @@ int cTracer::GetHitNormal(const Vector3f & start, const Vector3f & end, const Ve
dot = Look.Dot(Vector3f(1, 0, 0)); // third face normal is x 1 dot = Look.Dot(Vector3f(1, 0, 0)); // third face normal is x 1
if (dot < 0) if (dot < 0)
{ {
int Lines = LinesCross(start.x, start.y, end.x, end.y, BlockPos.x + 1, BlockPos.y, BlockPos.x + 1, BlockPos.y + 1); int Lines = LinesCross(a_Start.x, a_Start.y, a_End.x, a_End.y, BlockPos.x + 1, BlockPos.y, BlockPos.x + 1, BlockPos.y + 1);
if (Lines == 1) if (Lines == 1)
{ {
Lines = LinesCross(start.x, start.z, end.x, end.z, BlockPos.x + 1, BlockPos.z, BlockPos.x + 1, BlockPos.z + 1); Lines = LinesCross(a_Start.x, a_Start.z, a_End.x, a_End.z, BlockPos.x + 1, BlockPos.z, BlockPos.x + 1, BlockPos.z + 1);
if (Lines == 1) if (Lines == 1)
{ {
intersect3D_SegmentPlane(start, end, BlockPos + Vector3f(1, 0, 0), Vector3f(1, 0, 0)); intersect3D_SegmentPlane(a_Start, a_End, BlockPos + Vector3f(1, 0, 0), Vector3f(1, 0, 0));
return 3; return 3;
} }
} }
@ -407,13 +407,13 @@ int cTracer::GetHitNormal(const Vector3f & start, const Vector3f & end, const Ve
dot = Look.Dot(Vector3f(0, 0, 1)); // fourth face normal is z 1 dot = Look.Dot(Vector3f(0, 0, 1)); // fourth face normal is z 1
if (dot < 0) if (dot < 0)
{ {
int Lines = LinesCross(start.z, start.y, end.z, end.y, BlockPos.z + 1, BlockPos.y, BlockPos.z + 1, BlockPos.y + 1); int Lines = LinesCross(a_Start.z, a_Start.y, a_End.z, a_End.y, BlockPos.z + 1, BlockPos.y, BlockPos.z + 1, BlockPos.y + 1);
if (Lines == 1) if (Lines == 1)
{ {
Lines = LinesCross(start.z, start.x, end.z, end.x, BlockPos.z + 1, BlockPos.x, BlockPos.z + 1, BlockPos.x + 1); Lines = LinesCross(a_Start.z, a_Start.x, a_End.z, a_End.x, BlockPos.z + 1, BlockPos.x, BlockPos.z + 1, BlockPos.x + 1);
if (Lines == 1) if (Lines == 1)
{ {
intersect3D_SegmentPlane(start, end, BlockPos + Vector3f(0, 0, 1), Vector3f(0, 0, 1)); intersect3D_SegmentPlane(a_Start, a_End, BlockPos + Vector3f(0, 0, 1), Vector3f(0, 0, 1));
return 4; return 4;
} }
} }
@ -421,13 +421,13 @@ int cTracer::GetHitNormal(const Vector3f & start, const Vector3f & end, const Ve
dot = Look.Dot(Vector3f(0, 1, 0)); // fifth face normal is y 1 dot = Look.Dot(Vector3f(0, 1, 0)); // fifth face normal is y 1
if (dot < 0) if (dot < 0)
{ {
int Lines = LinesCross(start.y, start.x, end.y, end.x, BlockPos.y + 1, BlockPos.x, BlockPos.y + 1, BlockPos.x + 1); int Lines = LinesCross(a_Start.y, a_Start.x, a_End.y, a_End.x, BlockPos.y + 1, BlockPos.x, BlockPos.y + 1, BlockPos.x + 1);
if (Lines == 1) if (Lines == 1)
{ {
Lines = LinesCross(start.y, start.z, end.y, end.z, BlockPos.y + 1, BlockPos.z, BlockPos.y + 1, BlockPos.z + 1); Lines = LinesCross(a_Start.y, a_Start.z, a_End.y, a_End.z, BlockPos.y + 1, BlockPos.z, BlockPos.y + 1, BlockPos.z + 1);
if (Lines == 1) if (Lines == 1)
{ {
intersect3D_SegmentPlane(start, end, BlockPos + Vector3f(0, 1, 0), Vector3f(0, 1, 0)); intersect3D_SegmentPlane(a_Start, a_End, BlockPos + Vector3f(0, 1, 0), Vector3f(0, 1, 0));
return 5; return 5;
} }
} }
@ -435,13 +435,13 @@ int cTracer::GetHitNormal(const Vector3f & start, const Vector3f & end, const Ve
dot = Look.Dot(Vector3f(0, -1, 0)); // sixth face normal is y -1 dot = Look.Dot(Vector3f(0, -1, 0)); // sixth face normal is y -1
if (dot < 0) if (dot < 0)
{ {
int Lines = LinesCross(start.y, start.x, end.y, end.x, BlockPos.y, BlockPos.x, BlockPos.y, BlockPos.x + 1); int Lines = LinesCross(a_Start.y, a_Start.x, a_End.y, a_End.x, BlockPos.y, BlockPos.x, BlockPos.y, BlockPos.x + 1);
if (Lines == 1) if (Lines == 1)
{ {
Lines = LinesCross(start.y, start.z, end.y, end.z, BlockPos.y, BlockPos.z, BlockPos.y, BlockPos.z + 1); Lines = LinesCross(a_Start.y, a_Start.z, a_End.y, a_End.z, BlockPos.y, BlockPos.z, BlockPos.y, BlockPos.z + 1);
if (Lines == 1) if (Lines == 1)
{ {
intersect3D_SegmentPlane(start, end, BlockPos, Vector3f(0, -1, 0)); intersect3D_SegmentPlane(a_Start, a_End, BlockPos, Vector3f(0, -1, 0));
return 6; return 6;
} }
} }

View File

@ -63,7 +63,7 @@ private:
/** Determines which face on the block a collision occured, if it does occur /** Determines which face on the block a collision occured, if it does occur
Returns 0 if the block is air, water or no collision occured Returns 0 if the block is air, water or no collision occured
Return 1 through 6 for the following block faces, repectively: -x, -z, x, z, y, -y */ Return 1 through 6 for the following block faces, repectively: -x, -z, x, z, y, -y */
int GetHitNormal(const Vector3f & start, const Vector3f & end, const Vector3i & a_BlockPos); int GetHitNormal(const Vector3f &a_Start, const Vector3f & a_End, const Vector3i & a_BlockPos);
/** Signum function */ /** Signum function */
int SigNum(float a_Num); int SigNum(float a_Num);
@ -72,12 +72,12 @@ private:
static const std::array<const Vector3f, 6> & m_NormalTable(void); static const std::array<const Vector3f, 6> & m_NormalTable(void);
Vector3f dir; Vector3f m_Dir;
Vector3f tDelta; Vector3f m_tDelta;
Vector3i pos; Vector3i m_Pos;
Vector3i end1; Vector3i m_End1;
Vector3i step; Vector3i m_Step;
Vector3f tMax; Vector3f m_tMax;
}; };
// tolua_end // tolua_end