forked from pioneerspacesim/pioneer
-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
LuaNameGen.cpp
87 lines (65 loc) · 1.89 KB
/
LuaNameGen.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// Copyright © 2008-2012 Pioneer Developers. See AUTHORS.txt for details
// Licensed under the terms of the GPL v3. See licenses/GPL-3.txt
#include "LuaNameGen.h"
#include "LuaObject.h"
#include "LuaRand.h"
#include "LuaSystemBody.h"
#include "mtrand.h"
static const std::string DEFAULT_FULL_NAME_MALE("Tom Morton");
static const std::string DEFAULT_FULL_NAME_FEMALE("Thomasina Mortonella");
static const std::string DEFAULT_SURNAME("Jameson");
static const std::string DEFAULT_BODY_NAME("Planet Rock");
static bool GetNameGenFunc(lua_State *l, const char *func)
{
LUA_DEBUG_START(l);
lua_getglobal(l, "NameGen");
if (lua_isnil(l, -1)) {
lua_pop(l, 1);
LUA_DEBUG_END(l, 0);
return false;
}
lua_getfield(l, -1, func);
if (lua_isnil(l, -1)) {
lua_pop(l, 2);
LUA_DEBUG_END(l, 0);
return false;
}
lua_remove(l, -2);
LUA_DEBUG_END(l, 1);
return true;
}
std::string LuaNameGen::FullName(bool isFemale, MTRand &rng)
{
lua_State *l = m_luaManager->GetLuaState();
if (!GetNameGenFunc(l, "FullName"))
return isFemale ? DEFAULT_FULL_NAME_FEMALE : DEFAULT_FULL_NAME_MALE;
lua_pushboolean(l, isFemale);
LuaRand::PushToLua(&rng);
pi_lua_protected_call(l, 2, 1);
std::string fullname = luaL_checkstring(l, -1);
lua_pop(l, 1);
return fullname;
}
std::string LuaNameGen::Surname(MTRand &rng)
{
lua_State *l = m_luaManager->GetLuaState();
if (!GetNameGenFunc(l, "Surname"))
return DEFAULT_SURNAME;
LuaRand::PushToLua(&rng);
pi_lua_protected_call(l, 1, 1);
std::string surname = luaL_checkstring(l, -1);
lua_pop(l, 1);
return surname;
}
std::string LuaNameGen::BodyName(SystemBody *body, MTRand &rng)
{
lua_State *l = m_luaManager->GetLuaState();
if (!GetNameGenFunc(l, "BodyName"))
return DEFAULT_BODY_NAME;
LuaSystemBody::PushToLua(body);
LuaRand::PushToLua(&rng);
pi_lua_protected_call(l, 2, 1);
std::string bodyname = luaL_checkstring(l, -1);
lua_pop(l, 1);
return bodyname;
}