common: move EntData_ function to common
This commit is contained in:
parent
760f18f2ae
commit
9124653156
|
|
@ -16,6 +16,7 @@ include_directories(
|
||||||
|
|
||||||
set(COMMON_INCLUDES
|
set(COMMON_INCLUDES
|
||||||
${CMAKE_SOURCE_DIR}/include/common/aabb.hh
|
${CMAKE_SOURCE_DIR}/include/common/aabb.hh
|
||||||
|
${CMAKE_SOURCE_DIR}/include/common/entdata.h
|
||||||
${CMAKE_SOURCE_DIR}/include/common/mesh.hh
|
${CMAKE_SOURCE_DIR}/include/common/mesh.hh
|
||||||
${CMAKE_SOURCE_DIR}/include/common/octree.hh
|
${CMAKE_SOURCE_DIR}/include/common/octree.hh
|
||||||
${CMAKE_SOURCE_DIR}/include/common/qvec.hh
|
${CMAKE_SOURCE_DIR}/include/common/qvec.hh
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@ project (bspinfo CXX)
|
||||||
|
|
||||||
set(BSPINFO_SOURCES
|
set(BSPINFO_SOURCES
|
||||||
bspinfo.cc
|
bspinfo.cc
|
||||||
|
${CMAKE_SOURCE_DIR}/common/entdata.cc
|
||||||
${CMAKE_SOURCE_DIR}/common/cmdlib.cc
|
${CMAKE_SOURCE_DIR}/common/cmdlib.cc
|
||||||
${CMAKE_SOURCE_DIR}/common/bspfile.cc
|
${CMAKE_SOURCE_DIR}/common/bspfile.cc
|
||||||
${CMAKE_SOURCE_DIR}/common/log.cc
|
${CMAKE_SOURCE_DIR}/common/log.cc
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,7 @@ set(BSPUTIL_SOURCES
|
||||||
${CMAKE_SOURCE_DIR}/common/cmdlib.cc
|
${CMAKE_SOURCE_DIR}/common/cmdlib.cc
|
||||||
${CMAKE_SOURCE_DIR}/common/bspfile.cc
|
${CMAKE_SOURCE_DIR}/common/bspfile.cc
|
||||||
${CMAKE_SOURCE_DIR}/common/bsputils.cc
|
${CMAKE_SOURCE_DIR}/common/bsputils.cc
|
||||||
|
${CMAKE_SOURCE_DIR}/common/entdata.cc
|
||||||
${CMAKE_SOURCE_DIR}/common/mathlib.cc
|
${CMAKE_SOURCE_DIR}/common/mathlib.cc
|
||||||
${CMAKE_SOURCE_DIR}/common/qvec.cc
|
${CMAKE_SOURCE_DIR}/common/qvec.cc
|
||||||
${CMAKE_SOURCE_DIR}/common/polylib.cc
|
${CMAKE_SOURCE_DIR}/common/polylib.cc
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,150 @@
|
||||||
|
/* Copyright (C) 1996-1997 Id Software, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
See file, 'COPYING', for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common/entdata.h>
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
|
#include <sstream>
|
||||||
|
#include <common/cmdlib.hh>
|
||||||
|
|
||||||
|
#include <light/light.hh>
|
||||||
|
#include <light/entities.hh>
|
||||||
|
#include <light/ltface.hh>
|
||||||
|
#include <common/bsputils.hh>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ==================
|
||||||
|
* EntData_Parse
|
||||||
|
* ==================
|
||||||
|
*/
|
||||||
|
std::vector<entdict_t>
|
||||||
|
EntData_Parse(const char *entdata)
|
||||||
|
{
|
||||||
|
std::vector<entdict_t> result;
|
||||||
|
const char *data = entdata;
|
||||||
|
|
||||||
|
/* go through all the entities */
|
||||||
|
while (1) {
|
||||||
|
/* parse the opening brace */
|
||||||
|
data = COM_Parse(data);
|
||||||
|
if (!data)
|
||||||
|
break;
|
||||||
|
if (com_token[0] != '{')
|
||||||
|
Error("%s: found %s when expecting {", __func__, com_token);
|
||||||
|
|
||||||
|
/* Allocate a new entity */
|
||||||
|
entdict_t entity;
|
||||||
|
|
||||||
|
/* go through all the keys in this entity */
|
||||||
|
while (1) {
|
||||||
|
/* parse key */
|
||||||
|
data = COM_Parse(data);
|
||||||
|
if (!data)
|
||||||
|
Error("%s: EOF without closing brace", __func__);
|
||||||
|
|
||||||
|
std::string keystr { com_token };
|
||||||
|
|
||||||
|
if (keystr == "}")
|
||||||
|
break;
|
||||||
|
if (keystr.length() > MAX_ENT_KEY - 1)
|
||||||
|
Error("%s: Key length > %i: '%s'", __func__, MAX_ENT_KEY - 1, keystr.c_str());
|
||||||
|
|
||||||
|
/* parse value */
|
||||||
|
data = COM_Parse(data);
|
||||||
|
if (!data)
|
||||||
|
Error("%s: EOF without closing brace", __func__);
|
||||||
|
|
||||||
|
std::string valstring { com_token };
|
||||||
|
|
||||||
|
if (valstring[0] == '}')
|
||||||
|
Error("%s: closing brace without data", __func__);
|
||||||
|
if (valstring.length() > MAX_ENT_VALUE - 1)
|
||||||
|
Error("%s: Value length > %i", __func__, MAX_ENT_VALUE - 1);
|
||||||
|
|
||||||
|
entity[keystr] = valstring;
|
||||||
|
}
|
||||||
|
|
||||||
|
result.push_back(entity);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ================
|
||||||
|
* EntData_Write
|
||||||
|
* ================
|
||||||
|
*/
|
||||||
|
std::string
|
||||||
|
EntData_Write(const std::vector<entdict_t> &ents)
|
||||||
|
{
|
||||||
|
std::stringstream out;
|
||||||
|
for (const auto &ent : ents) {
|
||||||
|
out << "{\n";
|
||||||
|
for (const auto &epair : ent) {
|
||||||
|
out << "\"" << epair.first << "\" \"" << epair.second << "\"\n";
|
||||||
|
}
|
||||||
|
out << "}\n";
|
||||||
|
}
|
||||||
|
return out.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string
|
||||||
|
EntDict_StringForKey(const entdict_t &dict, const std::string key)
|
||||||
|
{
|
||||||
|
auto it = dict.find(key);
|
||||||
|
if (it != dict.end()) {
|
||||||
|
return it->second;
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
float
|
||||||
|
EntDict_FloatForKey(const entdict_t &dict, const std::string key)
|
||||||
|
{
|
||||||
|
auto s = EntDict_StringForKey(dict, key);
|
||||||
|
if (s.empty())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
try {
|
||||||
|
return std::stof(s);
|
||||||
|
} catch (std::exception &) {
|
||||||
|
return 0.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
EntDict_RemoveValueForKey(entdict_t &dict, const std::string &key)
|
||||||
|
{
|
||||||
|
const auto it = dict.find(key);
|
||||||
|
if (it != dict.end()) {
|
||||||
|
dict.erase(it);
|
||||||
|
}
|
||||||
|
Q_assert(dict.find(key) == dict.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
void //mxd
|
||||||
|
EntDict_RenameKey(entdict_t &dict, const std::string &from, const std::string &to)
|
||||||
|
{
|
||||||
|
const auto it = dict.find(from);
|
||||||
|
if (it != dict.end()) {
|
||||||
|
swap(dict[to], it->second);
|
||||||
|
dict.erase(it);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
/* Copyright (C) 1996-1997 Id Software, Inc.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
|
|
||||||
|
See file, 'COPYING', for details.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
using entdict_t = std::map<std::string, std::string>;
|
||||||
|
|
||||||
|
std::vector<entdict_t> EntData_Parse(const char *entdata);
|
||||||
|
std::string EntData_Write(const std::vector<entdict_t> &ents);
|
||||||
|
std::string EntDict_StringForKey(const entdict_t &dict, const std::string key);
|
||||||
|
float EntDict_FloatForKey(const entdict_t &dict, const std::string key);
|
||||||
|
void EntDict_RemoveValueForKey(entdict_t &dict, const std::string &key);
|
||||||
|
void EntDict_RenameKey(entdict_t &dict, const std::string &from, const std::string &to);
|
||||||
|
|
@ -24,14 +24,13 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
#include <common/entdata.h>
|
||||||
#include <common/mathlib.hh>
|
#include <common/mathlib.hh>
|
||||||
#include <common/bspfile.hh>
|
#include <common/bspfile.hh>
|
||||||
#include <light/light.hh>
|
#include <light/light.hh>
|
||||||
|
|
||||||
#define DEFAULTLIGHTLEVEL 300.0f
|
#define DEFAULTLIGHTLEVEL 300.0f
|
||||||
|
|
||||||
using entdict_t = std::map<std::string, std::string>;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Light attenuation formalae
|
* Light attenuation formalae
|
||||||
* (relative to distance 'x' from the light source)
|
* (relative to distance 'x' from the light source)
|
||||||
|
|
@ -178,9 +177,6 @@ const entdict_t *FindEntDictWithKeyPair(const std::string &key, const std::strin
|
||||||
const char *ValueForKey(const light_t *ent, const char *key);
|
const char *ValueForKey(const light_t *ent, const char *key);
|
||||||
void EntDict_VectorForKey(const entdict_t &ent, const std::string &key, vec3_t vec);
|
void EntDict_VectorForKey(const entdict_t &ent, const std::string &key, vec3_t vec);
|
||||||
|
|
||||||
std::string EntDict_StringForKey(const entdict_t &dict, const std::string key);
|
|
||||||
float EntDict_FloatForKey(const entdict_t &dict, const std::string key);
|
|
||||||
|
|
||||||
void SetWorldKeyValue(const std::string &key, const std::string &value);
|
void SetWorldKeyValue(const std::string &key, const std::string &value);
|
||||||
std::string WorldValueForKey(const std::string &key);
|
std::string WorldValueForKey(const std::string &key);
|
||||||
|
|
||||||
|
|
@ -196,6 +192,4 @@ bool EntDict_CheckTargetKeysMatched(const mbsp_t *bsp, const entdict_t &entity,
|
||||||
|
|
||||||
bool EntDict_CheckTargetnameKeyMatched(const mbsp_t *bsp, const entdict_t &entity, const std::vector<entdict_t> &all_edicts);
|
bool EntDict_CheckTargetnameKeyMatched(const mbsp_t *bsp, const entdict_t &entity, const std::vector<entdict_t> &all_edicts);
|
||||||
|
|
||||||
std::vector<entdict_t> EntData_Parse(const char *entdata); //mxd
|
|
||||||
|
|
||||||
#endif /* __LIGHT_ENTITIES_H__ */
|
#endif /* __LIGHT_ENTITIES_H__ */
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,8 @@ set(LIGHT_SOURCES
|
||||||
surflight.cc
|
surflight.cc
|
||||||
settings.cc
|
settings.cc
|
||||||
imglib.cc
|
imglib.cc
|
||||||
${CMAKE_SOURCE_DIR}/common/bspfile.cc
|
${CMAKE_SOURCE_DIR}/common/bspfile.cc
|
||||||
|
${CMAKE_SOURCE_DIR}/common/entdata.cc
|
||||||
${CMAKE_SOURCE_DIR}/common/cmdlib.cc
|
${CMAKE_SOURCE_DIR}/common/cmdlib.cc
|
||||||
${CMAKE_SOURCE_DIR}/common/mathlib.cc
|
${CMAKE_SOURCE_DIR}/common/mathlib.cc
|
||||||
${CMAKE_SOURCE_DIR}/common/qvec.cc
|
${CMAKE_SOURCE_DIR}/common/qvec.cc
|
||||||
|
|
|
||||||
|
|
@ -893,127 +893,6 @@ static rgba_miptex_t *FindProjectionTexture(const mbsp_t *bsp, const char *texna
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* ==================
|
|
||||||
* EntData_Parse
|
|
||||||
* ==================
|
|
||||||
*/
|
|
||||||
std::vector<entdict_t>
|
|
||||||
EntData_Parse(const char *entdata)
|
|
||||||
{
|
|
||||||
std::vector<entdict_t> result;
|
|
||||||
const char *data = entdata;
|
|
||||||
|
|
||||||
/* go through all the entities */
|
|
||||||
while (1) {
|
|
||||||
/* parse the opening brace */
|
|
||||||
data = COM_Parse(data);
|
|
||||||
if (!data)
|
|
||||||
break;
|
|
||||||
if (com_token[0] != '{')
|
|
||||||
Error("%s: found %s when expecting {", __func__, com_token);
|
|
||||||
|
|
||||||
/* Allocate a new entity */
|
|
||||||
entdict_t entity;
|
|
||||||
|
|
||||||
/* go through all the keys in this entity */
|
|
||||||
while (1) {
|
|
||||||
/* parse key */
|
|
||||||
data = COM_Parse(data);
|
|
||||||
if (!data)
|
|
||||||
Error("%s: EOF without closing brace", __func__);
|
|
||||||
|
|
||||||
std::string keystr { com_token };
|
|
||||||
|
|
||||||
if (keystr == "}")
|
|
||||||
break;
|
|
||||||
if (keystr.length() > MAX_ENT_KEY - 1)
|
|
||||||
Error("%s: Key length > %i: '%s'", __func__, MAX_ENT_KEY - 1, keystr.c_str());
|
|
||||||
|
|
||||||
/* parse value */
|
|
||||||
data = COM_Parse(data);
|
|
||||||
if (!data)
|
|
||||||
Error("%s: EOF without closing brace", __func__);
|
|
||||||
|
|
||||||
std::string valstring { com_token };
|
|
||||||
|
|
||||||
if (valstring[0] == '}')
|
|
||||||
Error("%s: closing brace without data", __func__);
|
|
||||||
if (valstring.length() > MAX_ENT_VALUE - 1)
|
|
||||||
Error("%s: Value length > %i", __func__, MAX_ENT_VALUE - 1);
|
|
||||||
|
|
||||||
entity[keystr] = valstring;
|
|
||||||
}
|
|
||||||
|
|
||||||
result.push_back(entity);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* ================
|
|
||||||
* EntData_Write
|
|
||||||
* ================
|
|
||||||
*/
|
|
||||||
std::string
|
|
||||||
EntData_Write(const std::vector<entdict_t> &ents)
|
|
||||||
{
|
|
||||||
std::stringstream out;
|
|
||||||
for (const auto &ent : ents) {
|
|
||||||
out << "{\n";
|
|
||||||
for (const auto &epair : ent) {
|
|
||||||
out << "\"" << epair.first << "\" \"" << epair.second << "\"\n";
|
|
||||||
}
|
|
||||||
out << "}\n";
|
|
||||||
}
|
|
||||||
return out.str();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string
|
|
||||||
EntDict_StringForKey(const entdict_t &dict, const std::string key)
|
|
||||||
{
|
|
||||||
auto it = dict.find(key);
|
|
||||||
if (it != dict.end()) {
|
|
||||||
return it->second;
|
|
||||||
}
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
float
|
|
||||||
EntDict_FloatForKey(const entdict_t &dict, const std::string key)
|
|
||||||
{
|
|
||||||
auto s = EntDict_StringForKey(dict, key);
|
|
||||||
if (s.empty())
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
try {
|
|
||||||
return std::stof(s);
|
|
||||||
} catch (std::exception &) {
|
|
||||||
return 0.0f;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
EntDict_RemoveValueForKey(entdict_t &dict, const std::string &key)
|
|
||||||
{
|
|
||||||
const auto it = dict.find(key);
|
|
||||||
if (it != dict.end()) {
|
|
||||||
dict.erase(it);
|
|
||||||
}
|
|
||||||
Q_assert(dict.find(key) == dict.end());
|
|
||||||
}
|
|
||||||
|
|
||||||
void //mxd
|
|
||||||
EntDict_RenameKey(entdict_t &dict, const std::string &from, const std::string &to)
|
|
||||||
{
|
|
||||||
const auto it = dict.find(from);
|
|
||||||
if (it != dict.end()) {
|
|
||||||
swap(dict[to], it->second);
|
|
||||||
dict.erase(it);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static std::string
|
static std::string
|
||||||
ParseEscapeSequences(const std::string &input)
|
ParseEscapeSequences(const std::string &input)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ set(VIS_SOURCES
|
||||||
vis.cc
|
vis.cc
|
||||||
soundpvs.cc
|
soundpvs.cc
|
||||||
state.cc
|
state.cc
|
||||||
|
${CMAKE_SOURCE_DIR}/common/entdata.cc
|
||||||
${CMAKE_SOURCE_DIR}/common/cmdlib.cc
|
${CMAKE_SOURCE_DIR}/common/cmdlib.cc
|
||||||
${CMAKE_SOURCE_DIR}/common/mathlib.cc
|
${CMAKE_SOURCE_DIR}/common/mathlib.cc
|
||||||
${CMAKE_SOURCE_DIR}/common/qvec.cc
|
${CMAKE_SOURCE_DIR}/common/qvec.cc
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue