Merge branch 'HEAD' of git@github.com:FacialTurd/The-Powder-Toy.git
This commit is contained in:
commit
981f6984c2
@ -44,6 +44,7 @@ AddOption('--sse2',dest="sse2",action='store_true',default=False,help="Enable SS
|
|||||||
AddOption('--sse3',dest="sse3",action='store_true',default=False,help="Enable SSE3 optimisations")
|
AddOption('--sse3',dest="sse3",action='store_true',default=False,help="Enable SSE3 optimisations")
|
||||||
AddOption('--x86',dest="x86",action='store_true',default=True,help="Target Intel x86 platform")
|
AddOption('--x86',dest="x86",action='store_true',default=True,help="Target Intel x86 platform")
|
||||||
AddOption('--nofft',dest="nofft", action='store_true',default=False,help="Do not use fftw3f for gravity.")
|
AddOption('--nofft',dest="nofft", action='store_true',default=False,help="Do not use fftw3f for gravity.")
|
||||||
|
AddOption('--nolua',dest="nolua", action='store_true',default=False,help="Disable all lua scripting features.")
|
||||||
|
|
||||||
AddOption('--debugging', dest="debug", action="store_true", default=False, help="Enable debug options")
|
AddOption('--debugging', dest="debug", action="store_true", default=False, help="Enable debug options")
|
||||||
AddOption('--beta',dest="beta",action='store_true',default=False,help="Beta build.")
|
AddOption('--beta',dest="beta",action='store_true',default=False,help="Beta build.")
|
||||||
@ -90,6 +91,7 @@ if not GetOption("macosx"):
|
|||||||
env.Append(CPPPATH=[GetOption("sdl-dir")])
|
env.Append(CPPPATH=[GetOption("sdl-dir")])
|
||||||
|
|
||||||
#Find correct lua include dir
|
#Find correct lua include dir
|
||||||
|
if not GetOption("nolua"):
|
||||||
try:
|
try:
|
||||||
env.ParseConfig('pkg-config --cflags lua5.1')
|
env.ParseConfig('pkg-config --cflags lua5.1')
|
||||||
except:
|
except:
|
||||||
@ -121,7 +123,7 @@ if not GetOption("macosx"):
|
|||||||
raise SystemExit(1)
|
raise SystemExit(1)
|
||||||
|
|
||||||
#Check for Lua lib
|
#Check for Lua lib
|
||||||
if not GetOption("macosx"):
|
if not GetOption("macosx") and not GetOption("nolua"):
|
||||||
if not conf.CheckLib('lua5.1') and not conf.CheckLib('lua-5.1') and not conf.CheckLib('lua51') and not conf.CheckLib('lua'):
|
if not conf.CheckLib('lua5.1') and not conf.CheckLib('lua-5.1') and not conf.CheckLib('lua51') and not conf.CheckLib('lua'):
|
||||||
print "liblua not found or not installed"
|
print "liblua not found or not installed"
|
||||||
raise SystemExit(1)
|
raise SystemExit(1)
|
||||||
@ -135,9 +137,11 @@ else:
|
|||||||
env.Append(CPPPATH=['src/', 'data/', 'generated/'])
|
env.Append(CPPPATH=['src/', 'data/', 'generated/'])
|
||||||
env.Append(CCFLAGS=['-w', '-std=c++98', '-fkeep-inline-functions'])
|
env.Append(CCFLAGS=['-w', '-std=c++98', '-fkeep-inline-functions'])
|
||||||
env.Append(LIBS=['pthread', 'm'])
|
env.Append(LIBS=['pthread', 'm'])
|
||||||
env.Append(CPPDEFINES=["LUACONSOLE", "_GNU_SOURCE", "USE_STDINT", "_POSIX_C_SOURCE=200112L"])
|
env.Append(CPPDEFINES=["_GNU_SOURCE", "USE_STDINT", "_POSIX_C_SOURCE=200112L"])
|
||||||
if not GetOption('nofft'):
|
if not GetOption('nofft'):
|
||||||
env.Append(CPPDEFINES=["GRAVFFT"])
|
env.Append(CPPDEFINES=["GRAVFFT"])
|
||||||
|
if not GetOption('nolua'):
|
||||||
|
env.Append(CPPDEFINES=["LUACONSOLE"])
|
||||||
if GetOption("ptw32-static"):
|
if GetOption("ptw32-static"):
|
||||||
env.Append(CPPDEFINES=['PTW32_STATIC_LIB']);
|
env.Append(CPPDEFINES=['PTW32_STATIC_LIB']);
|
||||||
|
|
||||||
@ -267,6 +271,7 @@ sources+=Glob("src/gui/*/*.cpp")
|
|||||||
sources+=Glob("src/simulation/elements/*.cpp")
|
sources+=Glob("src/simulation/elements/*.cpp")
|
||||||
sources+=Glob("src/simulation/tools/*.cpp")
|
sources+=Glob("src/simulation/tools/*.cpp")
|
||||||
sources+=Glob("src/client/requestbroker/*.cpp")
|
sources+=Glob("src/client/requestbroker/*.cpp")
|
||||||
|
if not GetOption('nolua'):
|
||||||
sources+=Glob("src/socket/*.c")
|
sources+=Glob("src/socket/*.c")
|
||||||
|
|
||||||
#for source in sources:
|
#for source in sources:
|
||||||
|
12
generator.py
12
generator.py
@ -141,9 +141,11 @@ def generateTools(toolFiles, outputCpp, outputH):
|
|||||||
|
|
||||||
toolHeader = """#ifndef TOOLCLASSES_H
|
toolHeader = """#ifndef TOOLCLASSES_H
|
||||||
#define TOOLCLASSES_H
|
#define TOOLCLASSES_H
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "simulation/Tools.h"
|
|
||||||
#include "simulation/tools/SimTool.h"
|
#include "simulation/tools/SimTool.h"
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
directives = []
|
directives = []
|
||||||
@ -176,17 +178,19 @@ def generateTools(toolFiles, outputCpp, outputH):
|
|||||||
toolClasses[d[1]].append(string.join(d[2:], " ")+";")
|
toolClasses[d[1]].append(string.join(d[2:], " ")+";")
|
||||||
|
|
||||||
for className, classMembers in toolClasses.items():
|
for className, classMembers in toolClasses.items():
|
||||||
toolHeader += """class {0}: public SimTool
|
toolHeader += """
|
||||||
|
class {0}: public SimTool
|
||||||
{{
|
{{
|
||||||
public:
|
public:
|
||||||
{0}();
|
{0}();
|
||||||
virtual ~{0}();
|
virtual ~{0}();
|
||||||
virtual int Perform(Simulation * sim, Particle * cpart, int x, int y, float strength);
|
virtual int Perform(Simulation * sim, Particle * cpart, int x, int y, float strength);
|
||||||
{1}
|
|
||||||
}};
|
}};
|
||||||
""".format(className, string.join(classMembers, "\n"))
|
""".format(className, string.join(classMembers, "\n"))
|
||||||
|
|
||||||
toolHeader += """std::vector<SimTool*> GetTools();
|
toolHeader += """
|
||||||
|
std::vector<SimTool*> GetTools();
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#ifdef LUACONSOLE
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -691,9 +692,6 @@ char *luacon_geterror(){
|
|||||||
lua_pop(luacon_ci->l, 1);
|
lua_pop(luacon_ci->l, 1);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
/*void luacon_close(){
|
|
||||||
lua_close(l);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
//TPT Interface methods
|
//TPT Interface methods
|
||||||
int luatpt_test(lua_State* l)
|
int luatpt_test(lua_State* l)
|
||||||
@ -915,7 +913,12 @@ int luatpt_create(lua_State* l)
|
|||||||
int luatpt_setpause(lua_State* l)
|
int luatpt_setpause(lua_State* l)
|
||||||
{
|
{
|
||||||
int pausestate;
|
int pausestate;
|
||||||
pausestate = luaL_optint(l, 1, 0);
|
pausestate = luaL_optint(l, 1, -1);
|
||||||
|
if (pausestate == -1)
|
||||||
|
{
|
||||||
|
lua_pushnumber(l, luacon_model->GetPaused());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
luacon_model->SetPaused(pausestate==0?0:1);
|
luacon_model->SetPaused(pausestate==0?0:1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -923,21 +926,27 @@ int luatpt_setpause(lua_State* l)
|
|||||||
int luatpt_togglepause(lua_State* l)
|
int luatpt_togglepause(lua_State* l)
|
||||||
{
|
{
|
||||||
luacon_model->SetPaused(!luacon_model->GetPaused());
|
luacon_model->SetPaused(!luacon_model->GetPaused());
|
||||||
//sys_pause=!sys_pause;
|
lua_pushnumber(l, luacon_model->GetPaused());
|
||||||
return 0;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int luatpt_togglewater(lua_State* l)
|
int luatpt_togglewater(lua_State* l)
|
||||||
{
|
{
|
||||||
luacon_sim->water_equal_test=!luacon_sim->water_equal_test;
|
luacon_sim->water_equal_test=!luacon_sim->water_equal_test;
|
||||||
return 0;
|
lua_pushnumber(l, luacon_sim->water_equal_test);
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
int luatpt_setconsole(lua_State* l)
|
int luatpt_setconsole(lua_State* l)
|
||||||
{
|
{
|
||||||
int consolestate;
|
int consolestate;
|
||||||
consolestate = luaL_optint(l, 1, 0);
|
consolestate = luaL_optint(l, 1, -1);
|
||||||
if (consolestate)
|
if (consolestate == -1)
|
||||||
|
{
|
||||||
|
lua_pushnumber(l, luacon_ci->Window != ui::Engine::Ref().GetWindow());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if (consolestate)
|
||||||
luacon_controller->ShowConsole();
|
luacon_controller->ShowConsole();
|
||||||
else
|
else
|
||||||
luacon_controller->HideConsole();
|
luacon_controller->HideConsole();
|
||||||
@ -1541,11 +1550,13 @@ int luatpt_get_name(lua_State* l)
|
|||||||
|
|
||||||
int luatpt_set_shortcuts(lua_State* l)
|
int luatpt_set_shortcuts(lua_State* l)
|
||||||
{
|
{
|
||||||
int shortcut = luaL_optint(l, 1, 0);
|
int shortcut = luaL_optint(l, 1, -1);
|
||||||
if (shortcut)
|
if (shortcut == -1)
|
||||||
shortcuts = true;
|
{
|
||||||
else
|
lua_pushnumber(l, shortcuts);
|
||||||
shortcuts = false;
|
return 1;
|
||||||
|
}
|
||||||
|
shortcuts = shortcut?true:false;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1739,7 +1750,7 @@ int luatpt_message_box(lua_State* l)
|
|||||||
{
|
{
|
||||||
std::string title = std::string(luaL_optstring(l, 1, "Title"));
|
std::string title = std::string(luaL_optstring(l, 1, "Title"));
|
||||||
std::string message = std::string(luaL_optstring(l, 2, "Message"));
|
std::string message = std::string(luaL_optstring(l, 2, "Message"));
|
||||||
int large = luaL_optint(l, 1, 0);
|
int large = lua_toboolean(l, 3);
|
||||||
new InformationMessage(title, message, large);
|
new InformationMessage(title, message, large);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -1784,8 +1795,13 @@ int luatpt_getPartIndex(lua_State* l)
|
|||||||
}
|
}
|
||||||
int luatpt_hud(lua_State* l)
|
int luatpt_hud(lua_State* l)
|
||||||
{
|
{
|
||||||
int hudstate = luaL_optint(l, 1, 0);
|
int hudstate = luaL_optint(l, 1, -1);
|
||||||
if (hudstate)
|
if (hudstate == -1)
|
||||||
|
{
|
||||||
|
lua_pushinteger(l, luacon_controller->GetHudEnable());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if (hudstate)
|
||||||
luacon_controller->SetHudEnable(1);
|
luacon_controller->SetHudEnable(1);
|
||||||
else
|
else
|
||||||
luacon_controller->SetHudEnable(0);
|
luacon_controller->SetHudEnable(0);
|
||||||
@ -1794,26 +1810,43 @@ int luatpt_hud(lua_State* l)
|
|||||||
int luatpt_gravity(lua_State* l)
|
int luatpt_gravity(lua_State* l)
|
||||||
{
|
{
|
||||||
int gravstate;
|
int gravstate;
|
||||||
gravstate = luaL_optint(l, 1, 0);
|
gravstate = luaL_optint(l, 1, -1);
|
||||||
if(gravstate)
|
if (gravstate == -1)
|
||||||
|
{
|
||||||
|
lua_pushinteger(l, luacon_sim->grav->ngrav_enable);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if(gravstate)
|
||||||
luacon_sim->grav->start_grav_async();
|
luacon_sim->grav->start_grav_async();
|
||||||
else
|
else
|
||||||
luacon_sim->grav->stop_grav_async();
|
luacon_sim->grav->stop_grav_async();
|
||||||
|
luacon_model->UpdateQuickOptions();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int luatpt_airheat(lua_State* l)
|
int luatpt_airheat(lua_State* l)
|
||||||
{
|
{
|
||||||
int aheatstate;
|
int aheatstate;
|
||||||
aheatstate = luaL_optint(l, 1, 0);
|
aheatstate = luaL_optint(l, 1, -1);
|
||||||
|
if (aheatstate == -1)
|
||||||
|
{
|
||||||
|
lua_pushinteger(l, luacon_sim->aheat_enable);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
luacon_sim->aheat_enable = (aheatstate==0?0:1);
|
luacon_sim->aheat_enable = (aheatstate==0?0:1);
|
||||||
|
luacon_model->UpdateQuickOptions();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
int luatpt_active_menu(lua_State* l)
|
int luatpt_active_menu(lua_State* l)
|
||||||
{
|
{
|
||||||
int menuid;
|
int menuid;
|
||||||
menuid = luaL_optint(l, 1, -1);
|
menuid = luaL_optint(l, 1, -1);
|
||||||
if (menuid < SC_TOTAL && menuid >= 0)
|
if (menuid == -1)
|
||||||
luacon_model->SetActiveMenu(luacon_model->GetMenuList()[menuid]);
|
{
|
||||||
|
lua_pushinteger(l, luacon_model->GetActiveMenu());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (menuid >= 0 && menuid < SC_TOTAL)
|
||||||
|
luacon_controller->SetActiveMenu(menuid);
|
||||||
else
|
else
|
||||||
return luaL_error(l, "Invalid menu");
|
return luaL_error(l, "Invalid menu");
|
||||||
return 0;
|
return 0;
|
||||||
@ -1821,22 +1854,35 @@ int luatpt_active_menu(lua_State* l)
|
|||||||
int luatpt_decorations_enable(lua_State* l)
|
int luatpt_decorations_enable(lua_State* l)
|
||||||
{
|
{
|
||||||
int decostate;
|
int decostate;
|
||||||
decostate = luaL_optint(l, 1, 0);
|
decostate = luaL_optint(l, 1, -1);
|
||||||
|
if (decostate == -1)
|
||||||
|
{
|
||||||
|
lua_pushinteger(l, luacon_model->GetDecoration());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
luacon_model->SetDecoration(decostate==0?false:true);
|
luacon_model->SetDecoration(decostate==0?false:true);
|
||||||
|
luacon_model->UpdateQuickOptions();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int luatpt_heat(lua_State* l)
|
int luatpt_heat(lua_State* l)
|
||||||
{
|
{
|
||||||
int heatstate;
|
int heatstate;
|
||||||
heatstate = luaL_optint(l, 1, 0);
|
heatstate = luaL_optint(l, 1, -1);
|
||||||
|
if (heatstate == -1)
|
||||||
|
{
|
||||||
|
lua_pushinteger(l, luacon_sim->legacy_enable);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
luacon_sim->legacy_enable = (heatstate==1?0:1);
|
luacon_sim->legacy_enable = (heatstate==1?0:1);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int luatpt_cmode_set(lua_State* l)
|
int luatpt_cmode_set(lua_State* l)
|
||||||
{
|
{
|
||||||
int cmode = luaL_optint(l, 1, 0)+1;
|
int cmode = luaL_optint(l, 1, 3)+1;
|
||||||
|
if (cmode == 11)
|
||||||
|
cmode = 0;
|
||||||
if (cmode >= 0 && cmode <= 10)
|
if (cmode >= 0 && cmode <= 10)
|
||||||
luacon_controller->LoadRenderPreset(cmode);
|
luacon_controller->LoadRenderPreset(cmode);
|
||||||
else
|
else
|
||||||
@ -1857,8 +1903,13 @@ int luatpt_setdebug(lua_State* l)
|
|||||||
}
|
}
|
||||||
int luatpt_setfpscap(lua_State* l)
|
int luatpt_setfpscap(lua_State* l)
|
||||||
{
|
{
|
||||||
int fpscap = luaL_optint(l, 1, 0);
|
int fpscap = luaL_optint(l, 1, -1);
|
||||||
if (fpscap < 2)
|
if (fpscap == -1)
|
||||||
|
{
|
||||||
|
lua_pushinteger(l, ui::Engine::Ref().FpsLimit);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if (fpscap < 2)
|
||||||
return luaL_error(l, "fps cap too small");
|
return luaL_error(l, "fps cap too small");
|
||||||
ui::Engine::Ref().FpsLimit = fpscap;
|
ui::Engine::Ref().FpsLimit = fpscap;
|
||||||
return 0;
|
return 0;
|
||||||
@ -1983,4 +2034,4 @@ int luatpt_screenshot(lua_State* l)
|
|||||||
Client::Ref().WriteFile(data, filename.str());
|
Client::Ref().WriteFile(data, filename.str());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#ifdef LUACONSOLE
|
||||||
/*
|
/*
|
||||||
** Lua BitOp -- a bit operations library for Lua 5.1/5.2.
|
** Lua BitOp -- a bit operations library for Lua 5.1/5.2.
|
||||||
** http://bitop.luajit.org/
|
** http://bitop.luajit.org/
|
||||||
@ -189,4 +190,4 @@ int luaopen_bit(lua_State *L)
|
|||||||
#endif
|
#endif
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#ifdef LUACONSOLE
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#include "lua.h"
|
#include "lua.h"
|
||||||
@ -112,3 +113,4 @@ void LuaButton::triggerAction()
|
|||||||
LuaButton::~LuaButton()
|
LuaButton::~LuaButton()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#ifdef LUACONSOLE
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#include "lua.h"
|
#include "lua.h"
|
||||||
@ -110,3 +111,4 @@ void LuaCheckbox::triggerAction()
|
|||||||
LuaCheckbox::~LuaCheckbox()
|
LuaCheckbox::~LuaCheckbox()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#ifdef LUACONSOLE
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#include "lua.h"
|
#include "lua.h"
|
||||||
@ -80,3 +81,4 @@ LuaComponent::~LuaComponent()
|
|||||||
component->GetParentWindow()->RemoveComponent(component);
|
component->GetParentWindow()->RemoveComponent(component);
|
||||||
delete component;
|
delete component;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#ifdef LUACONSOLE
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#include "lua.h"
|
#include "lua.h"
|
||||||
@ -53,3 +54,4 @@ int LuaLabel::text(lua_State * l)
|
|||||||
LuaLabel::~LuaLabel()
|
LuaLabel::~LuaLabel()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#ifdef LUACONSOLE
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#include "lua.h"
|
#include "lua.h"
|
||||||
@ -69,3 +70,4 @@ int LuaProgressBar::status(lua_State * l)
|
|||||||
LuaProgressBar::~LuaProgressBar()
|
LuaProgressBar::~LuaProgressBar()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#ifdef LUACONSOLE
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -14,6 +15,7 @@
|
|||||||
#include "gui/dialogues/TextPrompt.h"
|
#include "gui/dialogues/TextPrompt.h"
|
||||||
#include "gui/dialogues/ConfirmPrompt.h"
|
#include "gui/dialogues/ConfirmPrompt.h"
|
||||||
#include "simulation/Simulation.h"
|
#include "simulation/Simulation.h"
|
||||||
|
#include "ToolClasses.h"
|
||||||
#include "gui/game/GameModel.h"
|
#include "gui/game/GameModel.h"
|
||||||
#include "gui/game/Tool.h"
|
#include "gui/game/Tool.h"
|
||||||
#include "LuaScriptHelper.h"
|
#include "LuaScriptHelper.h"
|
||||||
@ -446,6 +448,27 @@ void LuaScriptInterface::initSimulationAPI()
|
|||||||
{"velocityX", simulation_velocityX},
|
{"velocityX", simulation_velocityX},
|
||||||
{"velocityY", simulation_velocityY},
|
{"velocityY", simulation_velocityY},
|
||||||
{"gravMap", simulation_gravMap},
|
{"gravMap", simulation_gravMap},
|
||||||
|
{"createParts", simulation_createParts},
|
||||||
|
{"createLine", simulation_createLine},
|
||||||
|
{"createBox", simulation_createBox},
|
||||||
|
{"floodParts", simulation_floodParts},
|
||||||
|
{"createWalls", simulation_createWalls},
|
||||||
|
{"createWallLine", simulation_createWallLine},
|
||||||
|
{"createWallBox", simulation_createWallBox},
|
||||||
|
{"floodWalls", simulation_floodWalls},
|
||||||
|
{"toolBrush", simulation_toolBrush},
|
||||||
|
{"toolLine", simulation_toolLine},
|
||||||
|
{"toolBox", simulation_toolBox},
|
||||||
|
{"decoBrush", simulation_decoBrush},
|
||||||
|
{"decoLine", simulation_decoLine},
|
||||||
|
{"decoBox", simulation_decoBox},
|
||||||
|
{"decoColor", simulation_decoColor},
|
||||||
|
{"decoColour", simulation_decoColor},
|
||||||
|
{"clearSim", simulation_clearSim},
|
||||||
|
{"saveStamp", simulation_saveStamp},
|
||||||
|
{"loadStamp", simulation_loadStamp},
|
||||||
|
{"loadSave", simulation_loadSave},
|
||||||
|
{"adjustCoords", simulation_adjustCoords},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
luaL_register(l, "simulation", simulationAPIMethods);
|
luaL_register(l, "simulation", simulationAPIMethods);
|
||||||
@ -464,6 +487,20 @@ void LuaScriptInterface::initSimulationAPI()
|
|||||||
lua_pushinteger(l, MAX_TEMP); lua_setfield(l, simulationAPI, "MAX_TEMP");
|
lua_pushinteger(l, MAX_TEMP); lua_setfield(l, simulationAPI, "MAX_TEMP");
|
||||||
lua_pushinteger(l, MIN_TEMP); lua_setfield(l, simulationAPI, "MIN_TEMP");
|
lua_pushinteger(l, MIN_TEMP); lua_setfield(l, simulationAPI, "MIN_TEMP");
|
||||||
|
|
||||||
|
lua_pushinteger(l, TOOL_HEAT); lua_setfield(l, simulationAPI, "TOOL_HEAT");
|
||||||
|
lua_pushinteger(l, TOOL_COOL); lua_setfield(l, simulationAPI, "TOOL_COOL");
|
||||||
|
lua_pushinteger(l, TOOL_VAC); lua_setfield(l, simulationAPI, "TOOL_VAC");
|
||||||
|
lua_pushinteger(l, TOOL_AIR); lua_setfield(l, simulationAPI, "TOOL_AIR");
|
||||||
|
lua_pushinteger(l, TOOL_PGRV); lua_setfield(l, simulationAPI, "TOOL_PGRV");
|
||||||
|
lua_pushinteger(l, TOOL_NGRV); lua_setfield(l, simulationAPI, "TOOL_NGRV");
|
||||||
|
lua_pushinteger(l, DECO_DRAW); lua_setfield(l, simulationAPI, "DECO_DRAW");
|
||||||
|
lua_pushinteger(l, DECO_CLEAR); lua_setfield(l, simulationAPI, "DECO_CLEAR");
|
||||||
|
lua_pushinteger(l, DECO_ADD); lua_setfield(l, simulationAPI, "DECO_ADD");
|
||||||
|
lua_pushinteger(l, DECO_SUBTRACT); lua_setfield(l, simulationAPI, "DECO_SUBTRACT");
|
||||||
|
lua_pushinteger(l, DECO_MULTIPLY); lua_setfield(l, simulationAPI, "DECO_MULTIPLY");
|
||||||
|
lua_pushinteger(l, DECO_DIVIDE); lua_setfield(l, simulationAPI, "DECO_DIVIDE");
|
||||||
|
lua_pushinteger(l, DECO_SMUDGE); lua_setfield(l, simulationAPI, "DECO_SMUDGE");
|
||||||
|
|
||||||
//Declare FIELD_BLAH constants
|
//Declare FIELD_BLAH constants
|
||||||
std::vector<StructProperty> particlePropertiesV = Particle::GetProperties();
|
std::vector<StructProperty> particlePropertiesV = Particle::GetProperties();
|
||||||
particlePropertiesCount = 0;
|
particlePropertiesCount = 0;
|
||||||
@ -913,6 +950,374 @@ int LuaScriptInterface::simulation_gravMap(lua_State* l)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_createParts(lua_State * l)
|
||||||
|
{
|
||||||
|
int x = luaL_optint(l,1,-1);
|
||||||
|
int y = luaL_optint(l,2,-1);
|
||||||
|
int rx = luaL_optint(l,3,5);
|
||||||
|
int ry = luaL_optint(l,4,5);
|
||||||
|
int c = luaL_optint(l,5,luacon_model->GetActiveTool(0)->GetToolID());
|
||||||
|
int brush = luaL_optint(l,6,CIRCLE_BRUSH);
|
||||||
|
int flags = luaL_optint(l,7,0);
|
||||||
|
|
||||||
|
vector<Brush*> brushList = luacon_model->GetBrushList();
|
||||||
|
if (brush < 0 || brush >= brushList.size())
|
||||||
|
return luaL_error(l, "Invalid brush id '%d'", brush);
|
||||||
|
ui::Point tempRadius = brushList[brush]->GetRadius();
|
||||||
|
brushList[brush]->SetRadius(ui::Point(rx, ry));
|
||||||
|
|
||||||
|
int ret = luacon_sim->CreateParts(x, y, c, brushList[brush]);
|
||||||
|
brushList[brush]->SetRadius(tempRadius);
|
||||||
|
lua_pushinteger(l, ret);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_createLine(lua_State * l)
|
||||||
|
{
|
||||||
|
int x1 = luaL_optint(l,1,-1);
|
||||||
|
int y1 = luaL_optint(l,2,-1);
|
||||||
|
int x2 = luaL_optint(l,3,-1);
|
||||||
|
int y2 = luaL_optint(l,4,-1);
|
||||||
|
int rx = luaL_optint(l,5,5);
|
||||||
|
int ry = luaL_optint(l,6,5);
|
||||||
|
int c = luaL_optint(l,7,luacon_model->GetActiveTool(0)->GetToolID());
|
||||||
|
int brush = luaL_optint(l,8,CIRCLE_BRUSH);
|
||||||
|
int flags = luaL_optint(l,9,0);
|
||||||
|
|
||||||
|
vector<Brush*> brushList = luacon_model->GetBrushList();
|
||||||
|
if (brush < 0 || brush >= brushList.size())
|
||||||
|
return luaL_error(l, "Invalid brush id '%d'", brush);
|
||||||
|
ui::Point tempRadius = brushList[brush]->GetRadius();
|
||||||
|
brushList[brush]->SetRadius(ui::Point(rx, ry));
|
||||||
|
|
||||||
|
luacon_sim->CreateLine(x1, y1, x2, y2, c, brushList[brush]);
|
||||||
|
brushList[brush]->SetRadius(tempRadius);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_createBox(lua_State * l)
|
||||||
|
{
|
||||||
|
int x1 = luaL_optint(l,1,-1);
|
||||||
|
int y1 = luaL_optint(l,2,-1);
|
||||||
|
int x2 = luaL_optint(l,3,-1);
|
||||||
|
int y2 = luaL_optint(l,4,-1);
|
||||||
|
int c = luaL_optint(l,5,luacon_model->GetActiveTool(0)->GetToolID());
|
||||||
|
int flags = luaL_optint(l,6,0);
|
||||||
|
|
||||||
|
luacon_sim->CreateBox(x1, y1, x2, y2, c, flags);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_floodParts(lua_State * l)
|
||||||
|
{
|
||||||
|
int x = luaL_optint(l,1,-1);
|
||||||
|
int y = luaL_optint(l,2,-1);
|
||||||
|
int c = luaL_optint(l,3,luacon_model->GetActiveTool(0)->GetToolID());
|
||||||
|
int cm = luaL_optint(l,4,-1);
|
||||||
|
int bm = luaL_optint(l,5,-1);
|
||||||
|
int flags = luaL_optint(l,6,0);
|
||||||
|
int ret = luacon_sim->FloodParts(x, y, c, cm, bm, flags);
|
||||||
|
lua_pushinteger(l, ret);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_createWalls(lua_State * l)
|
||||||
|
{
|
||||||
|
int x = luaL_optint(l,1,-1);
|
||||||
|
int y = luaL_optint(l,2,-1);
|
||||||
|
int rx = luaL_optint(l,3,0);
|
||||||
|
int ry = luaL_optint(l,4,0);
|
||||||
|
int c = luaL_optint(l,5,8);
|
||||||
|
int flags = luaL_optint(l,6,0);
|
||||||
|
if (c < 0 || c >= UI_WALLCOUNT)
|
||||||
|
return luaL_error(l, "Unrecognised wall id '%d'", c);
|
||||||
|
|
||||||
|
int ret = luacon_sim->CreateWalls(x, y, rx, ry, c, flags);
|
||||||
|
lua_pushinteger(l, ret);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_createWallLine(lua_State * l)
|
||||||
|
{
|
||||||
|
int x1 = luaL_optint(l,1,-1);
|
||||||
|
int y1 = luaL_optint(l,2,-1);
|
||||||
|
int x2 = luaL_optint(l,3,-1);
|
||||||
|
int y2 = luaL_optint(l,4,-1);
|
||||||
|
int rx = luaL_optint(l,5,0);
|
||||||
|
int ry = luaL_optint(l,6,0);
|
||||||
|
int c = luaL_optint(l,7,8);
|
||||||
|
int flags = luaL_optint(l,8,0);
|
||||||
|
if (c < 0 || c >= UI_WALLCOUNT)
|
||||||
|
return luaL_error(l, "Unrecognised wall id '%d'", c);
|
||||||
|
|
||||||
|
luacon_sim->CreateWallLine(x1, y1, x2, y2, rx, ry, c, flags);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_createWallBox(lua_State * l)
|
||||||
|
{
|
||||||
|
int x1 = luaL_optint(l,1,-1);
|
||||||
|
int y1 = luaL_optint(l,2,-1);
|
||||||
|
int x2 = luaL_optint(l,3,-1);
|
||||||
|
int y2 = luaL_optint(l,4,-1);
|
||||||
|
int c = luaL_optint(l,5,8);
|
||||||
|
int flags = luaL_optint(l,6,0);
|
||||||
|
if (c < 0 || c >= UI_WALLCOUNT)
|
||||||
|
return luaL_error(l, "Unrecognised wall id '%d'", c);
|
||||||
|
|
||||||
|
luacon_sim->CreateWallBox(x1, y1, x2, y2, c, flags);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_floodWalls(lua_State * l)
|
||||||
|
{
|
||||||
|
int x = luaL_optint(l,1,-1);
|
||||||
|
int y = luaL_optint(l,2,-1);
|
||||||
|
int c = luaL_optint(l,3,8);
|
||||||
|
int cm = luaL_optint(l,4,-1);
|
||||||
|
int bm = luaL_optint(l,5,-1);
|
||||||
|
int flags = luaL_optint(l,6,0);
|
||||||
|
if (c < 0 || c >= UI_WALLCOUNT)
|
||||||
|
return luaL_error(l, "Unrecognised wall id '%d'", c);
|
||||||
|
int ret = luacon_sim->FloodWalls(x, y, c, cm, bm, flags);
|
||||||
|
lua_pushinteger(l, ret);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_toolBrush(lua_State * l)
|
||||||
|
{
|
||||||
|
int x = luaL_optint(l,1,-1);
|
||||||
|
int y = luaL_optint(l,2,-1);
|
||||||
|
int rx = luaL_optint(l,3,5);
|
||||||
|
int ry = luaL_optint(l,4,5);
|
||||||
|
int tool = luaL_optint(l,5,0);
|
||||||
|
int brush = luaL_optint(l,6,CIRCLE_BRUSH);
|
||||||
|
float strength = luaL_optnumber(l,7,1.0f);
|
||||||
|
if (tool < 0 || tool >= luacon_sim->tools.size())
|
||||||
|
return luaL_error(l, "Invalid tool id '%d'", tool);
|
||||||
|
|
||||||
|
vector<Brush*> brushList = luacon_model->GetBrushList();
|
||||||
|
if (brush < 0 || brush >= brushList.size())
|
||||||
|
return luaL_error(l, "Invalid brush id '%d'", brush);
|
||||||
|
ui::Point tempRadius = brushList[brush]->GetRadius();
|
||||||
|
brushList[brush]->SetRadius(ui::Point(rx, ry));
|
||||||
|
|
||||||
|
int ret = luacon_sim->ToolBrush(x, y, tool, brushList[brush], strength);
|
||||||
|
brushList[brush]->SetRadius(tempRadius);
|
||||||
|
lua_pushinteger(l, ret);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_toolLine(lua_State * l)
|
||||||
|
{
|
||||||
|
int x1 = luaL_optint(l,1,-1);
|
||||||
|
int y1 = luaL_optint(l,2,-1);
|
||||||
|
int x2 = luaL_optint(l,3,-1);
|
||||||
|
int y2 = luaL_optint(l,4,-1);
|
||||||
|
int rx = luaL_optint(l,5,5);
|
||||||
|
int ry = luaL_optint(l,6,5);
|
||||||
|
int tool = luaL_optint(l,7,0);
|
||||||
|
int brush = luaL_optint(l,8,CIRCLE_BRUSH);
|
||||||
|
float strength = luaL_optnumber(l,9,1.0f);
|
||||||
|
if (tool < 0 || tool >= luacon_sim->tools.size())
|
||||||
|
return luaL_error(l, "Invalid tool id '%d'", tool);
|
||||||
|
|
||||||
|
vector<Brush*> brushList = luacon_model->GetBrushList();
|
||||||
|
if (brush < 0 || brush >= brushList.size())
|
||||||
|
return luaL_error(l, "Invalid brush id '%d'", brush);
|
||||||
|
ui::Point tempRadius = brushList[brush]->GetRadius();
|
||||||
|
brushList[brush]->SetRadius(ui::Point(rx, ry));
|
||||||
|
|
||||||
|
luacon_sim->ToolLine(x1, y1, x2, y2, tool, brushList[brush], strength);
|
||||||
|
brushList[brush]->SetRadius(tempRadius);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_toolBox(lua_State * l)
|
||||||
|
{
|
||||||
|
int x1 = luaL_optint(l,1,-1);
|
||||||
|
int y1 = luaL_optint(l,2,-1);
|
||||||
|
int x2 = luaL_optint(l,3,-1);
|
||||||
|
int y2 = luaL_optint(l,4,-1);
|
||||||
|
int tool = luaL_optint(l,5,0);
|
||||||
|
float strength = luaL_optnumber(l,6,1.0f);
|
||||||
|
if (tool < 0 || tool >= luacon_sim->tools.size())
|
||||||
|
return luaL_error(l, "Invalid tool id '%d'", tool);
|
||||||
|
|
||||||
|
luacon_sim->ToolBox(x1, y1, x2, y2, tool, strength);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_decoBrush(lua_State * l)
|
||||||
|
{
|
||||||
|
int x = luaL_optint(l,1,-1);
|
||||||
|
int y = luaL_optint(l,2,-1);
|
||||||
|
int rx = luaL_optint(l,3,5);
|
||||||
|
int ry = luaL_optint(l,4,5);
|
||||||
|
int r = luaL_optint(l,5,255);
|
||||||
|
int g = luaL_optint(l,6,255);
|
||||||
|
int b = luaL_optint(l,7,255);
|
||||||
|
int a = luaL_optint(l,8,255);
|
||||||
|
int tool = luaL_optint(l,9,DECO_DRAW);
|
||||||
|
int brush = luaL_optint(l,10,CIRCLE_BRUSH);
|
||||||
|
|
||||||
|
vector<Brush*> brushList = luacon_model->GetBrushList();
|
||||||
|
if (brush < 0 || brush >= brushList.size())
|
||||||
|
return luaL_error(l, "Invalid brush id '%d'", brush);
|
||||||
|
ui::Point tempRadius = brushList[brush]->GetRadius();
|
||||||
|
brushList[brush]->SetRadius(ui::Point(rx, ry));
|
||||||
|
|
||||||
|
luacon_sim->ApplyDecorationPoint(x, y, r, g, b, a, tool, brushList[brush]);
|
||||||
|
brushList[brush]->SetRadius(tempRadius);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_decoLine(lua_State * l)
|
||||||
|
{
|
||||||
|
int x1 = luaL_optint(l,1,-1);
|
||||||
|
int y1 = luaL_optint(l,2,-1);
|
||||||
|
int x2 = luaL_optint(l,3,-1);
|
||||||
|
int y2 = luaL_optint(l,4,-1);
|
||||||
|
int rx = luaL_optint(l,5,5);
|
||||||
|
int ry = luaL_optint(l,6,5);
|
||||||
|
int r = luaL_optint(l,7,255);
|
||||||
|
int g = luaL_optint(l,8,255);
|
||||||
|
int b = luaL_optint(l,9,255);
|
||||||
|
int a = luaL_optint(l,10,255);
|
||||||
|
int tool = luaL_optint(l,11,DECO_DRAW);
|
||||||
|
int brush = luaL_optint(l,12,CIRCLE_BRUSH);
|
||||||
|
|
||||||
|
vector<Brush*> brushList = luacon_model->GetBrushList();
|
||||||
|
if (brush < 0 || brush >= brushList.size())
|
||||||
|
return luaL_error(l, "Invalid brush id '%d'", brush);
|
||||||
|
ui::Point tempRadius = brushList[brush]->GetRadius();
|
||||||
|
brushList[brush]->SetRadius(ui::Point(rx, ry));
|
||||||
|
|
||||||
|
luacon_sim->ApplyDecorationLine(x1, y1, x2, y2, r, g, b, a, tool, brushList[brush]);
|
||||||
|
brushList[brush]->SetRadius(tempRadius);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_decoBox(lua_State * l)
|
||||||
|
{
|
||||||
|
int x1 = luaL_optint(l,1,-1);
|
||||||
|
int y1 = luaL_optint(l,2,-1);
|
||||||
|
int x2 = luaL_optint(l,3,-1);
|
||||||
|
int y2 = luaL_optint(l,4,-1);
|
||||||
|
int rx = luaL_optint(l,5,5);
|
||||||
|
int ry = luaL_optint(l,6,5);
|
||||||
|
int r = luaL_optint(l,7,255);
|
||||||
|
int g = luaL_optint(l,8,255);
|
||||||
|
int b = luaL_optint(l,9,255);
|
||||||
|
int a = luaL_optint(l,10,255);
|
||||||
|
int tool = luaL_optint(l,11,0);
|
||||||
|
|
||||||
|
luacon_sim->ApplyDecorationBox(x1, y1, x2, y2, r, g, b, a, tool);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_decoColor(lua_State * l)
|
||||||
|
{
|
||||||
|
int acount = lua_gettop(l);
|
||||||
|
unsigned int color;
|
||||||
|
if (acount == 0)
|
||||||
|
{
|
||||||
|
ui::Colour tempColor = luacon_model->GetColourSelectorColour();
|
||||||
|
unsigned int color = (tempColor.Alpha << 24) | PIXRGB(tempColor.Red, tempColor.Green, tempColor.Blue);
|
||||||
|
lua_pushnumber(l, color);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else if (acount == 1)
|
||||||
|
color = (unsigned int)luaL_optnumber(l, 1, 0xFFFF0000);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
int r, g, b, a;
|
||||||
|
r = luaL_optint(l, 1, 255);
|
||||||
|
g = luaL_optint(l, 2, 255);
|
||||||
|
b = luaL_optint(l, 3, 255);
|
||||||
|
a = luaL_optint(l, 4, 255);
|
||||||
|
|
||||||
|
if (r < 0) r = 0; if (r > 255) r = 255;
|
||||||
|
if (g < 0) g = 0; if (g > 255) g = 255;
|
||||||
|
if (b < 0) b = 0; if (b > 255) b = 255;
|
||||||
|
if (a < 0) a = 0; if (a > 255) a = 255;
|
||||||
|
|
||||||
|
color = (a << 24) + PIXRGB(r, g, b);
|
||||||
|
}
|
||||||
|
luacon_model->SetColourSelectorColour(ui::Colour(PIXR(color), PIXG(color), PIXB(color), color >> 24));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_clearSim(lua_State * l)
|
||||||
|
{
|
||||||
|
luacon_sim->clear_sim();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_saveStamp(lua_State * l)
|
||||||
|
{
|
||||||
|
int x = luaL_optint(l,1,0);
|
||||||
|
int y = luaL_optint(l,2,0);
|
||||||
|
int w = luaL_optint(l,3,XRES-1);
|
||||||
|
int h = luaL_optint(l,4,YRES-1);
|
||||||
|
std::string name = luacon_controller->StampRegion(ui::Point(x, y), ui::Point(x+w, y+h));
|
||||||
|
lua_pushstring(l, name.c_str());
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_loadStamp(lua_State * l)
|
||||||
|
{
|
||||||
|
int stamp_size, i = -1, j, x, y, ret;
|
||||||
|
SaveFile * tempfile;
|
||||||
|
x = luaL_optint(l,2,0);
|
||||||
|
y = luaL_optint(l,3,0);
|
||||||
|
if (lua_isnumber(l, 1)) //Load from stamp ID
|
||||||
|
{
|
||||||
|
i = luaL_optint(l, 1, 0);
|
||||||
|
int stampCount = Client::Ref().GetStampsCount();
|
||||||
|
if (i < 0 || i >= stampCount)
|
||||||
|
return luaL_error(l, "Invalid stamp ID: %d", i);
|
||||||
|
tempfile = Client::Ref().GetStamp(Client::Ref().GetStamps(0, stampCount)[i]);
|
||||||
|
}
|
||||||
|
else //Load from 10 char name, or full filename
|
||||||
|
{
|
||||||
|
char * filename = (char*)luaL_optstring(l, 1, "");
|
||||||
|
tempfile = Client::Ref().GetStamp(filename);
|
||||||
|
}
|
||||||
|
if (tempfile)
|
||||||
|
{
|
||||||
|
if (luacon_sim->Load(x, y, tempfile->GetGameSave()))
|
||||||
|
{
|
||||||
|
//luacon_sim->sys_pause = (tempfile->GetGameSave()->paused | luacon_model->GetPaused())?1:0;
|
||||||
|
lua_pushinteger(l, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
lua_pushnil(l);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
lua_pushnil(l);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_loadSave(lua_State * l)
|
||||||
|
{
|
||||||
|
int saveID = luaL_optint(l,1,0);
|
||||||
|
int history = luaL_optint(l,2,0); //Exact second a previous save was saved
|
||||||
|
luacon_controller->OpenSavePreview(saveID, history);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::simulation_adjustCoords(lua_State * l)
|
||||||
|
{
|
||||||
|
int x = luaL_optint(l,1,0);
|
||||||
|
int y = luaL_optint(l,2,0);
|
||||||
|
ui::Point Coords = luacon_controller->PointTranslate(ui::Point(x, y));
|
||||||
|
lua_pushinteger(l, Coords.X);
|
||||||
|
lua_pushinteger(l, Coords.Y);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//// Begin Renderer API
|
//// Begin Renderer API
|
||||||
|
|
||||||
void LuaScriptInterface::initRendererAPI()
|
void LuaScriptInterface::initRendererAPI()
|
||||||
@ -1694,6 +2099,8 @@ void LuaScriptInterface::initGraphicsAPI()
|
|||||||
{"drawLine", graphics_drawLine},
|
{"drawLine", graphics_drawLine},
|
||||||
{"drawRect", graphics_drawRect},
|
{"drawRect", graphics_drawRect},
|
||||||
{"fillRect", graphics_fillRect},
|
{"fillRect", graphics_fillRect},
|
||||||
|
{"drawCircle", graphics_drawCircle},
|
||||||
|
{"fillCircle", graphics_fillCircle},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
luaL_register(l, "graphics", graphicsAPIMethods);
|
luaL_register(l, "graphics", graphicsAPIMethods);
|
||||||
@ -1722,24 +2129,22 @@ int LuaScriptInterface::graphics_textSize(lua_State * l)
|
|||||||
|
|
||||||
int LuaScriptInterface::graphics_drawText(lua_State * l)
|
int LuaScriptInterface::graphics_drawText(lua_State * l)
|
||||||
{
|
{
|
||||||
char * text;
|
int x = lua_tointeger(l, 1);
|
||||||
int x, y, r, g, b, a;
|
int y = lua_tointeger(l, 2);
|
||||||
x = lua_tointeger(l, 1);
|
char * text = (char*)lua_tostring(l, 3);
|
||||||
y = lua_tointeger(l, 2);
|
int r = luaL_optint(l, 4, 255);
|
||||||
text = (char*)lua_tostring(l, 3);
|
int g = luaL_optint(l, 5, 255);
|
||||||
r = luaL_optint(l, 4, 255);
|
int b = luaL_optint(l, 6, 255);
|
||||||
g = luaL_optint(l, 5, 255);
|
int a = luaL_optint(l, 7, 255);
|
||||||
b = luaL_optint(l, 6, 255);
|
|
||||||
a = luaL_optint(l, 7, 255);
|
|
||||||
|
|
||||||
if (r<0) r = 0;
|
if (r<0) r = 0;
|
||||||
if (r>255) r = 255;
|
else if (r>255) r = 255;
|
||||||
if (g<0) g = 0;
|
if (g<0) g = 0;
|
||||||
if (g>255) g = 255;
|
else if (g>255) g = 255;
|
||||||
if (b<0) b = 0;
|
if (b<0) b = 0;
|
||||||
if (b>255) b = 255;
|
else if (b>255) b = 255;
|
||||||
if (a<0) a = 0;
|
if (a<0) a = 0;
|
||||||
if (a>255) a = 255;
|
else if (a>255) a = 255;
|
||||||
|
|
||||||
luacon_g->drawtext(x, y, text, r, g, b, a);
|
luacon_g->drawtext(x, y, text, r, g, b, a);
|
||||||
return 0;
|
return 0;
|
||||||
@ -1747,73 +2152,121 @@ int LuaScriptInterface::graphics_drawText(lua_State * l)
|
|||||||
|
|
||||||
int LuaScriptInterface::graphics_drawLine(lua_State * l)
|
int LuaScriptInterface::graphics_drawLine(lua_State * l)
|
||||||
{
|
{
|
||||||
int x1, y1, x2, y2, r, g, b, a;
|
int x1 = lua_tointeger(l, 1);
|
||||||
x1 = lua_tointeger(l, 1);
|
int y1 = lua_tointeger(l, 2);
|
||||||
y1 = lua_tointeger(l, 2);
|
int x2 = lua_tointeger(l, 3);
|
||||||
x2 = lua_tointeger(l, 3);
|
int y2 = lua_tointeger(l, 4);
|
||||||
y2 = lua_tointeger(l, 4);
|
int r = luaL_optint(l, 5, 255);
|
||||||
r = luaL_optint(l, 5, 255);
|
int g = luaL_optint(l, 6, 255);
|
||||||
g = luaL_optint(l, 6, 255);
|
int b = luaL_optint(l, 7, 255);
|
||||||
b = luaL_optint(l, 7, 255);
|
int a = luaL_optint(l, 8, 255);
|
||||||
a = luaL_optint(l, 8, 255);
|
|
||||||
|
|
||||||
if (r<0) r = 0;
|
if (r<0) r = 0;
|
||||||
if (r>255) r = 255;
|
else if (r>255) r = 255;
|
||||||
if (g<0) g = 0;
|
if (g<0) g = 0;
|
||||||
if (g>255) g = 255;
|
else if (g>255) g = 255;
|
||||||
if (b<0) b = 0;
|
if (b<0) b = 0;
|
||||||
if (b>255) b = 255;
|
else if (b>255) b = 255;
|
||||||
if (a<0) a = 0;
|
if (a<0) a = 0;
|
||||||
if (a>255) a = 255;
|
else if (a>255) a = 255;
|
||||||
|
|
||||||
luacon_g->draw_line(x1, y1, x2, y2, r, g, b, a);
|
luacon_g->draw_line(x1, y1, x2, y2, r, g, b, a);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int LuaScriptInterface::graphics_drawRect(lua_State * l)
|
int LuaScriptInterface::graphics_drawRect(lua_State * l)
|
||||||
{
|
{
|
||||||
int x, y, w, h, r, g, b, a;
|
int x = lua_tointeger(l, 1);
|
||||||
x = lua_tointeger(l, 1);
|
int y = lua_tointeger(l, 2);
|
||||||
y = lua_tointeger(l, 2);
|
int width = lua_tointeger(l, 3);
|
||||||
w = lua_tointeger(l, 3);
|
int height = lua_tointeger(l, 4);
|
||||||
h = lua_tointeger(l, 4);
|
int r = luaL_optint(l, 5, 255);
|
||||||
r = luaL_optint(l, 5, 255);
|
int g = luaL_optint(l, 6, 255);
|
||||||
g = luaL_optint(l, 6, 255);
|
int b = luaL_optint(l, 7, 255);
|
||||||
b = luaL_optint(l, 7, 255);
|
int a = luaL_optint(l, 8, 255);
|
||||||
a = luaL_optint(l, 8, 255);
|
|
||||||
|
|
||||||
if (r<0) r = 0;
|
if (r<0) r = 0;
|
||||||
if (r>255) r = 255;
|
else if (r>255) r = 255;
|
||||||
if (g<0) g = 0;
|
if (g<0) g = 0;
|
||||||
if (g>255) g = 255;
|
else if (g>255) g = 255;
|
||||||
if (b<0) b = 0;
|
if (b<0) b = 0;
|
||||||
if (b>255) b = 255;
|
else if (b>255) b = 255;
|
||||||
if (a<0) a = 0;
|
if (a<0) a = 0;
|
||||||
if (a>255) a = 255;
|
else if (a>255) a = 255;
|
||||||
luacon_g->drawrect(x, y, w, h, r, g, b, a);
|
|
||||||
|
luacon_g->drawrect(x, y, width, height, r, g, b, a);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int LuaScriptInterface::graphics_fillRect(lua_State * l)
|
int LuaScriptInterface::graphics_fillRect(lua_State * l)
|
||||||
{
|
{
|
||||||
int x, y, w, h, r, g, b, a;
|
int x = lua_tointeger(l, 1);
|
||||||
x = lua_tointeger(l, 1);
|
int y = lua_tointeger(l, 2);
|
||||||
y = lua_tointeger(l, 2);
|
int width = lua_tointeger(l, 3);
|
||||||
w = lua_tointeger(l, 3);
|
int height = lua_tointeger(l, 4);
|
||||||
h = lua_tointeger(l, 4);
|
int r = luaL_optint(l, 5, 255);
|
||||||
r = luaL_optint(l, 5, 255);
|
int g = luaL_optint(l, 6, 255);
|
||||||
g = luaL_optint(l, 6, 255);
|
int b = luaL_optint(l, 7, 255);
|
||||||
b = luaL_optint(l, 7, 255);
|
int a = luaL_optint(l, 8, 255);
|
||||||
a = luaL_optint(l, 8, 255);
|
|
||||||
|
|
||||||
if (r<0) r = 0;
|
if (r<0) r = 0;
|
||||||
if (r>255) r = 255;
|
else if (r>255) r = 255;
|
||||||
if (g<0) g = 0;
|
if (g<0) g = 0;
|
||||||
if (g>255) g = 255;
|
else if (g>255) g = 255;
|
||||||
if (b<0) b = 0;
|
if (b<0) b = 0;
|
||||||
if (b>255) b = 255;
|
else if (b>255) b = 255;
|
||||||
if (a<0) a = 0;
|
if (a<0) a = 0;
|
||||||
if (a>255) a = 255;
|
else if (a>255) a = 255;
|
||||||
luacon_g->fillrect(x, y, w, h, r, g, b, a);
|
|
||||||
|
luacon_g->fillrect(x, y, width, height, r, g, b, a);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::graphics_drawCircle(lua_State * l)
|
||||||
|
{
|
||||||
|
int x = lua_tointeger(l, 1);
|
||||||
|
int y = lua_tointeger(l, 2);
|
||||||
|
int rx = lua_tointeger(l, 3);
|
||||||
|
int ry = lua_tointeger(l, 4);
|
||||||
|
int r = luaL_optint(l, 5, 255);
|
||||||
|
int g = luaL_optint(l, 6, 255);
|
||||||
|
int b = luaL_optint(l, 7, 255);
|
||||||
|
int a = luaL_optint(l, 8, 255);
|
||||||
|
|
||||||
|
if (r<0) r = 0;
|
||||||
|
else if (r>255) r = 255;
|
||||||
|
if (g<0) g = 0;
|
||||||
|
else if (g>255) g = 255;
|
||||||
|
if (b<0) b = 0;
|
||||||
|
else if (b>255) b = 255;
|
||||||
|
if (a<0) a = 0;
|
||||||
|
else if (a>255) a = 255;
|
||||||
|
|
||||||
|
luacon_g->drawcircle(x, y, abs(rx), abs(ry), r, g, b, a);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LuaScriptInterface::graphics_fillCircle(lua_State * l)
|
||||||
|
{
|
||||||
|
int x = lua_tointeger(l, 1);
|
||||||
|
int y = lua_tointeger(l, 2);
|
||||||
|
int rx = lua_tointeger(l, 3);
|
||||||
|
int ry = lua_tointeger(l, 4);
|
||||||
|
int r = luaL_optint(l, 5, 255);
|
||||||
|
int g = luaL_optint(l, 6, 255);
|
||||||
|
int b = luaL_optint(l, 7, 255);
|
||||||
|
int a = luaL_optint(l, 8, 255);
|
||||||
|
|
||||||
|
if (r<0) r = 0;
|
||||||
|
else if (r>255) r = 255;
|
||||||
|
if (g<0) g = 0;
|
||||||
|
else if (g>255) g = 255;
|
||||||
|
if (b<0) b = 0;
|
||||||
|
else if (b>255) b = 255;
|
||||||
|
if (a<0) a = 0;
|
||||||
|
else if (a>255) a = 255;
|
||||||
|
|
||||||
|
luacon_g->fillcircle(x, y, abs(rx), abs(ry), r, g, b, a);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2199,5 +2652,7 @@ std::string LuaScriptInterface::FormatCommand(std::string command)
|
|||||||
}
|
}
|
||||||
|
|
||||||
LuaScriptInterface::~LuaScriptInterface() {
|
LuaScriptInterface::~LuaScriptInterface() {
|
||||||
|
lua_close(l);
|
||||||
delete legacy;
|
delete legacy;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -64,6 +64,26 @@ class LuaScriptInterface: public CommandInterface
|
|||||||
static int simulation_velocityY(lua_State * l);
|
static int simulation_velocityY(lua_State * l);
|
||||||
static int simulation_gravMap(lua_State * l);
|
static int simulation_gravMap(lua_State * l);
|
||||||
static int simulation_ambientHeat(lua_State * l);
|
static int simulation_ambientHeat(lua_State * l);
|
||||||
|
static int simulation_createParts(lua_State * l);
|
||||||
|
static int simulation_createLine(lua_State * l);
|
||||||
|
static int simulation_createBox(lua_State * l);
|
||||||
|
static int simulation_floodParts(lua_State * l);
|
||||||
|
static int simulation_createWalls(lua_State * l);
|
||||||
|
static int simulation_createWallLine(lua_State * l);
|
||||||
|
static int simulation_createWallBox(lua_State * l);
|
||||||
|
static int simulation_floodWalls(lua_State * l);
|
||||||
|
static int simulation_toolBrush(lua_State * l);
|
||||||
|
static int simulation_toolLine(lua_State * l);
|
||||||
|
static int simulation_toolBox(lua_State * l);
|
||||||
|
static int simulation_decoBrush(lua_State * l);
|
||||||
|
static int simulation_decoLine(lua_State * l);
|
||||||
|
static int simulation_decoBox(lua_State * l);
|
||||||
|
static int simulation_decoColor(lua_State * l);
|
||||||
|
static int simulation_clearSim(lua_State * l);
|
||||||
|
static int simulation_saveStamp(lua_State * l);
|
||||||
|
static int simulation_loadStamp(lua_State * l);
|
||||||
|
static int simulation_loadSave(lua_State * l);
|
||||||
|
static int simulation_adjustCoords(lua_State * l);
|
||||||
|
|
||||||
//Renderer
|
//Renderer
|
||||||
void initRendererAPI();
|
void initRendererAPI();
|
||||||
@ -100,6 +120,8 @@ class LuaScriptInterface: public CommandInterface
|
|||||||
static int graphics_drawLine(lua_State * l);
|
static int graphics_drawLine(lua_State * l);
|
||||||
static int graphics_drawRect(lua_State * l);
|
static int graphics_drawRect(lua_State * l);
|
||||||
static int graphics_fillRect(lua_State * l);
|
static int graphics_fillRect(lua_State * l);
|
||||||
|
static int graphics_drawCircle(lua_State * l);
|
||||||
|
static int graphics_fillCircle(lua_State * l);
|
||||||
|
|
||||||
void initFileSystemAPI();
|
void initFileSystemAPI();
|
||||||
static int fileSystem_list(lua_State * l);
|
static int fileSystem_list(lua_State * l);
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#ifdef LUACONSOLE
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#include "lua.h"
|
#include "lua.h"
|
||||||
@ -110,3 +111,4 @@ void LuaSlider::triggerOnValueChanged()
|
|||||||
LuaSlider::~LuaSlider()
|
LuaSlider::~LuaSlider()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#ifdef LUACONSOLE
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#include "lua.h"
|
#include "lua.h"
|
||||||
@ -113,3 +114,4 @@ int LuaTextbox::text(lua_State * l)
|
|||||||
LuaTextbox::~LuaTextbox()
|
LuaTextbox::~LuaTextbox()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#ifdef LUACONSOLE
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#include "lua.h"
|
#include "lua.h"
|
||||||
@ -591,3 +592,4 @@ LuaWindow::~LuaWindow()
|
|||||||
ui::Engine::Ref().CloseWindow();
|
ui::Engine::Ref().CloseWindow();
|
||||||
delete window;
|
delete window;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -949,6 +949,8 @@ void Client::MoveStampToFront(std::string stampID)
|
|||||||
SaveFile * Client::GetStamp(std::string stampID)
|
SaveFile * Client::GetStamp(std::string stampID)
|
||||||
{
|
{
|
||||||
std::string stampFile = std::string(STAMPS_DIR PATH_SEP + stampID + ".stm");
|
std::string stampFile = std::string(STAMPS_DIR PATH_SEP + stampID + ".stm");
|
||||||
|
if (!FileExists(stampFile))
|
||||||
|
stampFile = stampID;
|
||||||
if(FileExists(stampFile))
|
if(FileExists(stampFile))
|
||||||
{
|
{
|
||||||
SaveFile * file = new SaveFile(stampID);
|
SaveFile * file = new SaveFile(stampID);
|
||||||
|
@ -947,6 +947,11 @@ void GameSave::readOPS(char * data, int dataLength)
|
|||||||
case PT_PSTN:
|
case PT_PSTN:
|
||||||
if (savedVersion < 87 && particles[newIndex].ctype)
|
if (savedVersion < 87 && particles[newIndex].ctype)
|
||||||
particles[newIndex].life = 1;
|
particles[newIndex].life = 1;
|
||||||
|
case PT_STKM:
|
||||||
|
case PT_STKM2:
|
||||||
|
case PT_FIGH:
|
||||||
|
if (savedVersion < 88 && particles[newIndex].ctype == OLD_SPC_AIR)
|
||||||
|
particles[newIndex].ctype = SPC_AIR;
|
||||||
}
|
}
|
||||||
newIndex++;
|
newIndex++;
|
||||||
}
|
}
|
||||||
@ -1566,6 +1571,9 @@ void GameSave::readPSv(char * data, int dataLength)
|
|||||||
particles[i-1].ctype = (((unsigned char)(firw_data[caddress]))<<16) | (((unsigned char)(firw_data[caddress+1]))<<8) | ((unsigned char)(firw_data[caddress+2]));
|
particles[i-1].ctype = (((unsigned char)(firw_data[caddress]))<<16) | (((unsigned char)(firw_data[caddress+1]))<<8) | ((unsigned char)(firw_data[caddress+2]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (ver < 88) //fix air blowing stickmen
|
||||||
|
if ((particles[i-1].type == PT_STKM || particles[i-1].type == PT_STKM2 || particles[i-1].type == PT_FIGH) && particles[i-1].ctype == OLD_SPC_AIR)
|
||||||
|
particles[i-1].ctype == SPC_AIR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ void VideoBuffer::Resize(float factor, bool resample)
|
|||||||
{
|
{
|
||||||
int newWidth = ((float)Width)*factor;
|
int newWidth = ((float)Width)*factor;
|
||||||
int newHeight = ((float)Height)*factor;
|
int newHeight = ((float)Height)*factor;
|
||||||
Resize(newWidth, newHeight);
|
Resize(newWidth, newHeight, resample);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoBuffer::Resize(int width, int height, bool resample, bool fixedRatio)
|
void VideoBuffer::Resize(int width, int height, bool resample, bool fixedRatio)
|
||||||
|
@ -239,6 +239,8 @@ public:
|
|||||||
void draw_line(int x, int y, int x2, int y2, int r, int g, int b, int a);
|
void draw_line(int x, int y, int x2, int y2, int r, int g, int b, int a);
|
||||||
void drawrect(int x, int y, int width, int height, int r, int g, int b, int a);
|
void drawrect(int x, int y, int width, int height, int r, int g, int b, int a);
|
||||||
void fillrect(int x, int y, int width, int height, int r, int g, int b, int a);
|
void fillrect(int x, int y, int width, int height, int r, int g, int b, int a);
|
||||||
|
void drawcircle(int x, int y, int rx, int ry, int r, int g, int b, int a);
|
||||||
|
void fillcircle(int x, int y, int rx, int ry, int r, int g, int b, int a);
|
||||||
void clearrect(int x, int y, int width, int height);
|
void clearrect(int x, int y, int width, int height);
|
||||||
void gradientrect(int x, int y, int width, int height, int r, int g, int b, int a, int r2, int g2, int b2, int a2);
|
void gradientrect(int x, int y, int width, int height, int r, int g, int b, int a, int r2, int g2, int b2, int a2);
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include "../data/font.h"
|
#include "../data/font.h"
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
int PIXELMETHODS_CLASS::drawtext_outline(int x, int y, const char *s, int r, int g, int b, int a)
|
int PIXELMETHODS_CLASS::drawtext_outline(int x, int y, const char *s, int r, int g, int b, int a)
|
||||||
{
|
{
|
||||||
@ -314,6 +315,59 @@ void PIXELMETHODS_CLASS::fillrect(int x, int y, int width, int height, int r, in
|
|||||||
glEnd();
|
glEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PIXELMETHODS_CLASS::drawcircle(int x, int y, int rx, int ry, int r, int g, int b, int a)
|
||||||
|
{
|
||||||
|
int yTop = ry, yBottom, i, j;
|
||||||
|
if (!rx)
|
||||||
|
{
|
||||||
|
for (j = -ry; j <= ry; j++)
|
||||||
|
blendpixel(x, y+j, r, g, b, a);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (i = 0; i <= rx; i++) {
|
||||||
|
yBottom = yTop;
|
||||||
|
while (pow(i-rx,2.0)*pow(ry,2.0) + pow(yTop-ry,2.0)*pow(rx,2.0) <= pow(rx,2.0)*pow(ry,2.0))
|
||||||
|
yTop++;
|
||||||
|
if (yBottom != yTop)
|
||||||
|
yTop--;
|
||||||
|
for (int j = yBottom; j <= yTop; j++)
|
||||||
|
{
|
||||||
|
blendpixel(x+i-rx, y+j-ry, r, g, b, a);
|
||||||
|
if (i != rx)
|
||||||
|
blendpixel(x-i+rx, y+j-ry, r, g, b, a);
|
||||||
|
if (j != ry)
|
||||||
|
{
|
||||||
|
blendpixel(x+i-rx, y-j+ry, r, g, b, a);
|
||||||
|
if (i != rx)
|
||||||
|
blendpixel(x-i+rx, y-j+ry, r, g, b, a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PIXELMETHODS_CLASS::fillcircle(int x, int y, int rx, int ry, int r, int g, int b, int a)
|
||||||
|
{
|
||||||
|
int yTop = ry+1, yBottom, i, j;
|
||||||
|
if (!rx)
|
||||||
|
{
|
||||||
|
for (j = -ry; j <= ry; j++)
|
||||||
|
blendpixel(x, y+j, r, g, b, a);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (i = 0; i <= rx; i++)
|
||||||
|
{
|
||||||
|
while (pow(i-rx,2.0)*pow(ry,2.0) + pow(yTop-ry,2.0)*pow(rx,2.0) <= pow(rx,2.0)*pow(ry,2.0))
|
||||||
|
yTop++;
|
||||||
|
yBottom = 2*ry - yTop;
|
||||||
|
for (int j = yBottom+1; j < yTop; j++)
|
||||||
|
{
|
||||||
|
blendpixel(x+i-rx, y+j-ry, r, g, b, a);
|
||||||
|
if (i != rx)
|
||||||
|
blendpixel(x-i+rx, y+j-ry, r, g, b, a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void PIXELMETHODS_CLASS::gradientrect(int x, int y, int width, int height, int r, int g, int b, int a, int r2, int g2, int b2, int a2)
|
void PIXELMETHODS_CLASS::gradientrect(int x, int y, int width, int height, int r, int g, int b, int a, int r2, int g2, int b2, int a2)
|
||||||
{
|
{
|
||||||
glBegin(GL_QUADS);
|
glBegin(GL_QUADS);
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
#include "font.h"
|
#include "font.h"
|
||||||
|
#include <math.h>
|
||||||
|
|
||||||
int PIXELMETHODS_CLASS::drawtext_outline(int x, int y, const char *s, int r, int g, int b, int a)
|
int PIXELMETHODS_CLASS::drawtext_outline(int x, int y, const char *s, int r, int g, int b, int a)
|
||||||
{
|
{
|
||||||
@ -356,6 +357,59 @@ void PIXELMETHODS_CLASS::fillrect(int x, int y, int w, int h, int r, int g, int
|
|||||||
blendpixel(x+i, y+j, r, g, b, a);
|
blendpixel(x+i, y+j, r, g, b, a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void PIXELMETHODS_CLASS::drawcircle(int x, int y, int rx, int ry, int r, int g, int b, int a)
|
||||||
|
{
|
||||||
|
int yTop = ry, yBottom, i, j;
|
||||||
|
if (!rx)
|
||||||
|
{
|
||||||
|
for (j = -ry; j <= ry; j++)
|
||||||
|
blendpixel(x, y+j, r, g, b, a);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (i = 0; i <= rx; i++) {
|
||||||
|
yBottom = yTop;
|
||||||
|
while (pow(i-rx,2.0)*pow(ry,2.0) + pow(yTop-ry,2.0)*pow(rx,2.0) <= pow(rx,2.0)*pow(ry,2.0))
|
||||||
|
yTop++;
|
||||||
|
if (yBottom != yTop)
|
||||||
|
yTop--;
|
||||||
|
for (int j = yBottom; j <= yTop; j++)
|
||||||
|
{
|
||||||
|
blendpixel(x+i-rx, y+j-ry, r, g, b, a);
|
||||||
|
if (i != rx)
|
||||||
|
blendpixel(x-i+rx, y+j-ry, r, g, b, a);
|
||||||
|
if (j != ry)
|
||||||
|
{
|
||||||
|
blendpixel(x+i-rx, y-j+ry, r, g, b, a);
|
||||||
|
if (i != rx)
|
||||||
|
blendpixel(x-i+rx, y-j+ry, r, g, b, a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void PIXELMETHODS_CLASS::fillcircle(int x, int y, int rx, int ry, int r, int g, int b, int a)
|
||||||
|
{
|
||||||
|
int yTop = ry+1, yBottom, i, j;
|
||||||
|
if (!rx)
|
||||||
|
{
|
||||||
|
for (j = -ry; j <= ry; j++)
|
||||||
|
blendpixel(x, y+j, r, g, b, a);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (i = 0; i <= rx; i++)
|
||||||
|
{
|
||||||
|
while (pow(i-rx,2.0)*pow(ry,2.0) + pow(yTop-ry,2.0)*pow(rx,2.0) <= pow(rx,2.0)*pow(ry,2.0))
|
||||||
|
yTop++;
|
||||||
|
yBottom = 2*ry - yTop;
|
||||||
|
for (int j = yBottom+1; j < yTop; j++)
|
||||||
|
{
|
||||||
|
blendpixel(x+i-rx, y+j-ry, r, g, b, a);
|
||||||
|
if (i != rx)
|
||||||
|
blendpixel(x-i+rx, y+j-ry, r, g, b, a);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void PIXELMETHODS_CLASS::gradientrect(int x, int y, int width, int height, int r, int g, int b, int a, int r2, int g2, int b2, int a2)
|
void PIXELMETHODS_CLASS::gradientrect(int x, int y, int width, int height, int r, int g, int b, int a, int r2, int g2, int b2, int a2)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -9,8 +9,10 @@
|
|||||||
#include "simulation/Elements.h"
|
#include "simulation/Elements.h"
|
||||||
#include "simulation/ElementGraphics.h"
|
#include "simulation/ElementGraphics.h"
|
||||||
#include "simulation/Air.h"
|
#include "simulation/Air.h"
|
||||||
|
#ifdef LUACONSOLE
|
||||||
#include "cat/LuaScriptInterface.h"
|
#include "cat/LuaScriptInterface.h"
|
||||||
#include "cat/LuaScriptHelper.h"
|
#include "cat/LuaScriptHelper.h"
|
||||||
|
#endif
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
#include "hmap.h"
|
#include "hmap.h"
|
||||||
@ -1212,7 +1214,7 @@ void Renderer::render_parts()
|
|||||||
{
|
{
|
||||||
if (elements[t].Graphics)
|
if (elements[t].Graphics)
|
||||||
{
|
{
|
||||||
#ifndef RENDERER
|
#if !defined(RENDERER) && defined(LUACONSOLE)
|
||||||
if (lua_gr_func[t])
|
if (lua_gr_func[t])
|
||||||
{
|
{
|
||||||
luacon_graphicsReplacement(this, &(sim->parts[i]), nx, ny, &pixel_mode, &cola, &colr, &colg, &colb, &firea, &firer, &fireg, &fireb, i);
|
luacon_graphicsReplacement(this, &(sim->parts[i]), nx, ny, &pixel_mode, &cola, &colr, &colg, &colb, &firea, &firer, &fireg, &fireb, i);
|
||||||
|
@ -126,6 +126,8 @@ public:
|
|||||||
void draw_line(int x, int y, int x2, int y2, int r, int g, int b, int a);
|
void draw_line(int x, int y, int x2, int y2, int r, int g, int b, int a);
|
||||||
void drawrect(int x, int y, int width, int height, int r, int g, int b, int a);
|
void drawrect(int x, int y, int width, int height, int r, int g, int b, int a);
|
||||||
void fillrect(int x, int y, int width, int height, int r, int g, int b, int a);
|
void fillrect(int x, int y, int width, int height, int r, int g, int b, int a);
|
||||||
|
void drawcircle(int x, int y, int rx, int ry, int r, int g, int b, int a);
|
||||||
|
void fillcircle(int x, int y, int rx, int ry, int r, int g, int b, int a);
|
||||||
void clearrect(int x, int y, int width, int height);
|
void clearrect(int x, int y, int width, int height);
|
||||||
void gradientrect(int x, int y, int width, int height, int r, int g, int b, int a, int r2, int g2, int b2, int a2);
|
void gradientrect(int x, int y, int width, int height, int r, int g, int b, int a, int r2, int g2, int b2, int a2);
|
||||||
|
|
||||||
|
@ -29,10 +29,10 @@ public:
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int yTop = ry, yBottom, i, j;
|
int yTop = ry+1, yBottom, i, j;
|
||||||
for (i = 0; i <= rx; i++)
|
for (i = 0; i <= rx; i++)
|
||||||
{
|
{
|
||||||
while (pow(i-rx,2.0f)*pow(ry,2.0f) + pow(yTop-ry,2.0f)*pow(rx,2.0f) <= pow(rx,2.0f)*pow(ry,2.0f))
|
while (pow(i-rx,2.0)*pow(ry,2.0) + pow(yTop-ry,2.0)*pow(rx,2.0) <= pow(rx,2.0)*pow(ry,2.0))
|
||||||
yTop++;
|
yTop++;
|
||||||
yBottom = 2*ry - yTop;
|
yBottom = 2*ry - yTop;
|
||||||
for (int j = 0; j <= ry*2; j++)
|
for (int j = 0; j <= ry*2; j++)
|
||||||
|
@ -145,8 +145,12 @@ GameController::GameController():
|
|||||||
gameView->AttachController(this);
|
gameView->AttachController(this);
|
||||||
gameModel->AddObserver(gameView);
|
gameModel->AddObserver(gameView);
|
||||||
|
|
||||||
commandInterface = new LuaScriptInterface(this, gameModel);//new TPTScriptInterface();
|
#ifdef LUACONSOLE
|
||||||
|
commandInterface = new LuaScriptInterface(this, gameModel);
|
||||||
((LuaScriptInterface*)commandInterface)->SetWindow(gameView);
|
((LuaScriptInterface*)commandInterface)->SetWindow(gameView);
|
||||||
|
#else
|
||||||
|
commandInterface = new TPTScriptInterface(this, gameModel);
|
||||||
|
#endif
|
||||||
|
|
||||||
commandInterface->OnBrushChanged(gameModel->GetBrushID(), gameModel->GetBrush()->GetRadius().X, gameModel->GetBrush()->GetRadius().X);
|
commandInterface->OnBrushChanged(gameModel->GetBrushID(), gameModel->GetBrush()->GetRadius().X, gameModel->GetBrush()->GetRadius().X);
|
||||||
ActiveToolChanged(0, gameModel->GetActiveTool(0));
|
ActiveToolChanged(0, gameModel->GetActiveTool(0));
|
||||||
@ -505,17 +509,20 @@ void GameController::ToolClick(int toolSelection, ui::Point point)
|
|||||||
activeTool->Click(sim, cBrush, point);
|
activeTool->Click(sim, cBrush, point);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameController::StampRegion(ui::Point point1, ui::Point point2)
|
std::string GameController::StampRegion(ui::Point point1, ui::Point point2)
|
||||||
{
|
{
|
||||||
GameSave * newSave;
|
GameSave * newSave;
|
||||||
newSave = gameModel->GetSimulation()->Save(point1.X, point1.Y, point2.X, point2.Y);
|
newSave = gameModel->GetSimulation()->Save(point1.X, point1.Y, point2.X, point2.Y);
|
||||||
if(newSave)
|
if(newSave)
|
||||||
{
|
{
|
||||||
newSave->paused = gameModel->GetPaused();
|
newSave->paused = gameModel->GetPaused();
|
||||||
gameModel->AddStamp(newSave);
|
return gameModel->AddStamp(newSave);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
new ErrorMessage("Could not create stamp", "Error generating save file");
|
new ErrorMessage("Could not create stamp", "Error generating save file");
|
||||||
|
return "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameController::CopyRegion(ui::Point point1, ui::Point point2)
|
void GameController::CopyRegion(ui::Point point1, ui::Point point2)
|
||||||
@ -706,7 +713,9 @@ void GameController::Tick()
|
|||||||
{
|
{
|
||||||
if(firstTick)
|
if(firstTick)
|
||||||
{
|
{
|
||||||
|
#ifdef LUACONSOLE
|
||||||
((LuaScriptInterface*)commandInterface)->Init();
|
((LuaScriptInterface*)commandInterface)->Init();
|
||||||
|
#endif
|
||||||
if(!Client::Ref().GetPrefBool("InstallCheck", false))
|
if(!Client::Ref().GetPrefBool("InstallCheck", false))
|
||||||
{
|
{
|
||||||
Client::Ref().SetPref("InstallCheck", true);
|
Client::Ref().SetPref("InstallCheck", true);
|
||||||
@ -734,7 +743,7 @@ void GameController::ResetAir()
|
|||||||
sim->air->Clear();
|
sim->air->Clear();
|
||||||
for (int i = 0; i < NPART; i++)
|
for (int i = 0; i < NPART; i++)
|
||||||
{
|
{
|
||||||
if (sim->parts[i].type == PT_QRTZ || sim->parts[i].type == PT_GLAS || sim->parts[i].type == PT_TUGN)
|
if (sim->parts[i].type == PT_QRTZ || sim->parts[i].type == PT_GLAS || sim->parts[i].type == PT_TUNG)
|
||||||
{
|
{
|
||||||
sim->parts[i].pavg[0] = sim->parts[i].pavg[1] = 0;
|
sim->parts[i].pavg[0] = sim->parts[i].pavg[1] = 0;
|
||||||
}
|
}
|
||||||
@ -918,6 +927,11 @@ void GameController::SetHudEnable(bool hudState)
|
|||||||
gameView->SetHudEnable(hudState);
|
gameView->SetHudEnable(hudState);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GameController::GetHudEnable()
|
||||||
|
{
|
||||||
|
return gameView->GetHudEnable();
|
||||||
|
}
|
||||||
|
|
||||||
void GameController::SetActiveColourPreset(int preset)
|
void GameController::SetActiveColourPreset(int preset)
|
||||||
{
|
{
|
||||||
gameModel->SetActiveColourPreset(preset);
|
gameModel->SetActiveColourPreset(preset);
|
||||||
@ -929,21 +943,19 @@ void GameController::SetColour(ui::Colour colour)
|
|||||||
gameModel->SetPresetColour(colour);
|
gameModel->SetPresetColour(colour);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameController::SetActiveMenu(Menu * menu)
|
void GameController::SetActiveMenu(int menuID)
|
||||||
{
|
{
|
||||||
gameModel->SetActiveMenu(menu);
|
gameModel->SetActiveMenu(menuID);
|
||||||
vector<Menu*> menuList = gameModel->GetMenuList();
|
vector<Menu*> menuList = gameModel->GetMenuList();
|
||||||
bool set = false;
|
if(menuID == SC_DECO)
|
||||||
for(int i = 0; i < menuList.size(); i++)
|
|
||||||
{
|
|
||||||
if(menuList[i]==menu && i == SC_DECO)
|
|
||||||
{
|
|
||||||
gameModel->SetColourSelectorVisibility(true);
|
gameModel->SetColourSelectorVisibility(true);
|
||||||
set = true;
|
else
|
||||||
}
|
{
|
||||||
}
|
|
||||||
if(!set)
|
|
||||||
gameModel->SetColourSelectorVisibility(false);
|
gameModel->SetColourSelectorVisibility(false);
|
||||||
|
ActiveToolChanged(0, gameModel->GetActiveTool(0));
|
||||||
|
ActiveToolChanged(1, gameModel->GetActiveTool(1));
|
||||||
|
ActiveToolChanged(2, gameModel->GetActiveTool(2));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<Menu*> GameController::GetMenuList()
|
std::vector<Menu*> GameController::GetMenuList()
|
||||||
@ -1036,7 +1048,7 @@ void GameController::LoadSave(SaveInfo * save)
|
|||||||
|
|
||||||
void GameController::OpenSavePreview(int saveID, int saveDate)
|
void GameController::OpenSavePreview(int saveID, int saveDate)
|
||||||
{
|
{
|
||||||
activePreview = new PreviewController(saveID, new SaveOpenCallback(this));
|
activePreview = new PreviewController(saveID, saveDate, new SaveOpenCallback(this));
|
||||||
ui::Engine::Ref().ShowWindow(activePreview->GetView());
|
ui::Engine::Ref().ShowWindow(activePreview->GetView());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1300,7 +1312,7 @@ void GameController::Vote(int direction)
|
|||||||
|
|
||||||
void GameController::ChangeBrush()
|
void GameController::ChangeBrush()
|
||||||
{
|
{
|
||||||
gameModel->SetBrush(gameModel->GetBrushID()+1);
|
gameModel->SetBrushID(gameModel->GetBrushID()+1);
|
||||||
BrushChanged(gameModel->GetBrushID(), gameModel->GetBrush()->GetRadius().X, gameModel->GetBrush()->GetRadius().Y);
|
BrushChanged(gameModel->GetBrushID(), gameModel->GetBrush()->GetRadius().X, gameModel->GetBrush()->GetRadius().Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,8 +14,11 @@
|
|||||||
#include "gui/console/ConsoleController.h"
|
#include "gui/console/ConsoleController.h"
|
||||||
#include "gui/localbrowser/LocalBrowserController.h"
|
#include "gui/localbrowser/LocalBrowserController.h"
|
||||||
#include "gui/options/OptionsController.h"
|
#include "gui/options/OptionsController.h"
|
||||||
//#include "cat/TPTScriptInterface.h"
|
#ifdef LUACONSOLE
|
||||||
#include "cat/LuaScriptInterface.h"
|
#include "cat/LuaScriptInterface.h"
|
||||||
|
#else
|
||||||
|
#include "cat/TPTScriptInterface.h"
|
||||||
|
#endif
|
||||||
#include "client/ClientListener.h"
|
#include "client/ClientListener.h"
|
||||||
#include "RenderPreset.h"
|
#include "RenderPreset.h"
|
||||||
#include "Menu.h"
|
#include "Menu.h"
|
||||||
@ -87,7 +90,7 @@ public:
|
|||||||
void DrawRect(int toolSelection, ui::Point point1, ui::Point point2);
|
void DrawRect(int toolSelection, ui::Point point1, ui::Point point2);
|
||||||
void DrawLine(int toolSelection, ui::Point point1, ui::Point point2);
|
void DrawLine(int toolSelection, ui::Point point1, ui::Point point2);
|
||||||
void DrawFill(int toolSelection, ui::Point point);
|
void DrawFill(int toolSelection, ui::Point point);
|
||||||
void StampRegion(ui::Point point1, ui::Point point2);
|
std::string StampRegion(ui::Point point1, ui::Point point2);
|
||||||
void CopyRegion(ui::Point point1, ui::Point point2);
|
void CopyRegion(ui::Point point1, ui::Point point2);
|
||||||
void CutRegion(ui::Point point1, ui::Point point2);
|
void CutRegion(ui::Point point1, ui::Point point2);
|
||||||
void Update();
|
void Update();
|
||||||
@ -97,7 +100,8 @@ public:
|
|||||||
void SetDecoration();
|
void SetDecoration();
|
||||||
void ShowGravityGrid();
|
void ShowGravityGrid();
|
||||||
void SetHudEnable(bool hudState);
|
void SetHudEnable(bool hudState);
|
||||||
void SetActiveMenu(Menu * menu);
|
bool GetHudEnable();
|
||||||
|
void SetActiveMenu(int menuID);
|
||||||
std::vector<Menu*> GetMenuList();
|
std::vector<Menu*> GetMenuList();
|
||||||
void SetActiveTool(int toolSelection, Tool * tool);
|
void SetActiveTool(int toolSelection, Tool * tool);
|
||||||
void ActiveToolChanged(int toolSelection, Tool *tool);
|
void ActiveToolChanged(int toolSelection, Tool *tool);
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#include "GameView.h"
|
#include "GameView.h"
|
||||||
#include "simulation/Simulation.h"
|
#include "simulation/Simulation.h"
|
||||||
#include "simulation/Air.h"
|
#include "simulation/Air.h"
|
||||||
#include "simulation/Tools.h"
|
#include "ToolClasses.h"
|
||||||
#include "graphics/Renderer.h"
|
#include "graphics/Renderer.h"
|
||||||
#include "gui/interface/Point.h"
|
#include "gui/interface/Point.h"
|
||||||
#include "Brush.h"
|
#include "Brush.h"
|
||||||
@ -31,7 +31,7 @@ GameModel::GameModel():
|
|||||||
colour(255, 0, 0, 255),
|
colour(255, 0, 0, 255),
|
||||||
toolStrength(1.0f),
|
toolStrength(1.0f),
|
||||||
activeColourPreset(-1),
|
activeColourPreset(-1),
|
||||||
activeMenu(NULL),
|
activeMenu(-1),
|
||||||
edgeMode(0)
|
edgeMode(0)
|
||||||
{
|
{
|
||||||
sim = new Simulation();
|
sim = new Simulation();
|
||||||
@ -221,9 +221,9 @@ void GameModel::BuildQuickOptionMenu(GameController * controller)
|
|||||||
|
|
||||||
void GameModel::BuildMenus()
|
void GameModel::BuildMenus()
|
||||||
{
|
{
|
||||||
char lastMenu = 0;
|
int lastMenu = -1;
|
||||||
if(activeMenu)
|
if(activeMenu != -1)
|
||||||
lastMenu = activeMenu->GetIcon();
|
lastMenu = activeMenu;
|
||||||
|
|
||||||
std::string activeToolIdentifiers[3];
|
std::string activeToolIdentifiers[3];
|
||||||
if(regularToolset[0])
|
if(regularToolset[0])
|
||||||
@ -292,7 +292,7 @@ void GameModel::BuildMenus()
|
|||||||
//Build menu for GOL types
|
//Build menu for GOL types
|
||||||
for(int i = 0; i < NGOL; i++)
|
for(int i = 0; i < NGOL; i++)
|
||||||
{
|
{
|
||||||
Tool * tempTool = new GolTool(i, sim->gmenu[i].name, std::string(sim->gmenu[i].description), PIXR(sim->gmenu[i].colour), PIXG(sim->gmenu[i].colour), PIXB(sim->gmenu[i].colour), "DEFAULT_PT_LIFE_"+std::string(sim->gmenu[i].name));
|
Tool * tempTool = new ElementTool(PT_LIFE|(i<<8), sim->gmenu[i].name, std::string(sim->gmenu[i].description), PIXR(sim->gmenu[i].colour), PIXG(sim->gmenu[i].colour), PIXB(sim->gmenu[i].colour), "DEFAULT_PT_LIFE_"+std::string(sim->gmenu[i].name));
|
||||||
menuList[SC_LIFE]->AddTool(tempTool);
|
menuList[SC_LIFE]->AddTool(tempTool);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -346,19 +346,13 @@ void GameModel::BuildMenus()
|
|||||||
lastTool = activeTools[0];
|
lastTool = activeTools[0];
|
||||||
|
|
||||||
//Set default menu
|
//Set default menu
|
||||||
activeMenu = menuList[SC_POWDERS];
|
activeMenu = SC_POWDERS;
|
||||||
|
|
||||||
if(lastMenu)
|
if(lastMenu != -1)
|
||||||
{
|
activeMenu = lastMenu;
|
||||||
for(std::vector<Menu*>::iterator iter = menuList.begin(), end = menuList.end(); iter != end; ++iter)
|
|
||||||
{
|
|
||||||
if((*iter)->GetIcon() == lastMenu)
|
|
||||||
activeMenu = *iter;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(activeMenu)
|
if(activeMenu != -1)
|
||||||
toolList = activeMenu->GetToolList();
|
toolList = menuList[activeMenu]->GetToolList();
|
||||||
else
|
else
|
||||||
toolList = std::vector<Tool*>();
|
toolList = std::vector<Tool*>();
|
||||||
|
|
||||||
@ -424,12 +418,17 @@ Brush * GameModel::GetBrush()
|
|||||||
return brushList[currentBrush];
|
return brushList[currentBrush];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vector<Brush*> GameModel::GetBrushList()
|
||||||
|
{
|
||||||
|
return brushList;
|
||||||
|
}
|
||||||
|
|
||||||
int GameModel::GetBrushID()
|
int GameModel::GetBrushID()
|
||||||
{
|
{
|
||||||
return currentBrush;
|
return currentBrush;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameModel::SetBrush(int i)
|
void GameModel::SetBrushID(int i)
|
||||||
{
|
{
|
||||||
currentBrush = i%brushList.size();
|
currentBrush = i%brushList.size();
|
||||||
notifyBrushChanged();
|
notifyBrushChanged();
|
||||||
@ -466,17 +465,13 @@ float GameModel::GetToolStrength()
|
|||||||
return toolStrength;
|
return toolStrength;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameModel::SetActiveMenu(Menu * menu)
|
void GameModel::SetActiveMenu(int menuID)
|
||||||
{
|
{
|
||||||
for(int i = 0; i < menuList.size(); i++)
|
activeMenu = menuID;
|
||||||
{
|
toolList = menuList[menuID]->GetToolList();
|
||||||
if(menuList[i]==menu)
|
|
||||||
{
|
|
||||||
activeMenu = menu;
|
|
||||||
toolList = menu->GetToolList();
|
|
||||||
notifyToolListChanged();
|
notifyToolListChanged();
|
||||||
|
|
||||||
if(menu == menuList[SC_DECO])
|
if(menuID == SC_DECO)
|
||||||
{
|
{
|
||||||
if(activeTools != decoToolset)
|
if(activeTools != decoToolset)
|
||||||
{
|
{
|
||||||
@ -493,8 +488,6 @@ void GameModel::SetActiveMenu(Menu * menu)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vector<Tool*> GameModel::GetUnlistedTools()
|
vector<Tool*> GameModel::GetUnlistedTools()
|
||||||
{
|
{
|
||||||
@ -506,11 +499,12 @@ vector<Tool*> GameModel::GetToolList()
|
|||||||
return toolList;
|
return toolList;
|
||||||
}
|
}
|
||||||
|
|
||||||
Menu * GameModel::GetActiveMenu()
|
int GameModel::GetActiveMenu()
|
||||||
{
|
{
|
||||||
return activeMenu;
|
return activeMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Get an element tool from an element ID
|
||||||
Tool * GameModel::GetElementTool(int elementID)
|
Tool * GameModel::GetElementTool(int elementID)
|
||||||
{
|
{
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
@ -886,12 +880,12 @@ void GameModel::SetPlaceSave(GameSave * save)
|
|||||||
notifyPlaceSaveChanged();
|
notifyPlaceSaveChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameModel::AddStamp(GameSave * save)
|
std::string GameModel::AddStamp(GameSave * save)
|
||||||
{
|
{
|
||||||
if(stamp)
|
if(stamp)
|
||||||
delete stamp;
|
delete stamp;
|
||||||
stamp = save;
|
stamp = save;
|
||||||
Client::Ref().AddStamp(save);
|
return Client::Ref().AddStamp(save);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameModel::SetClipboard(GameSave * save)
|
void GameModel::SetClipboard(GameSave * save)
|
||||||
|
@ -53,7 +53,7 @@ private:
|
|||||||
|
|
||||||
vector<Menu*> menuList;
|
vector<Menu*> menuList;
|
||||||
vector<QuickOption*> quickOptions;
|
vector<QuickOption*> quickOptions;
|
||||||
Menu * activeMenu;
|
int activeMenu;
|
||||||
int currentBrush;
|
int currentBrush;
|
||||||
vector<Brush *> brushList;
|
vector<Brush *> brushList;
|
||||||
SaveInfo * currentSave;
|
SaveInfo * currentSave;
|
||||||
@ -105,8 +105,6 @@ public:
|
|||||||
GameModel();
|
GameModel();
|
||||||
~GameModel();
|
~GameModel();
|
||||||
|
|
||||||
Tool * GetToolFromIdentifier(std::string identifier);
|
|
||||||
|
|
||||||
void SetEdgeMode(int edgeMode);
|
void SetEdgeMode(int edgeMode);
|
||||||
int GetEdgeMode();
|
int GetEdgeMode();
|
||||||
|
|
||||||
@ -136,26 +134,29 @@ public:
|
|||||||
|
|
||||||
void UpdateQuickOptions();
|
void UpdateQuickOptions();
|
||||||
|
|
||||||
|
Tool * GetActiveTool(int selection);
|
||||||
|
void SetActiveTool(int selection, Tool * tool);
|
||||||
void SetToolStrength(float value);
|
void SetToolStrength(float value);
|
||||||
float GetToolStrength();
|
float GetToolStrength();
|
||||||
|
|
||||||
Tool * GetLastTool();
|
Tool * GetLastTool();
|
||||||
void SetLastTool(Tool * newTool);
|
void SetLastTool(Tool * newTool);
|
||||||
|
Tool * GetToolFromIdentifier(std::string identifier);
|
||||||
|
Tool * GetElementTool(int elementID);
|
||||||
|
vector<Tool*> GetToolList();
|
||||||
|
vector<Tool*> GetUnlistedTools();
|
||||||
|
|
||||||
|
Brush * GetBrush();
|
||||||
|
vector<Brush*> GetBrushList();
|
||||||
|
int GetBrushID();
|
||||||
|
void SetBrushID(int i);
|
||||||
|
|
||||||
void SetVote(int direction);
|
void SetVote(int direction);
|
||||||
SaveInfo * GetSave();
|
SaveInfo * GetSave();
|
||||||
SaveFile * GetSaveFile();
|
SaveFile * GetSaveFile();
|
||||||
Brush * GetBrush();
|
|
||||||
void SetSave(SaveInfo * newSave);
|
void SetSave(SaveInfo * newSave);
|
||||||
void SetSaveFile(SaveFile * newSave);
|
void SetSaveFile(SaveFile * newSave);
|
||||||
void AddObserver(GameView * observer);
|
void AddObserver(GameView * observer);
|
||||||
|
|
||||||
//Get an element tool from an element ID
|
|
||||||
Tool * GetElementTool(int elementID);
|
|
||||||
|
|
||||||
Tool * GetActiveTool(int selection);
|
|
||||||
void SetActiveTool(int selection, Tool * tool);
|
|
||||||
|
|
||||||
bool GetPaused();
|
bool GetPaused();
|
||||||
void SetPaused(bool pauseState);
|
void SetPaused(bool pauseState);
|
||||||
bool GetDecoration();
|
bool GetDecoration();
|
||||||
@ -166,16 +167,12 @@ public:
|
|||||||
void ShowGravityGrid(bool showGrid);
|
void ShowGravityGrid(bool showGrid);
|
||||||
void ClearSimulation();
|
void ClearSimulation();
|
||||||
vector<Menu*> GetMenuList();
|
vector<Menu*> GetMenuList();
|
||||||
vector<Tool*> GetUnlistedTools();
|
|
||||||
vector<Tool*> GetToolList();
|
|
||||||
vector<QuickOption*> GetQuickOptions();
|
vector<QuickOption*> GetQuickOptions();
|
||||||
void SetActiveMenu(Menu * menu);
|
void SetActiveMenu(int menuID);
|
||||||
Menu * GetActiveMenu();
|
int GetActiveMenu();
|
||||||
void FrameStep(int frames);
|
void FrameStep(int frames);
|
||||||
User GetUser();
|
User GetUser();
|
||||||
void SetUser(User user);
|
void SetUser(User user);
|
||||||
void SetBrush(int i);
|
|
||||||
int GetBrushID();
|
|
||||||
Simulation * GetSimulation();
|
Simulation * GetSimulation();
|
||||||
Renderer * GetRenderer();
|
Renderer * GetRenderer();
|
||||||
void SetZoomEnabled(bool enabled);
|
void SetZoomEnabled(bool enabled);
|
||||||
@ -189,7 +186,7 @@ public:
|
|||||||
void SetZoomWindowPosition(ui::Point position);
|
void SetZoomWindowPosition(ui::Point position);
|
||||||
ui::Point GetZoomWindowPosition();
|
ui::Point GetZoomWindowPosition();
|
||||||
void SetStamp(GameSave * newStamp);
|
void SetStamp(GameSave * newStamp);
|
||||||
void AddStamp(GameSave * save);
|
std::string AddStamp(GameSave * save);
|
||||||
void SetClipboard(GameSave * save);
|
void SetClipboard(GameSave * save);
|
||||||
void SetPlaceSave(GameSave * save);
|
void SetPlaceSave(GameSave * save);
|
||||||
void Log(string message);
|
void Log(string message);
|
||||||
|
@ -171,6 +171,8 @@ GameView::GameView():
|
|||||||
infoTip(""),
|
infoTip(""),
|
||||||
infoTipPresence(0),
|
infoTipPresence(0),
|
||||||
buttonTipShow(0),
|
buttonTipShow(0),
|
||||||
|
isToolTipFadingIn(false),
|
||||||
|
isButtonTipFadingIn(false),
|
||||||
toolTipPosition(-1, -1),
|
toolTipPosition(-1, -1),
|
||||||
shiftBehaviour(false),
|
shiftBehaviour(false),
|
||||||
ctrlBehaviour(false),
|
ctrlBehaviour(false),
|
||||||
@ -187,7 +189,7 @@ GameView::GameView():
|
|||||||
toolTipPresence(0),
|
toolTipPresence(0),
|
||||||
currentSaveType(0),
|
currentSaveType(0),
|
||||||
lastLogEntry(0.0f),
|
lastLogEntry(0.0f),
|
||||||
lastMenu(NULL)
|
lastMenu(-1)
|
||||||
{
|
{
|
||||||
|
|
||||||
int currentX = 1;
|
int currentX = 1;
|
||||||
@ -457,13 +459,13 @@ class GameView::MenuAction: public ui::ButtonAction
|
|||||||
{
|
{
|
||||||
GameView * v;
|
GameView * v;
|
||||||
public:
|
public:
|
||||||
Menu * menu;
|
int menuID;
|
||||||
bool needsClick;
|
bool needsClick;
|
||||||
MenuAction(GameView * _v, Menu * menu_)
|
MenuAction(GameView * _v, int menuID_)
|
||||||
{
|
{
|
||||||
v = _v;
|
v = _v;
|
||||||
menu = menu_;
|
menuID = menuID_;
|
||||||
if (v->c->GetMenuList()[SC_DECO] == menu)
|
if (menuID == SC_DECO)
|
||||||
needsClick = true;
|
needsClick = true;
|
||||||
else
|
else
|
||||||
needsClick = false;
|
needsClick = false;
|
||||||
@ -471,12 +473,12 @@ public:
|
|||||||
void MouseEnterCallback(ui::Button * sender)
|
void MouseEnterCallback(ui::Button * sender)
|
||||||
{
|
{
|
||||||
if(!needsClick && !ui::Engine::Ref().GetMouseButton())
|
if(!needsClick && !ui::Engine::Ref().GetMouseButton())
|
||||||
v->c->SetActiveMenu(menu);
|
v->c->SetActiveMenu(menuID);
|
||||||
}
|
}
|
||||||
void ActionCallback(ui::Button * sender)
|
void ActionCallback(ui::Button * sender)
|
||||||
{
|
{
|
||||||
if (needsClick)
|
if (needsClick)
|
||||||
v->c->SetActiveMenu(menu);
|
v->c->SetActiveMenu(menuID);
|
||||||
else
|
else
|
||||||
MouseEnterCallback(sender);
|
MouseEnterCallback(sender);
|
||||||
}
|
}
|
||||||
@ -564,15 +566,14 @@ void GameView::NotifyMenuListChanged(GameModel * sender)
|
|||||||
}
|
}
|
||||||
toolButtons.clear();
|
toolButtons.clear();
|
||||||
vector<Menu*> menuList = sender->GetMenuList();
|
vector<Menu*> menuList = sender->GetMenuList();
|
||||||
for(vector<Menu*>::reverse_iterator iter = menuList.rbegin(), end = menuList.rend(); iter != end; ++iter)
|
for (int i = menuList.size()-1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
std::string tempString = "";
|
std::string tempString = "";
|
||||||
Menu * item = *iter;
|
tempString += menuList[i]->GetIcon();
|
||||||
tempString += item->GetIcon();
|
ui::Button * tempButton = new ui::Button(ui::Point(XRES+BARSIZE-16, currentY), ui::Point(15, 15), tempString, menuList[i]->GetDescription());
|
||||||
ui::Button * tempButton = new ui::Button(ui::Point(XRES+BARSIZE-16, currentY), ui::Point(15, 15), tempString, item->GetDescription());
|
|
||||||
tempButton->Appearance.Margin = ui::Border(0, 2, 3, 2);
|
tempButton->Appearance.Margin = ui::Border(0, 2, 3, 2);
|
||||||
tempButton->SetTogglable(true);
|
tempButton->SetTogglable(true);
|
||||||
tempButton->SetActionCallback(new MenuAction(this, item));
|
tempButton->SetActionCallback(new MenuAction(this, i));
|
||||||
currentY-=16;
|
currentY-=16;
|
||||||
AddComponent(tempButton);
|
AddComponent(tempButton);
|
||||||
menuButtons.push_back(tempButton);
|
menuButtons.push_back(tempButton);
|
||||||
@ -589,6 +590,11 @@ void GameView::SetHudEnable(bool hudState)
|
|||||||
showHud = hudState;
|
showHud = hudState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool GameView::GetHudEnable()
|
||||||
|
{
|
||||||
|
return showHud;
|
||||||
|
}
|
||||||
|
|
||||||
ui::Point GameView::GetMousePosition()
|
ui::Point GameView::GetMousePosition()
|
||||||
{
|
{
|
||||||
return mousePosition;
|
return mousePosition;
|
||||||
@ -641,7 +647,7 @@ void GameView::NotifyToolListChanged(GameModel * sender)
|
|||||||
int totalColour;
|
int totalColour;
|
||||||
for(int i = 0; i < menuButtons.size(); i++)
|
for(int i = 0; i < menuButtons.size(); i++)
|
||||||
{
|
{
|
||||||
if(((MenuAction*)menuButtons[i]->GetActionCallback())->menu==sender->GetActiveMenu())
|
if(((MenuAction*)menuButtons[i]->GetActionCallback())->menuID==sender->GetActiveMenu())
|
||||||
{
|
{
|
||||||
menuButtons[i]->SetToggleState(true);
|
menuButtons[i]->SetToggleState(true);
|
||||||
}
|
}
|
||||||
@ -696,7 +702,7 @@ void GameView::NotifyToolListChanged(GameModel * sender)
|
|||||||
AddComponent(tempButton);
|
AddComponent(tempButton);
|
||||||
toolButtons.push_back(tempButton);
|
toolButtons.push_back(tempButton);
|
||||||
}
|
}
|
||||||
if (sender->GetActiveMenu() != sender->GetMenuList()[SC_DECO])
|
if (sender->GetActiveMenu() != SC_DECO)
|
||||||
lastMenu = sender->GetActiveMenu();
|
lastMenu = sender->GetActiveMenu();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -926,7 +932,7 @@ void GameView::NotifySaveChanged(GameModel * sender)
|
|||||||
upVoteButton->Appearance.BackgroundDisabled = (ui::Colour(0, 0, 0));
|
upVoteButton->Appearance.BackgroundDisabled = (ui::Colour(0, 0, 0));
|
||||||
upVoteButton->Appearance.BorderDisabled = ui::Colour(100, 100, 100),
|
upVoteButton->Appearance.BorderDisabled = ui::Colour(100, 100, 100),
|
||||||
downVoteButton->Enabled = false;
|
downVoteButton->Enabled = false;
|
||||||
upVoteButton->Appearance.BackgroundDisabled = (ui::Colour(0, 0, 0));
|
downVoteButton->Appearance.BackgroundDisabled = (ui::Colour(0, 0, 0));
|
||||||
downVoteButton->Appearance.BorderDisabled = ui::Colour(100, 100, 100),
|
downVoteButton->Appearance.BorderDisabled = ui::Colour(100, 100, 100),
|
||||||
tagSimulationButton->Enabled = false;
|
tagSimulationButton->Enabled = false;
|
||||||
tagSimulationButton->SetText("[no tags set]");
|
tagSimulationButton->SetText("[no tags set]");
|
||||||
@ -1154,8 +1160,7 @@ void GameView::ToolTip(ui::Component * sender, ui::Point mousePosition, std::str
|
|||||||
if (selectMode == PlaceSave || selectMode == SelectNone)
|
if (selectMode == PlaceSave || selectMode == SelectNone)
|
||||||
{
|
{
|
||||||
buttonTip = toolTip;
|
buttonTip = toolTip;
|
||||||
if (buttonTipShow < 120)
|
isButtonTipFadingIn = true;
|
||||||
buttonTipShow += 3;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(sender->Position.X > Size.X-BARSIZE)// < Size.Y-(quickOptionButtons.size()+1)*16)
|
else if(sender->Position.X > Size.X-BARSIZE)// < Size.Y-(quickOptionButtons.size()+1)*16)
|
||||||
@ -1164,15 +1169,13 @@ void GameView::ToolTip(ui::Component * sender, ui::Point mousePosition, std::str
|
|||||||
toolTipPosition = ui::Point(Size.X-27-Graphics::textwidth((char*)toolTip.c_str()), sender->Position.Y+3);
|
toolTipPosition = ui::Point(Size.X-27-Graphics::textwidth((char*)toolTip.c_str()), sender->Position.Y+3);
|
||||||
if(toolTipPosition.Y+10 > Size.Y-MENUSIZE)
|
if(toolTipPosition.Y+10 > Size.Y-MENUSIZE)
|
||||||
toolTipPosition = ui::Point(Size.X-27-Graphics::textwidth((char*)toolTip.c_str()), Size.Y-MENUSIZE-10);
|
toolTipPosition = ui::Point(Size.X-27-Graphics::textwidth((char*)toolTip.c_str()), Size.Y-MENUSIZE-10);
|
||||||
if (toolTipPresence < 120)
|
isToolTipFadingIn = true;
|
||||||
toolTipPresence += 3;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this->toolTip = toolTip;
|
this->toolTip = toolTip;
|
||||||
toolTipPosition = ui::Point(Size.X-27-Graphics::textwidth((char*)toolTip.c_str()), Size.Y-MENUSIZE-10);
|
toolTipPosition = ui::Point(Size.X-27-Graphics::textwidth((char*)toolTip.c_str()), Size.Y-MENUSIZE-10);
|
||||||
if (toolTipPresence < 160)
|
isToolTipFadingIn = true;
|
||||||
toolTipPresence += 3;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1365,7 +1368,7 @@ void GameView::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bool
|
|||||||
{
|
{
|
||||||
c->SetDecoration(true);
|
c->SetDecoration(true);
|
||||||
c->SetPaused(true);
|
c->SetPaused(true);
|
||||||
c->SetActiveMenu(c->GetMenuList()[SC_DECO]);
|
c->SetActiveMenu(SC_DECO);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'y':
|
case 'y':
|
||||||
@ -1526,15 +1529,33 @@ void GameView::OnTick(float dt)
|
|||||||
if(infoTipPresence<0)
|
if(infoTipPresence<0)
|
||||||
infoTipPresence = 0;
|
infoTipPresence = 0;
|
||||||
}
|
}
|
||||||
if (selectMode != PlaceSave && selectMode != SelectNone && buttonTipShow < 120)
|
if (isButtonTipFadingIn || (selectMode != PlaceSave && selectMode != SelectNone))
|
||||||
buttonTipShow += 2;
|
{
|
||||||
|
isButtonTipFadingIn = false;
|
||||||
|
if(buttonTipShow < 120)
|
||||||
|
{
|
||||||
|
buttonTipShow += int(dt*2)>0?int(dt*2):1;
|
||||||
|
if(buttonTipShow>120)
|
||||||
|
buttonTipShow = 120;
|
||||||
|
}
|
||||||
|
}
|
||||||
else if(buttonTipShow>0)
|
else if(buttonTipShow>0)
|
||||||
{
|
{
|
||||||
buttonTipShow -= int(dt)>0?int(dt):1;
|
buttonTipShow -= int(dt)>0?int(dt):1;
|
||||||
if(buttonTipShow<0)
|
if(buttonTipShow<0)
|
||||||
buttonTipShow = 0;
|
buttonTipShow = 0;
|
||||||
}
|
}
|
||||||
if(toolTipPresence>0)
|
if (isToolTipFadingIn)
|
||||||
|
{
|
||||||
|
isToolTipFadingIn = false;
|
||||||
|
if(toolTipPresence < 120)
|
||||||
|
{
|
||||||
|
toolTipPresence += int(dt*2)>0?int(dt*2):1;
|
||||||
|
if(toolTipPresence>120)
|
||||||
|
toolTipPresence = 120;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(toolTipPresence>0)
|
||||||
{
|
{
|
||||||
toolTipPresence -= int(dt)>0?int(dt):1;
|
toolTipPresence -= int(dt)>0?int(dt):1;
|
||||||
if(toolTipPresence<0)
|
if(toolTipPresence<0)
|
||||||
|
@ -51,18 +51,20 @@ private:
|
|||||||
bool showDebug;
|
bool showDebug;
|
||||||
bool wallBrush;
|
bool wallBrush;
|
||||||
int introText;
|
int introText;
|
||||||
int buttonTipShow;
|
|
||||||
std::string buttonTip;
|
|
||||||
std::string introTextMessage;
|
std::string introTextMessage;
|
||||||
int toolIndex;
|
int toolIndex;
|
||||||
int currentSaveType;
|
int currentSaveType;
|
||||||
Menu * lastMenu;
|
int lastMenu;
|
||||||
|
|
||||||
int infoTipPresence;
|
|
||||||
std::string toolTip;
|
|
||||||
ui::Point toolTipPosition;
|
|
||||||
std::string infoTip;
|
|
||||||
int toolTipPresence;
|
int toolTipPresence;
|
||||||
|
std::string toolTip;
|
||||||
|
bool isToolTipFadingIn;
|
||||||
|
ui::Point toolTipPosition;
|
||||||
|
int infoTipPresence;
|
||||||
|
std::string infoTip;
|
||||||
|
int buttonTipShow;
|
||||||
|
std::string buttonTip;
|
||||||
|
bool isButtonTipFadingIn;
|
||||||
|
|
||||||
queue<ui::Point> pointQueue;
|
queue<ui::Point> pointQueue;
|
||||||
GameController * c;
|
GameController * c;
|
||||||
@ -128,6 +130,7 @@ public:
|
|||||||
ui::Point GetMousePosition();
|
ui::Point GetMousePosition();
|
||||||
void SetSample(SimulationSample sample);
|
void SetSample(SimulationSample sample);
|
||||||
void SetHudEnable(bool hudState);
|
void SetHudEnable(bool hudState);
|
||||||
|
bool GetHudEnable();
|
||||||
bool CtrlBehaviour(){ return ctrlBehaviour; }
|
bool CtrlBehaviour(){ return ctrlBehaviour; }
|
||||||
bool ShiftBehaviour(){ return shiftBehaviour; }
|
bool ShiftBehaviour(){ return shiftBehaviour; }
|
||||||
void ExitPrompt();
|
void ExitPrompt();
|
||||||
|
@ -139,6 +139,11 @@ void PropertyWindow::SetProperty()
|
|||||||
buffer.exceptions(std::stringstream::failbit | std::stringstream::badbit);
|
buffer.exceptions(std::stringstream::failbit | std::stringstream::badbit);
|
||||||
buffer >> tempInt;
|
buffer >> tempInt;
|
||||||
}
|
}
|
||||||
|
if (property->GetOption().first == "type" && (tempInt < 0 || tempInt >= PT_NUM || !sim->elements[tempInt].Enabled))
|
||||||
|
{
|
||||||
|
new ErrorMessage("Could not set property", "Invalid Particle Type");
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -193,6 +198,7 @@ void PropertyWindow::SetProperty()
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
new ErrorMessage("Could not set property", "Invalid property");
|
new ErrorMessage("Could not set property", "Invalid property");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
sim->flood_prop(
|
sim->flood_prop(
|
||||||
position.X,
|
position.X,
|
||||||
|
@ -45,7 +45,7 @@ void Tool::DrawLine(Simulation * sim, Brush * brush, ui::Point position1, ui::Po
|
|||||||
sim->ToolLine(position1.X, position1.Y, position2.X, position2.Y, toolID, brush, strength);
|
sim->ToolLine(position1.X, position1.Y, position2.X, position2.Y, toolID, brush, strength);
|
||||||
}
|
}
|
||||||
void Tool::DrawRect(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) {
|
void Tool::DrawRect(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) {
|
||||||
sim->ToolBox(position1.X, position1.Y, position2.X, position2.Y, toolID, brush, strength);
|
sim->ToolBox(position1.X, position1.Y, position2.X, position2.Y, toolID, strength);
|
||||||
}
|
}
|
||||||
void Tool::DrawFill(Simulation * sim, Brush * brush, ui::Point position) {};
|
void Tool::DrawFill(Simulation * sim, Brush * brush, ui::Point position) {};
|
||||||
|
|
||||||
@ -110,26 +110,6 @@ void WallTool::DrawFill(Simulation * sim, Brush * brush, ui::Point position) {
|
|||||||
sim->FloodWalls(position.X, position.Y, toolID, -1, -1, 0);
|
sim->FloodWalls(position.X, position.Y, toolID, -1, -1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
GolTool::GolTool(int id, string name, string description, int r, int g, int b, std::string identifier, VideoBuffer * (*textureGen)(int, int, int)):
|
|
||||||
Tool(id, name, description, r, g, b, identifier, textureGen)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
GolTool::~GolTool() {}
|
|
||||||
void GolTool::Draw(Simulation * sim, Brush * brush, ui::Point position){
|
|
||||||
sim->CreateParts(position.X, position.Y, PT_LIFE|(toolID<<8), brush);
|
|
||||||
}
|
|
||||||
void GolTool::DrawLine(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2, bool dragging) {
|
|
||||||
sim->CreateLine(position1.X, position1.Y, position2.X, position2.Y, PT_LIFE|(toolID<<8), brush);
|
|
||||||
}
|
|
||||||
void GolTool::DrawRect(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2) {
|
|
||||||
sim->CreateBox(position1.X, position1.Y, position2.X, position2.Y, PT_LIFE|(toolID<<8), 0);
|
|
||||||
}
|
|
||||||
void GolTool::DrawFill(Simulation * sim, Brush * brush, ui::Point position) {
|
|
||||||
sim->FloodParts(position.X, position.Y, PT_LIFE|(toolID<<8), -1, -1, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
WindTool::WindTool(int id, string name, string description, int r, int g, int b, std::string identifier, VideoBuffer * (*textureGen)(int, int, int)):
|
WindTool::WindTool(int id, string name, string description, int r, int g, int b, std::string identifier, VideoBuffer * (*textureGen)(int, int, int)):
|
||||||
Tool(id, name, description, r, g, b, identifier, textureGen)
|
Tool(id, name, description, r, g, b, identifier, textureGen)
|
||||||
{
|
{
|
||||||
|
@ -158,17 +158,6 @@ public:
|
|||||||
virtual void DrawFill(Simulation * sim, Brush * brush, ui::Point position);
|
virtual void DrawFill(Simulation * sim, Brush * brush, ui::Point position);
|
||||||
};
|
};
|
||||||
|
|
||||||
class GolTool: public Tool
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
GolTool(int id, string name, string description, int r, int g, int b, std::string identifier, VideoBuffer * (*textureGen)(int, int, int) = NULL);
|
|
||||||
virtual ~GolTool();
|
|
||||||
virtual void Draw(Simulation * sim, Brush * brush, ui::Point position);
|
|
||||||
virtual void DrawLine(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2, bool dragging = false);
|
|
||||||
virtual void DrawRect(Simulation * sim, Brush * brush, ui::Point position1, ui::Point position2);
|
|
||||||
virtual void DrawFill(Simulation * sim, Brush * brush, ui::Point position);
|
|
||||||
};
|
|
||||||
|
|
||||||
class WindTool: public Tool
|
class WindTool: public Tool
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -153,6 +153,10 @@ void Button::OnMouseUnclick(int x, int y, unsigned int button)
|
|||||||
{
|
{
|
||||||
if(isButtonDown)
|
if(isButtonDown)
|
||||||
{
|
{
|
||||||
|
if(isTogglable)
|
||||||
|
{
|
||||||
|
toggle = !toggle;
|
||||||
|
}
|
||||||
isButtonDown = false;
|
isButtonDown = false;
|
||||||
DoAction();
|
DoAction();
|
||||||
}
|
}
|
||||||
@ -173,10 +177,6 @@ void Button::OnMouseClick(int x, int y, unsigned int button)
|
|||||||
return;
|
return;
|
||||||
if(button == 1)
|
if(button == 1)
|
||||||
{
|
{
|
||||||
if(isTogglable)
|
|
||||||
{
|
|
||||||
toggle = !toggle;
|
|
||||||
}
|
|
||||||
isButtonDown = true;
|
isButtonDown = true;
|
||||||
}
|
}
|
||||||
else if(button == 3)
|
else if(button == 3)
|
||||||
|
@ -247,7 +247,7 @@ void Engine::SetFps(float fps)
|
|||||||
{
|
{
|
||||||
this->fps = fps;
|
this->fps = fps;
|
||||||
if(FpsLimit > 2.0f)
|
if(FpsLimit > 2.0f)
|
||||||
this->dt = FpsLimit/fps;
|
this->dt = 60/fps;
|
||||||
else
|
else
|
||||||
this->dt = 1.0f;
|
this->dt = 1.0f;
|
||||||
}
|
}
|
||||||
|
@ -80,6 +80,7 @@ RenderView::RenderView():
|
|||||||
ui::Window(ui::Point(0, 0), ui::Point(XRES, YRES+MENUSIZE)),
|
ui::Window(ui::Point(0, 0), ui::Point(XRES, YRES+MENUSIZE)),
|
||||||
toolTip(""),
|
toolTip(""),
|
||||||
toolTipPresence(0),
|
toolTipPresence(0),
|
||||||
|
isToolTipFadingIn(false),
|
||||||
ren(NULL)
|
ren(NULL)
|
||||||
{
|
{
|
||||||
ui::Button * presetButton;
|
ui::Button * presetButton;
|
||||||
@ -373,6 +374,16 @@ void RenderView::OnDraw()
|
|||||||
|
|
||||||
void RenderView::OnTick(float dt)
|
void RenderView::OnTick(float dt)
|
||||||
{
|
{
|
||||||
|
if (isToolTipFadingIn)
|
||||||
|
{
|
||||||
|
isToolTipFadingIn = false;
|
||||||
|
if(toolTipPresence < 120)
|
||||||
|
{
|
||||||
|
toolTipPresence += int(dt*2)>0?int(dt*2):1;
|
||||||
|
if(toolTipPresence > 120)
|
||||||
|
toolTipPresence = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
if(toolTipPresence>0)
|
if(toolTipPresence>0)
|
||||||
{
|
{
|
||||||
toolTipPresence -= int(dt)>0?int(dt):1;
|
toolTipPresence -= int(dt)>0?int(dt):1;
|
||||||
@ -394,8 +405,7 @@ void RenderView::OnKeyPress(int key, Uint16 character, bool shift, bool ctrl, bo
|
|||||||
void RenderView::ToolTip(ui::Component * sender, ui::Point mousePosition, std::string toolTip)
|
void RenderView::ToolTip(ui::Component * sender, ui::Point mousePosition, std::string toolTip)
|
||||||
{
|
{
|
||||||
this->toolTip = toolTip;
|
this->toolTip = toolTip;
|
||||||
if (toolTipPresence < 120)
|
this->isToolTipFadingIn = true;
|
||||||
toolTipPresence += 3;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RenderView::~RenderView() {
|
RenderView::~RenderView() {
|
||||||
|
@ -20,6 +20,7 @@ class RenderView: public ui::Window {
|
|||||||
std::vector<ui::Checkbox*> colourModes;
|
std::vector<ui::Checkbox*> colourModes;
|
||||||
std::string toolTip;
|
std::string toolTip;
|
||||||
int toolTipPresence;
|
int toolTipPresence;
|
||||||
|
bool isToolTipFadingIn;
|
||||||
int line1, line2, line3, line4;
|
int line1, line2, line3, line4;
|
||||||
public:
|
public:
|
||||||
class RenderModeAction;
|
class RenderModeAction;
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
#define RENDER_GLOW OPTIONS | PSPEC_STICKMAN | /*PMODE_FLAT |*/ PMODE_GLOW | PMODE_ADD | PMODE_BLEND
|
#define RENDER_GLOW OPTIONS | PSPEC_STICKMAN | /*PMODE_FLAT |*/ PMODE_GLOW | PMODE_ADD | PMODE_BLEND
|
||||||
#define RENDER_BLUR OPTIONS | PSPEC_STICKMAN | /*PMODE_FLAT |*/ PMODE_BLUR | PMODE_ADD | PMODE_BLEND
|
#define RENDER_BLUR OPTIONS | PSPEC_STICKMAN | /*PMODE_FLAT |*/ PMODE_BLUR | PMODE_ADD | PMODE_BLEND
|
||||||
#define RENDER_BLOB OPTIONS | PSPEC_STICKMAN | /*PMODE_FLAT |*/ PMODE_BLOB | PMODE_ADD | PMODE_BLEND
|
#define RENDER_BLOB OPTIONS | PSPEC_STICKMAN | /*PMODE_FLAT |*/ PMODE_BLOB | PMODE_ADD | PMODE_BLEND
|
||||||
#define RENDER_BASC OPTIONS | PSPEC_STICKMAN | PMODE_FLAT | PMODE_ADD | PMODE_BLEND
|
#define RENDER_BASC OPTIONS | PSPEC_STICKMAN | PMODE_FLAT | PMODE_ADD | PMODE_BLEND | EFFECT_LINES
|
||||||
#define RENDER_NONE OPTIONS | PSPEC_STICKMAN | PMODE_FLAT
|
#define RENDER_NONE OPTIONS | PSPEC_STICKMAN | PMODE_FLAT
|
||||||
|
|
||||||
#define COLOUR_HEAT 0x00000001
|
#define COLOUR_HEAT 0x00000001
|
||||||
|
@ -48,41 +48,6 @@
|
|||||||
|
|
||||||
#define BOUNDS_CHECK true
|
#define BOUNDS_CHECK true
|
||||||
|
|
||||||
#define SPC_AIR 236
|
|
||||||
#define SPC_HEAT 237
|
|
||||||
#define SPC_COOL 238
|
|
||||||
#define SPC_VACUUM 239
|
|
||||||
#define SPC_WIND 241
|
|
||||||
#define SPC_PGRV 243
|
|
||||||
#define SPC_NGRV 244
|
|
||||||
#define SPC_PROP 246
|
|
||||||
|
|
||||||
|
|
||||||
#define NGT_GOL 0
|
|
||||||
#define NGT_HLIF 1
|
|
||||||
#define NGT_ASIM 2
|
|
||||||
#define NGT_2x2 3
|
|
||||||
#define NGT_DANI 4
|
|
||||||
#define NGT_AMOE 5
|
|
||||||
#define NGT_MOVE 6
|
|
||||||
#define NGT_PGOL 7
|
|
||||||
#define NGT_DMOE 8
|
|
||||||
#define NGT_34 9
|
|
||||||
#define NGT_LLIF 10
|
|
||||||
#define NGT_STAN 11
|
|
||||||
#define NGT_SEED 12
|
|
||||||
#define NGT_MAZE 13
|
|
||||||
#define NGT_COAG 14
|
|
||||||
#define NGT_WALL 15
|
|
||||||
#define NGT_GNAR 16
|
|
||||||
#define NGT_REPL 17
|
|
||||||
#define NGT_MYST 18
|
|
||||||
#define NGT_LOTE 19
|
|
||||||
#define NGT_FRG2 20
|
|
||||||
#define NGT_STAR 21
|
|
||||||
#define NGT_FROG 22
|
|
||||||
#define NGT_BRAN 23
|
|
||||||
|
|
||||||
#define OLD_PT_WIND 147
|
#define OLD_PT_WIND 147
|
||||||
|
|
||||||
//#define PT_NUM 161
|
//#define PT_NUM 161
|
||||||
|
@ -17,15 +17,17 @@
|
|||||||
//#include "graphics/Renderer.h"
|
//#include "graphics/Renderer.h"
|
||||||
//#include "graphics/Graphics.h"
|
//#include "graphics/Graphics.h"
|
||||||
#include "Misc.h"
|
#include "Misc.h"
|
||||||
#include "Tools.h"
|
#include "ToolClasses.h"
|
||||||
#include "gui/game/Brush.h"
|
#include "gui/game/Brush.h"
|
||||||
#include "client/GameSave.h"
|
#include "client/GameSave.h"
|
||||||
#include "Sample.h"
|
#include "Sample.h"
|
||||||
#include "Snapshot.h"
|
#include "Snapshot.h"
|
||||||
//#include "StorageClasses.h"
|
//#include "StorageClasses.h"
|
||||||
|
|
||||||
|
#ifdef LUACONSOLE
|
||||||
#include "cat/LuaScriptInterface.h"
|
#include "cat/LuaScriptInterface.h"
|
||||||
#include "cat/LuaScriptHelper.h"
|
#include "cat/LuaScriptHelper.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
int Simulation::Load(GameSave * save)
|
int Simulation::Load(GameSave * save)
|
||||||
{
|
{
|
||||||
@ -373,8 +375,6 @@ void Simulation::clear_area(int area_x, int area_y, int area_w, int area_h)
|
|||||||
void Simulation::CreateBox(int x1, int y1, int x2, int y2, int c, int flags)
|
void Simulation::CreateBox(int x1, int y1, int x2, int y2, int c, int flags)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
if (c==SPC_PROP)
|
|
||||||
return;
|
|
||||||
if (x1>x2)
|
if (x1>x2)
|
||||||
{
|
{
|
||||||
i = x2;
|
i = x2;
|
||||||
@ -675,8 +675,6 @@ int Simulation::FloodParts(int x, int y, int fullc, int cm, int bm, int flags)
|
|||||||
int coord_stack_size = 0;
|
int coord_stack_size = 0;
|
||||||
int created_something = 0;
|
int created_something = 0;
|
||||||
|
|
||||||
if (c==SPC_PROP)
|
|
||||||
return 0;
|
|
||||||
if (cm==-1)
|
if (cm==-1)
|
||||||
{
|
{
|
||||||
if (c==0)
|
if (c==0)
|
||||||
@ -884,19 +882,6 @@ int Simulation::flood_water(int x, int y, int i, int originaly, int check)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
//wrapper around create_part to create TESC with correct tmp value
|
|
||||||
int Simulation::create_part_add_props(int p, int x, int y, int tv, int rx, int ry)
|
|
||||||
{
|
|
||||||
p=create_part(p, x, y, tv);
|
|
||||||
if (tv==PT_TESC)
|
|
||||||
{
|
|
||||||
parts[p].tmp=rx*4+ry*4+7;
|
|
||||||
if (parts[p].tmp>300)
|
|
||||||
parts[p].tmp=300;
|
|
||||||
}
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Simulation::SetEdgeMode(int newEdgeMode)
|
void Simulation::SetEdgeMode(int newEdgeMode)
|
||||||
{
|
{
|
||||||
edgeMode = newEdgeMode;
|
edgeMode = newEdgeMode;
|
||||||
@ -1048,15 +1033,9 @@ void Simulation::ApplyDecorationPoint(int positionX, int positionY, int colR, in
|
|||||||
|
|
||||||
if(cBrush)
|
if(cBrush)
|
||||||
{
|
{
|
||||||
int radiusX, radiusY, sizeX, sizeY;
|
int radiusX = cBrush->GetRadius().X, radiusY = cBrush->GetRadius().Y, sizeX = cBrush->GetSize().X, sizeY = cBrush->GetSize().Y;
|
||||||
|
|
||||||
radiusX = cBrush->GetRadius().X;
|
|
||||||
radiusY = cBrush->GetRadius().Y;
|
|
||||||
|
|
||||||
sizeX = cBrush->GetSize().X;
|
|
||||||
sizeY = cBrush->GetSize().Y;
|
|
||||||
|
|
||||||
unsigned char *bitmap = cBrush->GetBitmap();
|
unsigned char *bitmap = cBrush->GetBitmap();
|
||||||
|
|
||||||
for(int y = 0; y < sizeY; y++)
|
for(int y = 0; y < sizeY; y++)
|
||||||
{
|
{
|
||||||
for(int x = 0; x < sizeX; x++)
|
for(int x = 0; x < sizeX; x++)
|
||||||
@ -1093,7 +1072,8 @@ void Simulation::ApplyDecorationBox(int x1, int y1, int x2, int y2, int colR, in
|
|||||||
|
|
||||||
void Simulation::ApplyDecorationLine(int x1, int y1, int x2, int y2, int colR, int colG, int colB, int colA, int mode, Brush * cBrush)
|
void Simulation::ApplyDecorationLine(int x1, int y1, int x2, int y2, int colR, int colG, int colB, int colA, int mode, Brush * cBrush)
|
||||||
{
|
{
|
||||||
int cp=abs(y2-y1)>abs(x2-x1), x, y, dx, dy, sy, rx, ry;
|
bool reverseXY = abs(y2-y1) > abs(x2-x1);
|
||||||
|
int x, y, dx, dy, sy, rx, ry;
|
||||||
float e, de;
|
float e, de;
|
||||||
|
|
||||||
if(cBrush)
|
if(cBrush)
|
||||||
@ -1102,7 +1082,7 @@ void Simulation::ApplyDecorationLine(int x1, int y1, int x2, int y2, int colR, i
|
|||||||
ry = cBrush->GetRadius().Y;
|
ry = cBrush->GetRadius().Y;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cp)
|
if (reverseXY)
|
||||||
{
|
{
|
||||||
y = x1;
|
y = x1;
|
||||||
x1 = y1;
|
x1 = y1;
|
||||||
@ -1131,7 +1111,7 @@ void Simulation::ApplyDecorationLine(int x1, int y1, int x2, int y2, int colR, i
|
|||||||
sy = (y1<y2) ? 1 : -1;
|
sy = (y1<y2) ? 1 : -1;
|
||||||
for (x=x1; x<=x2; x++)
|
for (x=x1; x<=x2; x++)
|
||||||
{
|
{
|
||||||
if (cp)
|
if (reverseXY)
|
||||||
ApplyDecorationPoint(y, x, colR, colG, colB, colA, mode, cBrush);
|
ApplyDecorationPoint(y, x, colR, colG, colB, colA, mode, cBrush);
|
||||||
else
|
else
|
||||||
ApplyDecorationPoint(x, y, colR, colG, colB, colA, mode, cBrush);
|
ApplyDecorationPoint(x, y, colR, colG, colB, colA, mode, cBrush);
|
||||||
@ -1141,7 +1121,7 @@ void Simulation::ApplyDecorationLine(int x1, int y1, int x2, int y2, int colR, i
|
|||||||
y += sy;
|
y += sy;
|
||||||
if (!(rx+ry))
|
if (!(rx+ry))
|
||||||
{
|
{
|
||||||
if (cp)
|
if (reverseXY)
|
||||||
ApplyDecorationPoint(y, x, colR, colG, colB, colA, mode, cBrush);
|
ApplyDecorationPoint(y, x, colR, colG, colB, colA, mode, cBrush);
|
||||||
else
|
else
|
||||||
ApplyDecorationPoint(x, y, colR, colG, colB, colA, mode, cBrush);
|
ApplyDecorationPoint(x, y, colR, colG, colB, colA, mode, cBrush);
|
||||||
@ -1170,13 +1150,7 @@ int Simulation::ToolBrush(int positionX, int positionY, int tool, Brush * cBrush
|
|||||||
{
|
{
|
||||||
if(cBrush)
|
if(cBrush)
|
||||||
{
|
{
|
||||||
int radiusX, radiusY, sizeX, sizeY;
|
int radiusX = cBrush->GetRadius().X, radiusY = cBrush->GetRadius().Y, sizeX = cBrush->GetSize().X, sizeY = cBrush->GetSize().Y;
|
||||||
|
|
||||||
radiusX = cBrush->GetRadius().X;
|
|
||||||
radiusY = cBrush->GetRadius().Y;
|
|
||||||
|
|
||||||
sizeX = cBrush->GetSize().X;
|
|
||||||
sizeY = cBrush->GetSize().Y;
|
|
||||||
unsigned char *bitmap = cBrush->GetBitmap();
|
unsigned char *bitmap = cBrush->GetBitmap();
|
||||||
for(int y = 0; y < sizeY; y++)
|
for(int y = 0; y < sizeY; y++)
|
||||||
for(int x = 0; x < sizeX; x++)
|
for(int x = 0; x < sizeX; x++)
|
||||||
@ -1188,11 +1162,10 @@ int Simulation::ToolBrush(int positionX, int positionY, int tool, Brush * cBrush
|
|||||||
|
|
||||||
void Simulation::ToolLine(int x1, int y1, int x2, int y2, int tool, Brush * cBrush, float strength)
|
void Simulation::ToolLine(int x1, int y1, int x2, int y2, int tool, Brush * cBrush, float strength)
|
||||||
{
|
{
|
||||||
int cp=abs(y2-y1)>abs(x2-x1), x, y, dx, dy, sy, rx, ry;
|
bool reverseXY = abs(y2-y1) > abs(x2-x1);
|
||||||
|
int x, y, dx, dy, sy, rx = cBrush->GetRadius().X, ry = cBrush->GetRadius().Y;
|
||||||
float e, de;
|
float e, de;
|
||||||
rx = cBrush->GetRadius().X;
|
if (reverseXY)
|
||||||
ry = cBrush->GetRadius().Y;
|
|
||||||
if (cp)
|
|
||||||
{
|
{
|
||||||
y = x1;
|
y = x1;
|
||||||
x1 = y1;
|
x1 = y1;
|
||||||
@ -1221,7 +1194,7 @@ void Simulation::ToolLine(int x1, int y1, int x2, int y2, int tool, Brush * cBru
|
|||||||
sy = (y1<y2) ? 1 : -1;
|
sy = (y1<y2) ? 1 : -1;
|
||||||
for (x=x1; x<=x2; x++)
|
for (x=x1; x<=x2; x++)
|
||||||
{
|
{
|
||||||
if (cp)
|
if (reverseXY)
|
||||||
ToolBrush(y, x, tool, cBrush, strength);
|
ToolBrush(y, x, tool, cBrush, strength);
|
||||||
else
|
else
|
||||||
ToolBrush(x, y, tool, cBrush, strength);
|
ToolBrush(x, y, tool, cBrush, strength);
|
||||||
@ -1229,9 +1202,9 @@ void Simulation::ToolLine(int x1, int y1, int x2, int y2, int tool, Brush * cBru
|
|||||||
if (e >= 0.5f)
|
if (e >= 0.5f)
|
||||||
{
|
{
|
||||||
y += sy;
|
y += sy;
|
||||||
if ((!(rx+ry)) && ((y1<y2) ? (y<=y2) : (y>=y2)))
|
if (!(rx+ry) && ((y1<y2) ? (y<=y2) : (y>=y2)))
|
||||||
{
|
{
|
||||||
if (cp)
|
if (reverseXY)
|
||||||
ToolBrush(y, x, tool, cBrush, strength);
|
ToolBrush(y, x, tool, cBrush, strength);
|
||||||
else
|
else
|
||||||
ToolBrush(x, y, tool, cBrush, strength);
|
ToolBrush(x, y, tool, cBrush, strength);
|
||||||
@ -1240,7 +1213,7 @@ void Simulation::ToolLine(int x1, int y1, int x2, int y2, int tool, Brush * cBru
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
void Simulation::ToolBox(int x1, int y1, int x2, int y2, int tool, Brush * cBrush, float strength)
|
void Simulation::ToolBox(int x1, int y1, int x2, int y2, int tool, float strength)
|
||||||
{
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
if (x1>x2)
|
if (x1>x2)
|
||||||
@ -1264,39 +1237,25 @@ int Simulation::CreateParts(int positionX, int positionY, int c, Brush * cBrush)
|
|||||||
{
|
{
|
||||||
if(cBrush)
|
if(cBrush)
|
||||||
{
|
{
|
||||||
int radiusX, radiusY, sizeX, sizeY;
|
int radiusX = cBrush->GetRadius().X, radiusY = cBrush->GetRadius().Y, sizeX = cBrush->GetSize().X, sizeY = cBrush->GetSize().Y, fn;
|
||||||
|
|
||||||
radiusX = cBrush->GetRadius().X;
|
|
||||||
radiusY = cBrush->GetRadius().Y;
|
|
||||||
|
|
||||||
sizeX = cBrush->GetSize().X;
|
|
||||||
sizeY = cBrush->GetSize().Y;
|
|
||||||
|
|
||||||
unsigned char *bitmap = cBrush->GetBitmap();
|
unsigned char *bitmap = cBrush->GetBitmap();
|
||||||
|
|
||||||
if(c == PT_NONE)
|
if (c == 0)// && !(flags&BRUSH_REPLACEMODE)) // delete
|
||||||
{
|
fn = 0;
|
||||||
|
//else if ((flags&BRUSH_SPECIFIC_DELETE) && !(flags&BRUSH_REPLACEMODE)) // specific delete
|
||||||
|
// fn = 1;
|
||||||
|
//else if (flags&BRUSH_REPLACEMODE) // replace
|
||||||
|
// fn = 2;
|
||||||
|
else // normal draw
|
||||||
|
fn = 3;
|
||||||
|
|
||||||
for(int y = 0; y < sizeY; y++)
|
for(int y = 0; y < sizeY; y++)
|
||||||
{
|
{
|
||||||
for(int x = 0; x < sizeX; x++)
|
for(int x = 0; x < sizeX; x++)
|
||||||
{
|
{
|
||||||
if(bitmap[(y*sizeX)+x] && (positionX+(x-radiusX) >= 0 && positionY+(y-radiusY) >= 0 && positionX+(x-radiusX) < XRES && positionY+(y-radiusY) < YRES))
|
if(bitmap[(y*sizeX)+x] && (positionX+(x-radiusX) >= 0 && positionY+(y-radiusY) >= 0 && positionX+(x-radiusX) < XRES && positionY+(y-radiusY) < YRES))
|
||||||
{
|
{
|
||||||
delete_part(positionX+(x-radiusX), positionY+(y-radiusY), 0);
|
CreatePartFlags(positionX+(x-radiusX), positionY+(y-radiusY), c, fn, 0);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for(int y = 0; y < sizeY; y++)
|
|
||||||
{
|
|
||||||
for(int x = 0; x < sizeX; x++)
|
|
||||||
{
|
|
||||||
if(bitmap[(y*sizeX)+x] && (positionX+(x-radiusX) >= 0 && positionY+(y-radiusY) >= 0 && positionX+(x-radiusX) < XRES && positionY+(y-radiusY) < YRES))
|
|
||||||
{
|
|
||||||
create_part(-2, positionX+(x-radiusX), positionY+(y-radiusY), c);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1306,77 +1265,47 @@ int Simulation::CreateParts(int positionX, int positionY, int c, Brush * cBrush)
|
|||||||
|
|
||||||
int Simulation::CreateParts(int x, int y, int rx, int ry, int c, int flags)
|
int Simulation::CreateParts(int x, int y, int rx, int ry, int c, int flags)
|
||||||
{
|
{
|
||||||
int i, j, r, f = 0, u, v, oy, ox, b = 0, dw = 0, stemp = 0, p;
|
int i, j, f = 0, fn;
|
||||||
int wall = c - 100;
|
|
||||||
if (c==SPC_WIND || c==PT_FIGH)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (c==PT_LIGH)
|
if (c == 0)// && !(flags&BRUSH_REPLACEMODE)) // delete
|
||||||
{
|
fn = 0;
|
||||||
if (lighting_recreate>0 && rx+ry>0)
|
//else if ((flags&BRUSH_SPECIFIC_DELETE) && !(flags&BRUSH_REPLACEMODE)) // specific delete
|
||||||
return 0;
|
// fn = 1;
|
||||||
p=create_part(-2, x, y, c);
|
//else if (flags&BRUSH_REPLACEMODE) // replace
|
||||||
if (p!=-1)
|
// fn = 2;
|
||||||
{
|
else // normal draw
|
||||||
parts[p].life=rx+ry;
|
fn = 3;
|
||||||
if (parts[p].life>55)
|
|
||||||
parts[p].life=55;
|
for (j=-ry; j<=ry; j++)
|
||||||
parts[p].temp=parts[p].life*150; // temperature of the lighting shows the power of the lighting
|
for (i=-rx; i<=rx; i++)
|
||||||
lighting_recreate+=parts[p].life/2+1;
|
if (CreatePartFlags(x+i, y+j, c, fn, flags))
|
||||||
return 1;
|
f = 1;
|
||||||
}
|
return !f;
|
||||||
else return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//eraser
|
int Simulation::CreatePartFlags(int x, int y, int c, int fn, int flags)
|
||||||
if (c == 0)
|
|
||||||
{
|
{
|
||||||
if (rx==0&&ry==0)
|
if (fn == 0) //delete
|
||||||
|
delete_part(x, y, 0);
|
||||||
|
else if (fn == 1) //specific delete
|
||||||
|
delete_part(x, y, flags);
|
||||||
|
else if (fn == 2) //replace mode
|
||||||
|
{
|
||||||
|
if (x<0 || y<0 || x>=XRES || y>=YRES)
|
||||||
|
return 0;
|
||||||
|
//if ((pmap[y][x]&0xFF)!=SLALT&&SLALT!=0)
|
||||||
|
// return 0;
|
||||||
|
if ((pmap[y][x]))
|
||||||
{
|
{
|
||||||
delete_part(x, y, 0);
|
delete_part(x, y, 0);
|
||||||
}
|
if (c!=0)
|
||||||
else
|
|
||||||
{
|
|
||||||
for (j=-ry; j<=ry; j++)
|
|
||||||
for (i=-rx; i<=rx; i++)
|
|
||||||
delete_part(x+i, y+j, 0);
|
|
||||||
}
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (c == SPC_AIR || c == SPC_HEAT || c == SPC_COOL || c == SPC_VACUUM || c == SPC_PGRV || c == SPC_NGRV)
|
|
||||||
{
|
|
||||||
if (rx==0&&ry==0)
|
|
||||||
{
|
|
||||||
create_part(-2, x, y, c);
|
create_part(-2, x, y, c);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
for (j=-ry; j<=ry; j++)
|
|
||||||
for (i=-rx; i<=rx; i++)
|
|
||||||
{
|
|
||||||
if ( x+i<0 || y+j<0 || x+i>=XRES || y+j>=YRES)
|
|
||||||
continue;
|
|
||||||
create_part(-2, x+i, y+j, c);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else if (fn == 3) //normal draw
|
||||||
|
if (create_part(-2, x, y, c) == -1)
|
||||||
return 1;
|
return 1;
|
||||||
}
|
return 0;
|
||||||
|
|
||||||
//else, no special modes, draw element like normal.
|
|
||||||
if (rx==0&&ry==0)//workaround for 1pixel brush/floodfill crashing. todo: find a better fix later.
|
|
||||||
{
|
|
||||||
if (create_part_add_props(-2, x, y, c, rx, ry)==-1)
|
|
||||||
f = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (j=-ry; j<=ry; j++)
|
|
||||||
for (i=-rx; i<=rx; i++)
|
|
||||||
if (create_part_add_props(-2, x+i, y+j, c, rx, ry)==-1)
|
|
||||||
f = 1;
|
|
||||||
}
|
|
||||||
return !f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int Simulation::CreateWalls(int x, int y, int rx, int ry, int c, int flags, Brush * cBrush)
|
int Simulation::CreateWalls(int x, int y, int rx, int ry, int c, int flags, Brush * cBrush)
|
||||||
@ -1441,13 +1370,10 @@ int Simulation::CreateWalls(int x, int y, int rx, int ry, int c, int flags, Brus
|
|||||||
|
|
||||||
void Simulation::CreateLine(int x1, int y1, int x2, int y2, int c, Brush * cBrush)
|
void Simulation::CreateLine(int x1, int y1, int x2, int y2, int c, Brush * cBrush)
|
||||||
{
|
{
|
||||||
int cp=abs(y2-y1)>abs(x2-x1), x, y, dx, dy, sy, rx, ry;
|
int x, y, dx, dy, sy, rx = cBrush->GetRadius().X, ry = cBrush->GetRadius().Y;
|
||||||
rx = cBrush->GetRadius().X;
|
bool reverseXY = abs(y2-y1) > abs(x2-x1);
|
||||||
ry = cBrush->GetRadius().Y;
|
|
||||||
float e, de;
|
float e, de;
|
||||||
if (c==SPC_PROP)
|
if (reverseXY)
|
||||||
return;
|
|
||||||
if (cp)
|
|
||||||
{
|
{
|
||||||
y = x1;
|
y = x1;
|
||||||
x1 = y1;
|
x1 = y1;
|
||||||
@ -1476,7 +1402,7 @@ void Simulation::CreateLine(int x1, int y1, int x2, int y2, int c, Brush * cBrus
|
|||||||
sy = (y1<y2) ? 1 : -1;
|
sy = (y1<y2) ? 1 : -1;
|
||||||
for (x=x1; x<=x2; x++)
|
for (x=x1; x<=x2; x++)
|
||||||
{
|
{
|
||||||
if (cp)
|
if (reverseXY)
|
||||||
CreateParts(y, x, c, cBrush);
|
CreateParts(y, x, c, cBrush);
|
||||||
else
|
else
|
||||||
CreateParts(x, y, c, cBrush);
|
CreateParts(x, y, c, cBrush);
|
||||||
@ -1484,10 +1410,9 @@ void Simulation::CreateLine(int x1, int y1, int x2, int y2, int c, Brush * cBrus
|
|||||||
if (e >= 0.5f)
|
if (e >= 0.5f)
|
||||||
{
|
{
|
||||||
y += sy;
|
y += sy;
|
||||||
if ((c==WL_EHOLE+100 || c==WL_ALLOWGAS+100 || c==WL_ALLOWENERGY+100 || c==WL_ALLOWALLELEC+100 || c==WL_ALLOWSOLID+100 || c==WL_ALLOWAIR+100 || c==WL_WALL+100 || c==WL_DESTROYALL+100 || c==WL_ALLOWLIQUID+100 || c==WL_FAN+100 || c==WL_STREAM+100 || c==WL_DETECT+100 || c==WL_EWALL+100 || c==WL_WALLELEC+100 || !(rx+ry))
|
if (!(rx+ry) && ((y1<y2) ? (y<=y2) : (y>=y2)))
|
||||||
&& ((y1<y2) ? (y<=y2) : (y>=y2)))
|
|
||||||
{
|
{
|
||||||
if (cp)
|
if (reverseXY)
|
||||||
CreateParts(y, x, c, cBrush);
|
CreateParts(y, x, c, cBrush);
|
||||||
else
|
else
|
||||||
CreateParts(x, y, c, cBrush);
|
CreateParts(x, y, c, cBrush);
|
||||||
@ -1497,13 +1422,13 @@ void Simulation::CreateLine(int x1, int y1, int x2, int y2, int c, Brush * cBrus
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Simulation::CreateLine(int x1, int y1, int x2, int y2, int rx, int ry, int c, int flags)
|
//Now simply creates a 0 pixel radius line without all the complicated flags / other checks
|
||||||
|
void Simulation::CreateLine(int x1, int y1, int x2, int y2, int c)
|
||||||
{
|
{
|
||||||
int cp=abs(y2-y1)>abs(x2-x1), x, y, dx, dy, sy;
|
bool reverseXY = abs(y2-y1) > abs(x2-x1);
|
||||||
|
int x, y, dx, dy, sy;
|
||||||
float e, de;
|
float e, de;
|
||||||
if (c==SPC_PROP)
|
if (reverseXY)
|
||||||
return;
|
|
||||||
if (cp)
|
|
||||||
{
|
{
|
||||||
y = x1;
|
y = x1;
|
||||||
x1 = y1;
|
x1 = y1;
|
||||||
@ -1532,21 +1457,20 @@ void Simulation::CreateLine(int x1, int y1, int x2, int y2, int rx, int ry, int
|
|||||||
sy = (y1<y2) ? 1 : -1;
|
sy = (y1<y2) ? 1 : -1;
|
||||||
for (x=x1; x<=x2; x++)
|
for (x=x1; x<=x2; x++)
|
||||||
{
|
{
|
||||||
if (cp)
|
if (reverseXY)
|
||||||
CreateParts(y, x, rx, ry, c, flags);
|
create_part(-2, y, x, c);
|
||||||
else
|
else
|
||||||
CreateParts(x, y, rx, ry, c, flags);
|
create_part(-2, x, y, c);
|
||||||
e += de;
|
e += de;
|
||||||
if (e >= 0.5f)
|
if (e >= 0.5f)
|
||||||
{
|
{
|
||||||
y += sy;
|
y += sy;
|
||||||
if ((c==WL_EHOLE+100 || c==WL_ALLOWGAS+100 || c==WL_ALLOWENERGY+100 || c==WL_ALLOWALLELEC+100 || c==WL_ALLOWSOLID+100 || c==WL_ALLOWAIR+100 || c==WL_WALL+100 || c==WL_DESTROYALL+100 || c==WL_ALLOWLIQUID+100 || c==WL_FAN+100 || c==WL_STREAM+100 || c==WL_DETECT+100 || c==WL_EWALL+100 || c==WL_WALLELEC+100 || !(rx+ry))
|
if ((y1<y2) ? (y<=y2) : (y>=y2))
|
||||||
&& ((y1<y2) ? (y<=y2) : (y>=y2)))
|
|
||||||
{
|
{
|
||||||
if (cp)
|
if (reverseXY)
|
||||||
CreateParts(y, x, rx, ry, c, flags);
|
create_part(-2, y, x, c);
|
||||||
else
|
else
|
||||||
CreateParts(x, y, rx, ry, c, flags);
|
create_part(-2, x, y, c);
|
||||||
}
|
}
|
||||||
e -= 1.0f;
|
e -= 1.0f;
|
||||||
}
|
}
|
||||||
@ -1951,7 +1875,7 @@ void Simulation::create_arc(int sx, int sy, int dx, int dy, int midpoints, int v
|
|||||||
xmid[i+1] += (rand()%variance)-voffset;
|
xmid[i+1] += (rand()%variance)-voffset;
|
||||||
ymid[i+1] += (rand()%variance)-voffset;
|
ymid[i+1] += (rand()%variance)-voffset;
|
||||||
}
|
}
|
||||||
CreateLine(xmid[i], ymid[i], xmid[i+1], ymid[i+1], 0, 0, type, flags);
|
CreateLine(xmid[i], ymid[i], xmid[i+1], ymid[i+1], type);
|
||||||
}
|
}
|
||||||
free(xmid);
|
free(xmid);
|
||||||
free(ymid);
|
free(ymid);
|
||||||
@ -2707,46 +2631,12 @@ int Simulation::create_part(int p, int x, int y, int tv)
|
|||||||
int t = tv & 0xFF;
|
int t = tv & 0xFF;
|
||||||
int v = (tv >> 8) & 0xFFFFFF;
|
int v = (tv >> 8) & 0xFFFFFF;
|
||||||
|
|
||||||
if (x<0 || y<0 || x>=XRES || y>=YRES || ((t<=0 || t>=PT_NUM)&&t!=SPC_HEAT&&t!=SPC_COOL&&t!=SPC_AIR&&t!=SPC_VACUUM&&t!=SPC_PGRV&&t!=SPC_NGRV))
|
if (x<0 || y<0 || x>=XRES || y>=YRES)
|
||||||
return -1;
|
return -1;
|
||||||
if (t>=0 && t<PT_NUM && !elements[t].Enabled && t!=SPC_AIR)
|
if (t>=0 && t<PT_NUM && !elements[t].Enabled)
|
||||||
return -1;
|
return -1;
|
||||||
if(t==SPC_PROP) {
|
|
||||||
return -1; //Prop tool works on a mouse click basic, make sure it doesn't do anything here
|
|
||||||
}
|
|
||||||
|
|
||||||
/*if (t==SPC_HEAT||t==SPC_COOL)
|
if (tv == SPC_AIR)
|
||||||
{
|
|
||||||
if ((pmap[y][x]&0xFF)!=PT_NONE&&(pmap[y][x]&0xFF)<PT_NUM)
|
|
||||||
{
|
|
||||||
if (t==SPC_HEAT&&parts[pmap[y][x]>>8].temp<MAX_TEMP)
|
|
||||||
{
|
|
||||||
if ((pmap[y][x]&0xFF)==PT_PUMP || (pmap[y][x]&0xFF)==PT_GPMP) {
|
|
||||||
parts[pmap[y][x]>>8].temp = restrict_flt(parts[pmap[y][x]>>8].temp + 0.1f, MIN_TEMP, MAX_TEMP);
|
|
||||||
} else if ((sdl_mod & (KMOD_SHIFT)) && (sdl_mod & (KMOD_CTRL))) {
|
|
||||||
parts[pmap[y][x]>>8].temp = restrict_flt(parts[pmap[y][x]>>8].temp + 50.0f, MIN_TEMP, MAX_TEMP);
|
|
||||||
} else {
|
|
||||||
parts[pmap[y][x]>>8].temp = restrict_flt(parts[pmap[y][x]>>8].temp + 4.0f, MIN_TEMP, MAX_TEMP);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (t==SPC_COOL&&parts[pmap[y][x]>>8].temp>MIN_TEMP)
|
|
||||||
{
|
|
||||||
if ((pmap[y][x]&0xFF)==PT_PUMP || (pmap[y][x]&0xFF)==PT_GPMP) {
|
|
||||||
parts[pmap[y][x]>>8].temp = restrict_flt(parts[pmap[y][x]>>8].temp - 0.1f, MIN_TEMP, MAX_TEMP);
|
|
||||||
} else if ((sdl_mod & (KMOD_SHIFT)) && (sdl_mod & (KMOD_CTRL))) {
|
|
||||||
parts[pmap[y][x]>>8].temp = restrict_flt(parts[pmap[y][x]>>8].temp - 50.0f, MIN_TEMP, MAX_TEMP);
|
|
||||||
} else {
|
|
||||||
parts[pmap[y][x]>>8].temp = restrict_flt(parts[pmap[y][x]>>8].temp - 4.0f, MIN_TEMP, MAX_TEMP);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return pmap[y][x]>>8;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
if (t==SPC_AIR)
|
|
||||||
{
|
{
|
||||||
pv[y/CELL][x/CELL] += 0.03f;
|
pv[y/CELL][x/CELL] += 0.03f;
|
||||||
if (y+CELL<YRES)
|
if (y+CELL<YRES)
|
||||||
@ -2759,30 +2649,6 @@ int Simulation::create_part(int p, int x, int y, int tv)
|
|||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (t==SPC_VACUUM)
|
|
||||||
{
|
|
||||||
pv[y/CELL][x/CELL] -= 0.03f;
|
|
||||||
if (y+CELL<YRES)
|
|
||||||
pv[y/CELL+1][x/CELL] -= 0.03f;
|
|
||||||
if (x+CELL<XRES)
|
|
||||||
{
|
|
||||||
pv[y/CELL][x/CELL+1] -= 0.03f;
|
|
||||||
if (y+CELL<YRES)
|
|
||||||
pv[y/CELL+1][x/CELL+1] -= 0.03f;
|
|
||||||
}
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (t==SPC_PGRV)
|
|
||||||
{
|
|
||||||
gravmap[(y/CELL)*(XRES/CELL)+(x/CELL)] = 5;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (t==SPC_NGRV)
|
|
||||||
{
|
|
||||||
gravmap[(y/CELL)*(XRES/CELL)+(x/CELL)] = -5;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (t==PT_SPRK)
|
if (t==PT_SPRK)
|
||||||
{
|
{
|
||||||
@ -2791,10 +2657,9 @@ int Simulation::create_part(int p, int x, int y, int tv)
|
|||||||
if(type == PT_WIRE)
|
if(type == PT_WIRE)
|
||||||
{
|
{
|
||||||
parts[index].ctype = PT_DUST;
|
parts[index].ctype = PT_DUST;
|
||||||
|
return index;
|
||||||
}
|
}
|
||||||
if (!(type == PT_INST || (elements[type].Properties&PROP_CONDUCTS)))
|
if (!(type == PT_INST || (elements[type].Properties&PROP_CONDUCTS)) || parts[index].life!=0)
|
||||||
return -1;
|
|
||||||
if (parts[index].life!=0)
|
|
||||||
return -1;
|
return -1;
|
||||||
if (p == -2 && type == PT_INST)
|
if (p == -2 && type == PT_INST)
|
||||||
{
|
{
|
||||||
@ -2913,19 +2778,6 @@ int Simulation::create_part(int p, int x, int y, int tv)
|
|||||||
|
|
||||||
if (i>parts_lastActiveIndex) parts_lastActiveIndex = i;
|
if (i>parts_lastActiveIndex) parts_lastActiveIndex = i;
|
||||||
|
|
||||||
parts[i].dcolour = 0;
|
|
||||||
parts[i].flags = 0;
|
|
||||||
if (t == PT_GLAS || t == PT_QRTZ || t == PT_TUGN)
|
|
||||||
{
|
|
||||||
parts[i].pavg[1] = pv[y/CELL][x/CELL];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
parts[i].pavg[0] = 0.0f;
|
|
||||||
parts[i].pavg[1] = 0.0f;
|
|
||||||
}
|
|
||||||
if (t!=PT_STKM&&t!=PT_STKM2&&t!=PT_FIGH)//set everything to default values first, except for stickman.
|
|
||||||
{
|
|
||||||
parts[i].x = (float)x;
|
parts[i].x = (float)x;
|
||||||
parts[i].y = (float)y;
|
parts[i].y = (float)y;
|
||||||
parts[i].type = t;
|
parts[i].type = t;
|
||||||
@ -2936,7 +2788,19 @@ int Simulation::create_part(int p, int x, int y, int tv)
|
|||||||
parts[i].temp = elements[t].Temperature;
|
parts[i].temp = elements[t].Temperature;
|
||||||
parts[i].tmp = 0;
|
parts[i].tmp = 0;
|
||||||
parts[i].tmp2 = 0;
|
parts[i].tmp2 = 0;
|
||||||
|
parts[i].dcolour = 0;
|
||||||
|
parts[i].flags = 0;
|
||||||
|
if (t == PT_GLAS || t == PT_QRTZ || t == PT_TUNG)
|
||||||
|
{
|
||||||
|
parts[i].pavg[0] = 0.0f;
|
||||||
|
parts[i].pavg[1] = pv[y/CELL][x/CELL];
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
parts[i].pavg[0] = 0.0f;
|
||||||
|
parts[i].pavg[1] = 0.0f;
|
||||||
|
}
|
||||||
|
|
||||||
switch (t)
|
switch (t)
|
||||||
{
|
{
|
||||||
case PT_SOAP:
|
case PT_SOAP:
|
||||||
@ -3043,14 +2907,7 @@ int Simulation::create_part(int p, int x, int y, int tv)
|
|||||||
case PT_STKM:
|
case PT_STKM:
|
||||||
if (player.spwn==0)
|
if (player.spwn==0)
|
||||||
{
|
{
|
||||||
parts[i].x = (float)x;
|
|
||||||
parts[i].y = (float)y;
|
|
||||||
parts[i].type = PT_STKM;
|
|
||||||
parts[i].vx = 0;
|
|
||||||
parts[i].vy = 0;
|
|
||||||
parts[i].life = 100;
|
parts[i].life = 100;
|
||||||
parts[i].ctype = 0;
|
|
||||||
parts[i].temp = elements[t].Temperature;
|
|
||||||
Element_STKM::STKM_init_legs(this, &player, i);
|
Element_STKM::STKM_init_legs(this, &player, i);
|
||||||
player.spwn = 1;
|
player.spwn = 1;
|
||||||
player.elem = PT_DUST;
|
player.elem = PT_DUST;
|
||||||
@ -3065,14 +2922,7 @@ int Simulation::create_part(int p, int x, int y, int tv)
|
|||||||
case PT_STKM2:
|
case PT_STKM2:
|
||||||
if (player2.spwn==0)
|
if (player2.spwn==0)
|
||||||
{
|
{
|
||||||
parts[i].x = (float)x;
|
|
||||||
parts[i].y = (float)y;
|
|
||||||
parts[i].type = PT_STKM2;
|
|
||||||
parts[i].vx = 0;
|
|
||||||
parts[i].vy = 0;
|
|
||||||
parts[i].life = 100;
|
parts[i].life = 100;
|
||||||
parts[i].ctype = 0;
|
|
||||||
parts[i].temp = elements[t].Temperature;
|
|
||||||
Element_STKM::STKM_init_legs(this, &player2, i);
|
Element_STKM::STKM_init_legs(this, &player2, i);
|
||||||
player2.spwn = 1;
|
player2.spwn = 1;
|
||||||
player2.elem = PT_DUST;
|
player2.elem = PT_DUST;
|
||||||
@ -3791,7 +3641,7 @@ void Simulation::update_particles_i(int start, int inc)
|
|||||||
if (elements[t].Diffusion)//the random diffusion that gasses have
|
if (elements[t].Diffusion)//the random diffusion that gasses have
|
||||||
{
|
{
|
||||||
#ifdef REALISTIC
|
#ifdef REALISTIC
|
||||||
//The magic number controlls diffusion speed
|
//The magic number controls diffusion speed
|
||||||
parts[i].vx += 0.05*sqrtf(parts[i].temp)*elements[t].Diffusion*(rand()/(0.5f*RAND_MAX)-1.0f);
|
parts[i].vx += 0.05*sqrtf(parts[i].temp)*elements[t].Diffusion*(rand()/(0.5f*RAND_MAX)-1.0f);
|
||||||
parts[i].vy += 0.05*sqrtf(parts[i].temp)*elements[t].Diffusion*(rand()/(0.5f*RAND_MAX)-1.0f);
|
parts[i].vy += 0.05*sqrtf(parts[i].temp)*elements[t].Diffusion*(rand()/(0.5f*RAND_MAX)-1.0f);
|
||||||
#else
|
#else
|
||||||
@ -3834,13 +3684,11 @@ void Simulation::update_particles_i(int start, int inc)
|
|||||||
h_count = 0;
|
h_count = 0;
|
||||||
#ifdef REALISTIC
|
#ifdef REALISTIC
|
||||||
if (t&&(t!=PT_HSWC||parts[i].life==10)&&(elements[t].HeatConduct*gel_scale))
|
if (t&&(t!=PT_HSWC||parts[i].life==10)&&(elements[t].HeatConduct*gel_scale))
|
||||||
{
|
|
||||||
float c_Cm = 0.0f;
|
|
||||||
#else
|
#else
|
||||||
if (t&&(t!=PT_HSWC||parts[i].life==10)&&(elements[t].HeatConduct*gel_scale)>(rand()%250))
|
if (t&&(t!=PT_HSWC||parts[i].life==10)&&(elements[t].HeatConduct*gel_scale)>(rand()%250))
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
float c_Cm = 0.0f;
|
float c_Cm = 0.0f;
|
||||||
#endif
|
|
||||||
if (aheat_enable && !(elements[t].Properties&PROP_NOAMBHEAT))
|
if (aheat_enable && !(elements[t].Properties&PROP_NOAMBHEAT))
|
||||||
{
|
{
|
||||||
#ifdef REALISTIC
|
#ifdef REALISTIC
|
||||||
@ -3924,7 +3772,8 @@ void Simulation::update_particles_i(int start, int inc)
|
|||||||
if ((t==PT_ICEI || t==PT_SNOW) && (parts[i].ctype==0 || parts[i].ctype>=PT_NUM || parts[i].ctype==PT_ICEI || parts[i].ctype==PT_SNOW))
|
if ((t==PT_ICEI || t==PT_SNOW) && (parts[i].ctype==0 || parts[i].ctype>=PT_NUM || parts[i].ctype==PT_ICEI || parts[i].ctype==PT_SNOW))
|
||||||
parts[i].ctype = PT_WATR;
|
parts[i].ctype = PT_WATR;
|
||||||
|
|
||||||
if (ctemph>elements[t].HighTemperature&&elements[t].HighTemperatureTransition>-1) {
|
if (ctemph>elements[t].HighTemperature && elements[t].HighTemperatureTransition>-1)
|
||||||
|
{
|
||||||
// particle type change due to high temperature
|
// particle type change due to high temperature
|
||||||
#ifdef REALISTIC
|
#ifdef REALISTIC
|
||||||
float dbt = ctempl - pt;
|
float dbt = ctempl - pt;
|
||||||
@ -3945,10 +3794,14 @@ void Simulation::update_particles_i(int start, int inc)
|
|||||||
if (elements[t].HighTemperatureTransition != PT_NUM)
|
if (elements[t].HighTemperatureTransition != PT_NUM)
|
||||||
t = elements[t].HighTemperatureTransition;
|
t = elements[t].HighTemperatureTransition;
|
||||||
#endif
|
#endif
|
||||||
else if (t==PT_ICEI || t==PT_SNOW) {
|
else if (t == PT_ICEI || t == PT_SNOW)
|
||||||
if (parts[i].ctype<PT_NUM&&parts[i].ctype!=t) {
|
{
|
||||||
if (elements[parts[i].ctype].LowTemperatureTransition==t&&pt<=elements[parts[i].ctype].LowTemperature) s = 0;
|
if (parts[i].ctype < PT_NUM && parts[i].ctype != t)
|
||||||
else {
|
{
|
||||||
|
if (elements[parts[i].ctype].LowTemperatureTransition==t && pt<=elements[parts[i].ctype].LowTemperature)
|
||||||
|
s = 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
#ifdef REALISTIC
|
#ifdef REALISTIC
|
||||||
//One ice table value for all it's kinds
|
//One ice table value for all it's kinds
|
||||||
if (platent[t] <= (c_heat - (elements[parts[i].ctype].LowTemperature - dbt)*c_Cm))
|
if (platent[t] <= (c_heat - (elements[parts[i].ctype].LowTemperature - dbt)*c_Cm))
|
||||||
@ -3970,9 +3823,11 @@ void Simulation::update_particles_i(int start, int inc)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else s = 0;
|
else
|
||||||
|
s = 0;
|
||||||
}
|
}
|
||||||
else if (t==PT_SLTW) {
|
else if (t == PT_SLTW)
|
||||||
|
{
|
||||||
#ifdef REALISTIC
|
#ifdef REALISTIC
|
||||||
if (platent[t] <= (c_heat - (elements[t].HighTemperature - dbt)*c_Cm))
|
if (platent[t] <= (c_heat - (elements[t].HighTemperature - dbt)*c_Cm))
|
||||||
{
|
{
|
||||||
@ -3987,12 +3842,27 @@ void Simulation::update_particles_i(int start, int inc)
|
|||||||
s = 0;
|
s = 0;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (rand()%4==0) t = PT_SALT;
|
if (rand()%4 == 0)
|
||||||
else t = PT_WTRV;
|
t = PT_SALT;
|
||||||
|
else
|
||||||
|
t = PT_WTRV;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else s = 0;
|
else if (t == PT_BRMT)
|
||||||
} else if (ctempl<elements[t].LowTemperature&&elements[t].LowTemperatureTransition>-1) {
|
{
|
||||||
|
if (parts[i].ctype == PT_TUNG && ctemph <= 3695.0)
|
||||||
|
s = 0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
t = PT_LAVA;
|
||||||
|
parts[i].type = PT_TUNG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
s = 0;
|
||||||
|
}
|
||||||
|
else if (ctempl<elements[t].LowTemperature && elements[t].LowTemperatureTransition > -1)
|
||||||
|
{
|
||||||
// particle type change due to low temperature
|
// particle type change due to low temperature
|
||||||
#ifdef REALISTIC
|
#ifdef REALISTIC
|
||||||
float dbt = ctempl - pt;
|
float dbt = ctempl - pt;
|
||||||
@ -4013,25 +3883,39 @@ void Simulation::update_particles_i(int start, int inc)
|
|||||||
if (elements[t].LowTemperatureTransition != PT_NUM)
|
if (elements[t].LowTemperatureTransition != PT_NUM)
|
||||||
t = elements[t].LowTemperatureTransition;
|
t = elements[t].LowTemperatureTransition;
|
||||||
#endif
|
#endif
|
||||||
else if (t==PT_WTRV) {
|
else if (t == PT_WTRV)
|
||||||
if (pt<273.0f) t = PT_RIME;
|
{
|
||||||
else t = PT_DSTW;
|
if (pt < 273.0f)
|
||||||
|
t = PT_RIME;
|
||||||
|
else
|
||||||
|
t = PT_DSTW;
|
||||||
}
|
}
|
||||||
else if (t==PT_LAVA) {
|
else if (t == PT_LAVA)
|
||||||
if (parts[i].ctype>0 && parts[i].ctype<PT_NUM && parts[i].ctype!=PT_LAVA) {
|
{
|
||||||
if (parts[i].ctype==PT_THRM&&pt>=elements[PT_BMTL].HighTemperature) s = 0;
|
if (parts[i].ctype>0 && parts[i].ctype<PT_NUM && parts[i].ctype!=PT_LAVA)
|
||||||
else if ((parts[i].ctype==PT_VIBR || parts[i].ctype==PT_BVBR) && pt>=273.15f) s = 0;
|
{
|
||||||
else if (parts[i].ctype==PT_TUGN) {
|
if (parts[i].ctype==PT_THRM&&pt>=elements[PT_BMTL].HighTemperature)
|
||||||
if (pt>3695.0) s = 0;
|
s = 0;
|
||||||
|
else if ((parts[i].ctype==PT_VIBR || parts[i].ctype==PT_BVBR) && pt>=273.15f)
|
||||||
|
s = 0;
|
||||||
|
else if (parts[i].ctype==PT_TUNG)
|
||||||
|
{
|
||||||
|
if (pt>3695.0)
|
||||||
|
s = 0;
|
||||||
}
|
}
|
||||||
else if (elements[parts[i].ctype].HighTemperatureTransition==PT_LAVA) {
|
else if (elements[parts[i].ctype].HighTemperatureTransition == PT_LAVA)
|
||||||
if (pt>=elements[parts[i].ctype].HighTemperature) s = 0;
|
{
|
||||||
|
if (pt >= elements[parts[i].ctype].HighTemperature)
|
||||||
|
s = 0;
|
||||||
}
|
}
|
||||||
else if (pt>=973.0f) s = 0; // freezing point for lava with any other (not listed in ptransitions as turning into lava) ctype
|
else if (pt>=973.0f)
|
||||||
if (s) {
|
s = 0; // freezing point for lava with any other (not listed in ptransitions as turning into lava) ctype
|
||||||
|
if (s)
|
||||||
|
{
|
||||||
t = parts[i].ctype;
|
t = parts[i].ctype;
|
||||||
parts[i].ctype = PT_NONE;
|
parts[i].ctype = PT_NONE;
|
||||||
if (t==PT_THRM) {
|
if (t == PT_THRM)
|
||||||
|
{
|
||||||
parts[i].tmp = 0;
|
parts[i].tmp = 0;
|
||||||
t = PT_BMTL;
|
t = PT_BMTL;
|
||||||
}
|
}
|
||||||
@ -4042,12 +3926,16 @@ void Simulation::update_particles_i(int start, int inc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (pt<973.0f) t = PT_STNE;
|
else if (pt<973.0f)
|
||||||
else s = 0;
|
t = PT_STNE;
|
||||||
|
else
|
||||||
|
s = 0;
|
||||||
}
|
}
|
||||||
else s = 0;
|
else
|
||||||
|
s = 0;
|
||||||
}
|
}
|
||||||
else s = 0;
|
else
|
||||||
|
s = 0;
|
||||||
#ifdef REALISTIC
|
#ifdef REALISTIC
|
||||||
pt = restrict_flt(pt, MIN_TEMP, MAX_TEMP);
|
pt = restrict_flt(pt, MIN_TEMP, MAX_TEMP);
|
||||||
for (j=0; j<8; j++)
|
for (j=0; j<8; j++)
|
||||||
@ -4055,30 +3943,37 @@ void Simulation::update_particles_i(int start, int inc)
|
|||||||
parts[surround_hconduct[j]].temp = pt;
|
parts[surround_hconduct[j]].temp = pt;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (s) { // particle type change occurred
|
if (s) // particle type change occurred
|
||||||
|
{
|
||||||
if (t==PT_ICEI || t==PT_LAVA || t==PT_SNOW)
|
if (t==PT_ICEI || t==PT_LAVA || t==PT_SNOW)
|
||||||
parts[i].ctype = parts[i].type;
|
parts[i].ctype = parts[i].type;
|
||||||
if (!(t==PT_ICEI&&parts[i].ctype==PT_FRZW)) parts[i].life = 0;
|
if (!(t==PT_ICEI && parts[i].ctype==PT_FRZW))
|
||||||
|
parts[i].life = 0;
|
||||||
if (elements[t].State==ST_GAS && elements[parts[i].type].State!=ST_GAS)
|
if (elements[t].State==ST_GAS && elements[parts[i].type].State!=ST_GAS)
|
||||||
pv[y/CELL][x/CELL] += 0.50f;
|
pv[y/CELL][x/CELL] += 0.50f;
|
||||||
|
|
||||||
part_change_type(i,x,y,t);
|
part_change_type(i,x,y,t);
|
||||||
|
|
||||||
if (t==PT_FIRE || t==PT_PLSM || t==PT_CFLM)
|
if (t==PT_FIRE || t==PT_PLSM || t==PT_CFLM)
|
||||||
parts[i].life = rand()%50+120;
|
parts[i].life = rand()%50+120;
|
||||||
if (t==PT_LAVA) {
|
if (t == PT_LAVA)
|
||||||
|
{
|
||||||
if (parts[i].ctype == PT_BRMT) parts[i].ctype = PT_BMTL;
|
if (parts[i].ctype == PT_BRMT) parts[i].ctype = PT_BMTL;
|
||||||
else if (parts[i].ctype == PT_SAND) parts[i].ctype = PT_GLAS;
|
else if (parts[i].ctype == PT_SAND) parts[i].ctype = PT_GLAS;
|
||||||
else if (parts[i].ctype == PT_BGLA) parts[i].ctype = PT_GLAS;
|
else if (parts[i].ctype == PT_BGLA) parts[i].ctype = PT_GLAS;
|
||||||
else if (parts[i].ctype == PT_PQRT) parts[i].ctype = PT_QRTZ;
|
else if (parts[i].ctype == PT_PQRT) parts[i].ctype = PT_QRTZ;
|
||||||
parts[i].life = rand()%120+240;
|
parts[i].life = rand()%120+240;
|
||||||
}
|
}
|
||||||
if (t==PT_NONE) {
|
if (t == PT_NONE)
|
||||||
|
{
|
||||||
kill_part(i);
|
kill_part(i);
|
||||||
goto killed;
|
goto killed;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pt = parts[i].temp = restrict_flt(parts[i].temp, MIN_TEMP, MAX_TEMP);
|
pt = parts[i].temp = restrict_flt(parts[i].temp, MIN_TEMP, MAX_TEMP);
|
||||||
if (t==PT_LAVA) {
|
if (t == PT_LAVA)
|
||||||
|
{
|
||||||
parts[i].life = restrict_flt((parts[i].temp-700)/7, 0.0f, 400.0f);
|
parts[i].life = restrict_flt((parts[i].temp-700)/7, 0.0f, 400.0f);
|
||||||
if (parts[i].ctype==PT_THRM&&parts[i].tmp>0)
|
if (parts[i].ctype==PT_THRM&&parts[i].tmp>0)
|
||||||
{
|
{
|
||||||
@ -4091,11 +3986,7 @@ void Simulation::update_particles_i(int start, int inc)
|
|||||||
parts[i].temp = MAX_TEMP;
|
parts[i].temp = MAX_TEMP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef REALISTIC //needed to fix update_particles_i parsing
|
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
else parts[i].temp = restrict_flt(parts[i].temp, MIN_TEMP, MAX_TEMP);
|
else parts[i].temp = restrict_flt(parts[i].temp, MIN_TEMP, MAX_TEMP);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4196,7 +4087,11 @@ void Simulation::update_particles_i(int start, int inc)
|
|||||||
}
|
}
|
||||||
|
|
||||||
//call the particle update function, if there is one
|
//call the particle update function, if there is one
|
||||||
|
#if !defined(RENDERER) && defined(LUACONSOLE)
|
||||||
if (elements[t].Update && lua_el_mode[t] != 2)
|
if (elements[t].Update && lua_el_mode[t] != 2)
|
||||||
|
#else
|
||||||
|
if (elements[t].Update)
|
||||||
|
#endif
|
||||||
{
|
{
|
||||||
if ((*(elements[t].Update))(this, i, x, y, surround_space, nt, parts, pmap))
|
if ((*(elements[t].Update))(this, i, x, y, surround_space, nt, parts, pmap))
|
||||||
continue;
|
continue;
|
||||||
@ -4207,6 +4102,7 @@ void Simulation::update_particles_i(int start, int inc)
|
|||||||
y = (int)(parts[i].y+0.5f);
|
y = (int)(parts[i].y+0.5f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#if !defined(RENDERER) && defined(LUACONSOLE)
|
||||||
if(lua_el_mode[t])
|
if(lua_el_mode[t])
|
||||||
{
|
{
|
||||||
if(luacon_elementReplacement(this, i, x, y, surround_space, nt, parts, pmap))
|
if(luacon_elementReplacement(this, i, x, y, surround_space, nt, parts, pmap))
|
||||||
@ -4215,6 +4111,7 @@ void Simulation::update_particles_i(int start, int inc)
|
|||||||
x = (int)(parts[i].x+0.5f);
|
x = (int)(parts[i].x+0.5f);
|
||||||
y = (int)(parts[i].y+0.5f);
|
y = (int)(parts[i].y+0.5f);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if(legacy_enable)//if heat sim is off
|
if(legacy_enable)//if heat sim is off
|
||||||
Element::legacyUpdate(this, i,x,y,surround_space,nt, parts, pmap);
|
Element::legacyUpdate(this, i,x,y,surround_space,nt, parts, pmap);
|
||||||
|
@ -139,7 +139,6 @@ public:
|
|||||||
int flood_water(int x, int y, int i, int originaly, int check);
|
int flood_water(int x, int y, int i, int originaly, int check);
|
||||||
TPT_NO_INLINE void detach(int i);
|
TPT_NO_INLINE void detach(int i);
|
||||||
TPT_NO_INLINE void part_change_type(int i, int x, int y, int t);
|
TPT_NO_INLINE void part_change_type(int i, int x, int y, int t);
|
||||||
TPT_NO_INLINE int create_part_add_props(int p, int x, int y, int tv, int rx, int ry);
|
|
||||||
//int InCurrentBrush(int i, int j, int rx, int ry);
|
//int InCurrentBrush(int i, int j, int rx, int ry);
|
||||||
//int get_brush_flags();
|
//int get_brush_flags();
|
||||||
TPT_NO_INLINE int create_part(int p, int x, int y, int t);
|
TPT_NO_INLINE int create_part(int p, int x, int y, int t);
|
||||||
@ -161,7 +160,7 @@ public:
|
|||||||
int Tool(int x, int y, int tool, float strength = 1.0f);
|
int Tool(int x, int y, int tool, float strength = 1.0f);
|
||||||
int ToolBrush(int x, int y, int tool, Brush * cBrush, float strength = 1.0f);
|
int ToolBrush(int x, int y, int tool, Brush * cBrush, float strength = 1.0f);
|
||||||
void ToolLine(int x1, int y1, int x2, int y2, int tool, Brush * cBrush, float strength = 1.0f);
|
void ToolLine(int x1, int y1, int x2, int y2, int tool, Brush * cBrush, float strength = 1.0f);
|
||||||
void ToolBox(int x1, int y1, int x2, int y2, int tool, Brush * cBrush, float strength = 1.0f);
|
void ToolBox(int x1, int y1, int x2, int y2, int tool, float strength = 1.0f);
|
||||||
|
|
||||||
void CreateBox(int x1, int y1, int x2, int y2, int c, int flags);
|
void CreateBox(int x1, int y1, int x2, int y2, int c, int flags);
|
||||||
int FloodINST(int x, int y, int fullc, int cm);
|
int FloodINST(int x, int y, int fullc, int cm);
|
||||||
@ -170,8 +169,9 @@ public:
|
|||||||
int CreateParts(int positionX, int positionY, int c, Brush * cBrush);
|
int CreateParts(int positionX, int positionY, int c, Brush * cBrush);
|
||||||
//Old particle creation, will create a crappy square, do not use
|
//Old particle creation, will create a crappy square, do not use
|
||||||
int CreateParts(int x, int y, int rx, int ry, int c, int flags);
|
int CreateParts(int x, int y, int rx, int ry, int c, int flags);
|
||||||
|
int CreatePartFlags(int x, int y, int c, int fn, int flags);
|
||||||
void CreateLine(int x1, int y1, int x2, int y2, int c, Brush * cBrush);
|
void CreateLine(int x1, int y1, int x2, int y2, int c, Brush * cBrush);
|
||||||
void CreateLine(int x1, int y1, int x2, int y2, int rx, int ry, int c, int flags);
|
void CreateLine(int x1, int y1, int x2, int y2, int c);
|
||||||
|
|
||||||
void CreateWallBox(int x1, int y1, int x2, int y2, int c, int flags);
|
void CreateWallBox(int x1, int y1, int x2, int y2, int c, int flags);
|
||||||
int FloodWalls(int x, int y, int c, int cm, int bm, int flags);
|
int FloodWalls(int x, int y, int c, int cm, int bm, int flags);
|
||||||
|
@ -19,8 +19,6 @@
|
|||||||
#define SC_CRACKER2 16
|
#define SC_CRACKER2 16
|
||||||
#define SC_TOTAL 15
|
#define SC_TOTAL 15
|
||||||
|
|
||||||
#define UI_WALLSTART 222
|
|
||||||
#define UI_ACTUALSTART 122
|
|
||||||
#define UI_WALLCOUNT 16
|
#define UI_WALLCOUNT 16
|
||||||
|
|
||||||
#define O_WL_WALLELEC 122
|
#define O_WL_WALLELEC 122
|
||||||
@ -61,14 +59,8 @@
|
|||||||
#define WL_ALLOWENERGY 15
|
#define WL_ALLOWENERGY 15
|
||||||
#define WL_FLOODHELPER 255
|
#define WL_FLOODHELPER 255
|
||||||
|
|
||||||
#define SPC_AIR 236
|
#define OLD_SPC_AIR 236
|
||||||
#define SPC_HEAT 237
|
#define SPC_AIR 256
|
||||||
#define SPC_COOL 238
|
|
||||||
#define SPC_VACUUM 239
|
|
||||||
#define SPC_WIND 241
|
|
||||||
#define SPC_PGRV 243
|
|
||||||
#define SPC_NGRV 244
|
|
||||||
#define SPC_PROP 246
|
|
||||||
|
|
||||||
#define DECO_DRAW 0
|
#define DECO_DRAW 0
|
||||||
#define DECO_ADD 1
|
#define DECO_ADD 1
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
#ifndef TOOLS_H_
|
|
||||||
#define TOOLS_H_
|
|
||||||
|
|
||||||
#include "ToolClasses.h"
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
@ -28,7 +28,7 @@ Element_ANAR::Element_ANAR()
|
|||||||
|
|
||||||
Temperature = R_TEMP+0.0f +273.15f;
|
Temperature = R_TEMP+0.0f +273.15f;
|
||||||
HeatConduct = 70;
|
HeatConduct = 70;
|
||||||
Description = "Very light dust. Behaves opposite gravity";
|
Description = "Anti-air. Very light dust, which behaves opposite gravity.";
|
||||||
|
|
||||||
State = ST_SOLID;
|
State = ST_SOLID;
|
||||||
Properties = TYPE_PART;
|
Properties = TYPE_PART;
|
||||||
|
@ -28,7 +28,7 @@ Element_BCOL::Element_BCOL()
|
|||||||
|
|
||||||
Temperature = R_TEMP+0.0f +273.15f;
|
Temperature = R_TEMP+0.0f +273.15f;
|
||||||
HeatConduct = 150;
|
HeatConduct = 150;
|
||||||
Description = "Broken Coal. Heavy particles. See COAL";
|
Description = "Broken Coal. Heavy particles, burns slowly.";
|
||||||
|
|
||||||
State = ST_SOLID;
|
State = ST_SOLID;
|
||||||
Properties = TYPE_PART;
|
Properties = TYPE_PART;
|
||||||
|
@ -117,6 +117,7 @@ int Element_BIZR::graphics(GRAPHICS_FUNC_ARGS)
|
|||||||
*firer = *colr/5 * fabs(cpart->vx)+fabs(cpart->vy);
|
*firer = *colr/5 * fabs(cpart->vx)+fabs(cpart->vy);
|
||||||
*pixel_mode |= FIRE_ADD;
|
*pixel_mode |= FIRE_ADD;
|
||||||
}
|
}
|
||||||
|
*pixel_mode |= PMODE_BLUR;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ Element_BMTL::Element_BMTL()
|
|||||||
|
|
||||||
Temperature = R_TEMP+0.0f +273.15f;
|
Temperature = R_TEMP+0.0f +273.15f;
|
||||||
HeatConduct = 251;
|
HeatConduct = 251;
|
||||||
Description = "Breakable metal.";
|
Description = "Breakable metal. Common conductive building material, can melt and break under pressure.";
|
||||||
|
|
||||||
State = ST_SOLID;
|
State = ST_SOLID;
|
||||||
Properties = TYPE_SOLID|PROP_CONDUCTS|PROP_LIFE_DEC|PROP_HOT_GLOW;
|
Properties = TYPE_SOLID|PROP_CONDUCTS|PROP_LIFE_DEC|PROP_HOT_GLOW;
|
||||||
|
@ -28,7 +28,7 @@ Element_BREC::Element_BREC()
|
|||||||
|
|
||||||
Temperature = R_TEMP+0.0f +273.15f;
|
Temperature = R_TEMP+0.0f +273.15f;
|
||||||
HeatConduct = 211;
|
HeatConduct = 211;
|
||||||
Description = "Broken electronics";
|
Description = "Broken electronics. Formed from EMP blasts, and when constantly sparked while under pressure, turns to EXOT.";
|
||||||
|
|
||||||
State = ST_SOLID;
|
State = ST_SOLID;
|
||||||
Properties = TYPE_PART|PROP_CONDUCTS|PROP_LIFE_DEC|PROP_HOT_GLOW;
|
Properties = TYPE_PART|PROP_CONDUCTS|PROP_LIFE_DEC|PROP_HOT_GLOW;
|
||||||
|
@ -28,7 +28,7 @@ Element_BRMT::Element_BRMT()
|
|||||||
|
|
||||||
Temperature = R_TEMP+0.0f +273.15f;
|
Temperature = R_TEMP+0.0f +273.15f;
|
||||||
HeatConduct = 211;
|
HeatConduct = 211;
|
||||||
Description = "Broken metal.";
|
Description = "Broken metal. Created when iron rusts or when when metals break from pressure.";
|
||||||
|
|
||||||
State = ST_SOLID;
|
State = ST_SOLID;
|
||||||
Properties = TYPE_PART|PROP_CONDUCTS|PROP_LIFE_DEC|PROP_HOT_GLOW;
|
Properties = TYPE_PART|PROP_CONDUCTS|PROP_LIFE_DEC|PROP_HOT_GLOW;
|
||||||
@ -40,7 +40,7 @@ Element_BRMT::Element_BRMT()
|
|||||||
LowTemperature = ITL;
|
LowTemperature = ITL;
|
||||||
LowTemperatureTransition = NT;
|
LowTemperatureTransition = NT;
|
||||||
HighTemperature = 1273.0f;
|
HighTemperature = 1273.0f;
|
||||||
HighTemperatureTransition = PT_LAVA;
|
HighTemperatureTransition = ST;
|
||||||
|
|
||||||
Update = &Element_BRMT::update;
|
Update = &Element_BRMT::update;
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ Element_CRAY::Element_CRAY()
|
|||||||
|
|
||||||
Temperature = R_TEMP+0.0f +273.15f;
|
Temperature = R_TEMP+0.0f +273.15f;
|
||||||
HeatConduct = 0;
|
HeatConduct = 0;
|
||||||
Description = "Particle Ray Emitter. Creates a beam of particles set by its ctype, range is set by tmp.";
|
Description = "Particle Ray Emitter. Creates a beam of particles set by its ctype, with a range set by tmp.";
|
||||||
|
|
||||||
State = ST_SOLID;
|
State = ST_SOLID;
|
||||||
Properties = TYPE_SOLID|PROP_LIFE_DEC;
|
Properties = TYPE_SOLID|PROP_LIFE_DEC;
|
||||||
|
@ -28,7 +28,7 @@ Element_DMG::Element_DMG()
|
|||||||
|
|
||||||
Temperature = R_TEMP-2.0f +273.15f;
|
Temperature = R_TEMP-2.0f +273.15f;
|
||||||
HeatConduct = 29;
|
HeatConduct = 29;
|
||||||
Description = "Generates damaging pressure and breaks elements it hits.";
|
Description = "Generates damaging pressure and breaks any elements it hits.";
|
||||||
|
|
||||||
State = ST_NONE;
|
State = ST_NONE;
|
||||||
Properties = TYPE_PART|PROP_LIFE_DEC|PROP_LIFE_KILL_DEC|PROP_SPARKSETTLE;
|
Properties = TYPE_PART|PROP_LIFE_DEC|PROP_LIFE_KILL_DEC|PROP_SPARKSETTLE;
|
||||||
@ -92,7 +92,7 @@ int Element_DMG::update(UPDATE_FUNC_ARGS)
|
|||||||
sim->part_change_type(rr>>8, x+nxi, y+nxj, PT_BCOL);
|
sim->part_change_type(rr>>8, x+nxi, y+nxj, PT_BCOL);
|
||||||
else if(t == PT_QRTZ)
|
else if(t == PT_QRTZ)
|
||||||
sim->part_change_type(rr>>8, x+nxi, y+nxj, PT_PQRT);
|
sim->part_change_type(rr>>8, x+nxi, y+nxj, PT_PQRT);
|
||||||
else if(t == PT_TUGN)
|
else if(t == PT_TUNG)
|
||||||
sim->part_change_type(rr>>8, x+nxi, y+nxj, PT_BRMT);
|
sim->part_change_type(rr>>8, x+nxi, y+nxj, PT_BRMT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -70,13 +70,24 @@ int Element_EXOT::update(UPDATE_FUNC_ARGS) {
|
|||||||
}
|
}
|
||||||
else if (rt == PT_LAVA)
|
else if (rt == PT_LAVA)
|
||||||
{
|
{
|
||||||
if ((parts[r>>8].ctype == PT_TTAN || parts[r>>8].ctype == PT_GOLD) && !(rand()%10))
|
if (parts[r>>8].ctype == PT_TTAN || parts[r>>8].ctype == PT_GOLD)
|
||||||
|
{
|
||||||
|
if (!(rand()%10))
|
||||||
{
|
{
|
||||||
parts[r>>8].ctype = PT_VIBR;
|
parts[r>>8].ctype = PT_VIBR;
|
||||||
sim->kill_part(i);
|
sim->kill_part(i);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (parts[r>>8].ctype == PT_VIBR)
|
||||||
|
{
|
||||||
|
if (1>rand()%1000)
|
||||||
|
{
|
||||||
|
sim->kill_part(i);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
if ((parts[i].tmp>245) && (parts[i].life>1000))
|
if ((parts[i].tmp>245) && (parts[i].life>1000))
|
||||||
if (rt!=PT_EXOT && rt!=PT_BREC && rt!=PT_DMND && rt!=PT_CLNE && rt!=PT_PRTI && rt!=PT_PRTO && rt!=PT_PCLN && rt!=PT_VOID && rt!=PT_NBHL && rt!=PT_WARP)
|
if (rt!=PT_EXOT && rt!=PT_BREC && rt!=PT_DMND && rt!=PT_CLNE && rt!=PT_PRTI && rt!=PT_PRTO && rt!=PT_PCLN && rt!=PT_VOID && rt!=PT_NBHL && rt!=PT_WARP)
|
||||||
{
|
{
|
||||||
|
@ -28,7 +28,7 @@ Element_FRAY::Element_FRAY()
|
|||||||
|
|
||||||
Temperature = 20.0f+0.0f +273.15f;
|
Temperature = 20.0f+0.0f +273.15f;
|
||||||
HeatConduct = 0;
|
HeatConduct = 0;
|
||||||
Description = "Force Emitter. Pushes or pulls objects based on its temp value, use like ARAY.";
|
Description = "Force Emitter. Pushes or pulls objects based on its temp value. Use like ARAY.";
|
||||||
|
|
||||||
State = ST_SOLID;
|
State = ST_SOLID;
|
||||||
Properties = TYPE_SOLID|PROP_LIFE_DEC;
|
Properties = TYPE_SOLID|PROP_LIFE_DEC;
|
||||||
|
@ -158,6 +158,7 @@ int Element_GEL::graphics(GRAPHICS_FUNC_ARGS)
|
|||||||
*colr = q*(32-255)/120+255;
|
*colr = q*(32-255)/120+255;
|
||||||
*colg = q*(48-186)/120+186;
|
*colg = q*(48-186)/120+186;
|
||||||
*colb = q*208/120;
|
*colb = q*208/120;
|
||||||
|
*pixel_mode |= PMODE_BLUR;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,7 +28,7 @@ Element_GUNP::Element_GUNP()
|
|||||||
|
|
||||||
Temperature = R_TEMP+0.0f +273.15f;
|
Temperature = R_TEMP+0.0f +273.15f;
|
||||||
HeatConduct = 97;
|
HeatConduct = 97;
|
||||||
Description = "Gunpowder. Light dust, explosive.";
|
Description = "Gunpowder. Light dust, explodes on contact with fire or spark.";
|
||||||
|
|
||||||
State = ST_SOLID;
|
State = ST_SOLID;
|
||||||
Properties = TYPE_PART;
|
Properties = TYPE_PART;
|
||||||
|
@ -28,7 +28,7 @@ Element_H2::Element_H2()
|
|||||||
|
|
||||||
Temperature = R_TEMP+0.0f +273.15f;
|
Temperature = R_TEMP+0.0f +273.15f;
|
||||||
HeatConduct = 251;
|
HeatConduct = 251;
|
||||||
Description = "Hydrogen. Combusts with OXYG to make WATR. Undergoes fusion at high temperature and pressure";
|
Description = "Hydrogen. Combusts with OXYG to make WATR. Undergoes fusion at high temperature and pressure.";
|
||||||
|
|
||||||
State = ST_GAS;
|
State = ST_GAS;
|
||||||
Properties = TYPE_GAS;
|
Properties = TYPE_GAS;
|
||||||
|
@ -6,7 +6,7 @@ Element_INVIS::Element_INVIS()
|
|||||||
Name = "INVS";
|
Name = "INVS";
|
||||||
Colour = PIXPACK(0x00CCCC);
|
Colour = PIXPACK(0x00CCCC);
|
||||||
MenuVisible = 1;
|
MenuVisible = 1;
|
||||||
MenuSection = SC_SOLIDS;
|
MenuSection = SC_SENSOR;
|
||||||
Enabled = 1;
|
Enabled = 1;
|
||||||
|
|
||||||
Advection = 0.0f;
|
Advection = 0.0f;
|
||||||
|
@ -28,7 +28,7 @@ Element_ISOZ::Element_ISOZ()
|
|||||||
|
|
||||||
Temperature = R_TEMP-2.0f +273.15f;
|
Temperature = R_TEMP-2.0f +273.15f;
|
||||||
HeatConduct = 29;
|
HeatConduct = 29;
|
||||||
Description = "Radioactive liquid. Decays into photons when touching PHOT or under negative pressure.";
|
Description = "Isotope-Z. Radioactive liquid, decays into photons when touching PHOT or under negative pressure.";
|
||||||
|
|
||||||
State = ST_LIQUID;
|
State = ST_LIQUID;
|
||||||
Properties = TYPE_LIQUID|PROP_NEUTPENETRATE;
|
Properties = TYPE_LIQUID|PROP_NEUTPENETRATE;
|
||||||
|
@ -28,7 +28,7 @@ Element_NICE::Element_NICE()
|
|||||||
|
|
||||||
Temperature = 35.0f;
|
Temperature = 35.0f;
|
||||||
HeatConduct = 46;
|
HeatConduct = 46;
|
||||||
Description = "Nitrogen Ice.";
|
Description = "Nitrogen Ice. Very cold, will melt into LN2 when heated only slightly.";
|
||||||
|
|
||||||
State = ST_SOLID;
|
State = ST_SOLID;
|
||||||
Properties = TYPE_SOLID;
|
Properties = TYPE_SOLID;
|
||||||
|
@ -28,7 +28,7 @@ Element_PQRT::Element_PQRT()
|
|||||||
|
|
||||||
Temperature = R_TEMP+0.0f +273.15f;
|
Temperature = R_TEMP+0.0f +273.15f;
|
||||||
HeatConduct = 3;
|
HeatConduct = 3;
|
||||||
Description = "Broken quartz.";
|
Description = "Powdered quartz, broken form of QRTZ.";
|
||||||
|
|
||||||
State = ST_SOLID;
|
State = ST_SOLID;
|
||||||
Properties = TYPE_PART| PROP_HOT_GLOW;
|
Properties = TYPE_PART| PROP_HOT_GLOW;
|
||||||
|
@ -28,7 +28,7 @@ Element_PRTI::Element_PRTI()
|
|||||||
|
|
||||||
Temperature = R_TEMP+0.0f +273.15f;
|
Temperature = R_TEMP+0.0f +273.15f;
|
||||||
HeatConduct = 0;
|
HeatConduct = 0;
|
||||||
Description = "Portal IN. Things go in here, now with temperature dependent channels (same as WIFI)";
|
Description = "Portal IN. Particles go in here. Also has temperature dependent channels (same as WIFI)";
|
||||||
|
|
||||||
State = ST_SOLID;
|
State = ST_SOLID;
|
||||||
Properties = TYPE_SOLID;
|
Properties = TYPE_SOLID;
|
||||||
|
@ -28,7 +28,7 @@ Element_PRTO::Element_PRTO()
|
|||||||
|
|
||||||
Temperature = R_TEMP+0.0f +273.15f;
|
Temperature = R_TEMP+0.0f +273.15f;
|
||||||
HeatConduct = 0;
|
HeatConduct = 0;
|
||||||
Description = "Portal OUT. Things come out here, now with temperature dependent channels (same as WIFI)";
|
Description = "Portal OUT. Particles come out here. Also has temperature dependent channels (same as WIFI)";
|
||||||
|
|
||||||
State = ST_SOLID;
|
State = ST_SOLID;
|
||||||
Properties = TYPE_SOLID;
|
Properties = TYPE_SOLID;
|
||||||
|
@ -28,7 +28,7 @@ Element_PSNS::Element_PSNS()
|
|||||||
|
|
||||||
Temperature = 277.15f;
|
Temperature = 277.15f;
|
||||||
HeatConduct = 0;
|
HeatConduct = 0;
|
||||||
Description = "Pressure sensor, creates spark when the pressure is greater than its temperature.";
|
Description = "Pressure sensor, creates a spark when the pressure is greater than its temperature.";
|
||||||
|
|
||||||
State = ST_SOLID;
|
State = ST_SOLID;
|
||||||
Properties = TYPE_SOLID;
|
Properties = TYPE_SOLID;
|
||||||
|
@ -28,7 +28,7 @@ Element_REPL::Element_REPL()
|
|||||||
|
|
||||||
Temperature = 20.0f+0.0f +273.15f;
|
Temperature = 20.0f+0.0f +273.15f;
|
||||||
HeatConduct = 0;
|
HeatConduct = 0;
|
||||||
Description = "Repels or attracts particles based on its temp value.";
|
Description = "Repels or attracts particles based on its temperature.";
|
||||||
|
|
||||||
State = ST_NONE;
|
State = ST_NONE;
|
||||||
Properties = TYPE_SOLID;
|
Properties = TYPE_SOLID;
|
||||||
|
@ -246,7 +246,7 @@ int Element_SOAP::update(UPDATE_FUNC_ARGS)
|
|||||||
int Element_SOAP::graphics(GRAPHICS_FUNC_ARGS)
|
int Element_SOAP::graphics(GRAPHICS_FUNC_ARGS)
|
||||||
|
|
||||||
{
|
{
|
||||||
*pixel_mode |= EFFECT_LINES;
|
*pixel_mode |= EFFECT_LINES|PMODE_BLUR;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -85,7 +85,7 @@ int Element_SPRK::update(UPDATE_FUNC_ARGS)
|
|||||||
nearp = sim->nearest_part(i, PT_ETRD, -1);
|
nearp = sim->nearest_part(i, PT_ETRD, -1);
|
||||||
if (nearp!=-1 && sim->parts_avg(i, nearp, PT_INSL)!=PT_INSL)
|
if (nearp!=-1 && sim->parts_avg(i, nearp, PT_INSL)!=PT_INSL)
|
||||||
{
|
{
|
||||||
sim->CreateLine(x, y, (int)(parts[nearp].x+0.5f), (int)(parts[nearp].y+0.5f), 0, 0, PT_PLSM, 0);
|
sim->CreateLine(x, y, (int)(parts[nearp].x+0.5f), (int)(parts[nearp].y+0.5f), PT_PLSM);
|
||||||
sim->part_change_type(i,x,y,ct);
|
sim->part_change_type(i,x,y,ct);
|
||||||
ct = parts[i].ctype = PT_NONE;
|
ct = parts[i].ctype = PT_NONE;
|
||||||
parts[i].life = 20;
|
parts[i].life = 20;
|
||||||
@ -158,7 +158,7 @@ int Element_SPRK::update(UPDATE_FUNC_ARGS)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case PT_TUGN:
|
case PT_TUNG:
|
||||||
if(parts[i].temp < 3595.0){
|
if(parts[i].temp < 3595.0){
|
||||||
parts[i].temp += (rand()%20)-4;
|
parts[i].temp += (rand()%20)-4;
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@ int Element_STKM::run_stickman(playerst* playerp, UPDATE_FUNC_ARGS) {
|
|||||||
parts[i].temp += 1;
|
parts[i].temp += 1;
|
||||||
|
|
||||||
//Death
|
//Death
|
||||||
if (parts[i].life<1 || (sim->pv[y/CELL][x/CELL]>=4.5f && playerp->elem != SPC_AIR) ) //If his HP is less that 0 or there is very big wind...
|
if (parts[i].life<1 || (sim->pv[y/CELL][x/CELL]>=4.5f && playerp->elem != SPC_AIR) ) //If his HP is less than 0 or there is very big wind...
|
||||||
{
|
{
|
||||||
for (r=-2; r<=1; r++)
|
for (r=-2; r<=1; r++)
|
||||||
{
|
{
|
||||||
@ -130,13 +130,13 @@ int Element_STKM::run_stickman(playerst* playerp, UPDATE_FUNC_ARGS) {
|
|||||||
float rbx = gvx;
|
float rbx = gvx;
|
||||||
float rby = gvy;
|
float rby = gvy;
|
||||||
bool rbLowGrav = false;
|
bool rbLowGrav = false;
|
||||||
float tmp = fmaxf(fabsf(rbx), fabsf(rby));
|
float tmp = fabsf(rbx) > fabsf(rby)?fabsf(rbx):fabsf(rby);
|
||||||
if (tmp < 0.001f)
|
if (tmp < 0.001f)
|
||||||
{
|
{
|
||||||
rbLowGrav = true;
|
rbLowGrav = true;
|
||||||
rbx = -parts[i].vx;
|
rbx = -parts[i].vx;
|
||||||
rby = -parts[i].vy;
|
rby = -parts[i].vy;
|
||||||
tmp = fmaxf(fabsf(rbx), fabsf(rby));
|
tmp = fabsf(rbx) > fabsf(rby)?fabsf(rbx):fabsf(rby);
|
||||||
}
|
}
|
||||||
if (tmp < 0.001f)
|
if (tmp < 0.001f)
|
||||||
{
|
{
|
||||||
@ -421,7 +421,11 @@ int Element_STKM::run_stickman(playerst* playerp, UPDATE_FUNC_ARGS) {
|
|||||||
{
|
{
|
||||||
int np = -1;
|
int np = -1;
|
||||||
if (playerp->elem == SPC_AIR)
|
if (playerp->elem == SPC_AIR)
|
||||||
sim->CreateParts(rx + 3*((((int)playerp->pcomm)&0x02) == 0x02) - 3*((((int)playerp->pcomm)&0x01) == 0x01), ry, 4, 4, SPC_AIR, 0);
|
{
|
||||||
|
for(int j = -4; j < 5; j++)
|
||||||
|
for (int k = -4; k < 5; k++)
|
||||||
|
sim->create_part(-2, rx + 3*((((int)playerp->pcomm)&0x02) == 0x02) - 3*((((int)playerp->pcomm)&0x01) == 0x01)+j, ry+k, SPC_AIR);
|
||||||
|
}
|
||||||
else if (playerp->elem==PT_LIGH && playerp->frames<30)//limit lightning creation rate
|
else if (playerp->elem==PT_LIGH && playerp->frames<30)//limit lightning creation rate
|
||||||
np = -1;
|
np = -1;
|
||||||
else
|
else
|
||||||
|
@ -28,7 +28,7 @@ Element_STOR::Element_STOR()
|
|||||||
|
|
||||||
Temperature = R_TEMP+0.0f +273.15f;
|
Temperature = R_TEMP+0.0f +273.15f;
|
||||||
HeatConduct = 0;
|
HeatConduct = 0;
|
||||||
Description = "Stores a single particle, releases when charged with PSCN, also passes to PIPE.";
|
Description = "Captures and stores a single particle. releases when charged with PSCN, also passes to PIPE.";
|
||||||
|
|
||||||
State = ST_NONE;
|
State = ST_NONE;
|
||||||
Properties = TYPE_SOLID;
|
Properties = TYPE_SOLID;
|
||||||
|
@ -28,7 +28,7 @@ Element_TESC::Element_TESC()
|
|||||||
|
|
||||||
Temperature = R_TEMP+0.0f +273.15f;
|
Temperature = R_TEMP+0.0f +273.15f;
|
||||||
HeatConduct = 251;
|
HeatConduct = 251;
|
||||||
Description = "Tesla coil!";
|
Description = "Tesla coil! Creates lightning when sparked.";
|
||||||
|
|
||||||
State = ST_SOLID;
|
State = ST_SOLID;
|
||||||
Properties = TYPE_SOLID|PROP_CONDUCTS|PROP_LIFE_DEC|PROP_HOT_GLOW;
|
Properties = TYPE_SOLID|PROP_CONDUCTS|PROP_LIFE_DEC|PROP_HOT_GLOW;
|
||||||
|
@ -28,7 +28,7 @@ Element_THDR::Element_THDR()
|
|||||||
|
|
||||||
Temperature = 9000.0f +273.15f;
|
Temperature = 9000.0f +273.15f;
|
||||||
HeatConduct = 1;
|
HeatConduct = 1;
|
||||||
Description = "Lightning! Very hot, inflicts damage upon most materials, transfers current to metals.";
|
Description = "Lightning! Very hot, inflicts damage upon most materials, and transfers current to metals.";
|
||||||
|
|
||||||
State = ST_NONE;
|
State = ST_NONE;
|
||||||
Properties = TYPE_PART;
|
Properties = TYPE_PART;
|
||||||
|
@ -29,7 +29,7 @@ Element_TTAN::Element_TTAN()
|
|||||||
|
|
||||||
Temperature = R_TEMP+0.0f +273.15f;
|
Temperature = R_TEMP+0.0f +273.15f;
|
||||||
HeatConduct = 251;
|
HeatConduct = 251;
|
||||||
Description = "Titanium, Higher melting temperature than other metals, blocks all air pressure";
|
Description = "Titanium. Higher melting temperature than most other metals, blocks all air pressure.";
|
||||||
|
|
||||||
State = ST_SOLID;
|
State = ST_SOLID;
|
||||||
Properties = TYPE_SOLID|PROP_CONDUCTS|PROP_HOT_GLOW|PROP_LIFE_DEC;
|
Properties = TYPE_SOLID|PROP_CONDUCTS|PROP_HOT_GLOW|PROP_LIFE_DEC;
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
#include "simulation/Elements.h"
|
#include "simulation/Elements.h"
|
||||||
#include "simulation/Air.h"
|
#include "simulation/Air.h"
|
||||||
//#TPT-Directive ElementClass Element_TUGN PT_TUGN 171
|
//#TPT-Directive ElementClass Element_TUNG PT_TUNG 171
|
||||||
Element_TUGN::Element_TUGN()
|
Element_TUNG::Element_TUNG()
|
||||||
{
|
{
|
||||||
Identifier = "DEFAULT_PT_TUGN";
|
Identifier = "DEFAULT_PT_TUNG";
|
||||||
Name = "TUGN";
|
Name = "TUNG";
|
||||||
Colour = PIXPACK(0x505050);
|
Colour = PIXPACK(0x505050);
|
||||||
MenuVisible = 1;
|
MenuVisible = 1;
|
||||||
MenuSection = SC_ELEC;
|
MenuSection = SC_ELEC;
|
||||||
@ -29,7 +29,7 @@ Element_TUGN::Element_TUGN()
|
|||||||
|
|
||||||
Temperature = R_TEMP+0.0f +273.15f;
|
Temperature = R_TEMP+0.0f +273.15f;
|
||||||
HeatConduct = 251;
|
HeatConduct = 251;
|
||||||
Description = "Brittle metal with a very high melting point.";
|
Description = "Tungsten. Brittle metal with a very high melting point.";
|
||||||
|
|
||||||
State = ST_SOLID;
|
State = ST_SOLID;
|
||||||
Properties = TYPE_SOLID|PROP_CONDUCTS|PROP_LIFE_DEC;
|
Properties = TYPE_SOLID|PROP_CONDUCTS|PROP_LIFE_DEC;
|
||||||
@ -45,15 +45,15 @@ Element_TUGN::Element_TUGN()
|
|||||||
/*HighTemperature = 3895.0f;
|
/*HighTemperature = 3895.0f;
|
||||||
HighTemperatureTransition = PT_LAVA;*/
|
HighTemperatureTransition = PT_LAVA;*/
|
||||||
|
|
||||||
Update = &Element_TUGN::update;
|
Update = &Element_TUNG::update;
|
||||||
Graphics = &Element_TUGN::graphics;
|
Graphics = &Element_TUNG::graphics;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MELTING_POINT 3695.0
|
#define MELTING_POINT 3695.0
|
||||||
|
|
||||||
//#TPT-Directive ElementHeader Element_TUGN static int update(UPDATE_FUNC_ARGS)
|
//#TPT-Directive ElementHeader Element_TUNG static int update(UPDATE_FUNC_ARGS)
|
||||||
int Element_TUGN::update(UPDATE_FUNC_ARGS)
|
int Element_TUNG::update(UPDATE_FUNC_ARGS)
|
||||||
{
|
{
|
||||||
bool splode = false;
|
bool splode = false;
|
||||||
if(parts[i].temp > 2400.0)
|
if(parts[i].temp > 2400.0)
|
||||||
@ -85,7 +85,7 @@ int Element_TUGN::update(UPDATE_FUNC_ARGS)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
sim->part_change_type(i, x, y, PT_LAVA);
|
sim->part_change_type(i, x, y, PT_LAVA);
|
||||||
parts[i].ctype = PT_TUGN;
|
parts[i].ctype = PT_TUNG;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
if(splode)
|
if(splode)
|
||||||
@ -101,13 +101,14 @@ int Element_TUGN::update(UPDATE_FUNC_ARGS)
|
|||||||
if (parts[i].pavg[1]-parts[i].pavg[0] > 0.50f || parts[i].pavg[1]-parts[i].pavg[0] < -0.50f)
|
if (parts[i].pavg[1]-parts[i].pavg[0] > 0.50f || parts[i].pavg[1]-parts[i].pavg[0] < -0.50f)
|
||||||
{
|
{
|
||||||
sim->part_change_type(i,x,y,PT_BRMT);
|
sim->part_change_type(i,x,y,PT_BRMT);
|
||||||
|
parts[i].ctype = PT_TUNG;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//#TPT-Directive ElementHeader Element_TUGN static int graphics(GRAPHICS_FUNC_ARGS)
|
//#TPT-Directive ElementHeader Element_TUNG static int graphics(GRAPHICS_FUNC_ARGS)
|
||||||
int Element_TUGN::graphics(GRAPHICS_FUNC_ARGS)
|
int Element_TUNG::graphics(GRAPHICS_FUNC_ARGS)
|
||||||
{
|
{
|
||||||
double startTemp = (MELTING_POINT - 1500.0);
|
double startTemp = (MELTING_POINT - 1500.0);
|
||||||
double tempOver = (((cpart->temp - startTemp)/1500.0)*M_PI) - (M_PI/2.0);
|
double tempOver = (((cpart->temp - startTemp)/1500.0)*M_PI) - (M_PI/2.0);
|
||||||
@ -129,4 +130,4 @@ int Element_TUGN::graphics(GRAPHICS_FUNC_ARGS)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
Element_TUGN::~Element_TUGN() {}
|
Element_TUNG::~Element_TUNG() {}
|
@ -28,7 +28,7 @@ Element_WTRV::Element_WTRV()
|
|||||||
|
|
||||||
Temperature = R_TEMP+100.0f+273.15f;
|
Temperature = R_TEMP+100.0f+273.15f;
|
||||||
HeatConduct = 48;
|
HeatConduct = 48;
|
||||||
Description = "Steam, heats up air, produced from hot water.";
|
Description = "Steam. Produced from hot water.";
|
||||||
|
|
||||||
State = ST_GAS;
|
State = ST_GAS;
|
||||||
Properties = TYPE_GAS;
|
Properties = TYPE_GAS;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include "simulation/Tools.h"
|
#include "ToolClasses.h"
|
||||||
#include "simulation/Air.h"
|
#include "simulation/Air.h"
|
||||||
//#TPT-Directive ToolClass Tool_Air TOOL_AIR 3
|
//#TPT-Directive ToolClass Tool_Air TOOL_AIR 3
|
||||||
Tool_Air::Tool_Air()
|
Tool_Air::Tool_Air()
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include "simulation/Tools.h"
|
#include "ToolClasses.h"
|
||||||
//#TPT-Directive ToolClass Tool_Cool TOOL_COOL 1
|
//#TPT-Directive ToolClass Tool_Cool TOOL_COOL 1
|
||||||
Tool_Cool::Tool_Cool()
|
Tool_Cool::Tool_Cool()
|
||||||
{
|
{
|
||||||
@ -12,6 +12,9 @@ int Tool_Cool::Perform(Simulation * sim, Particle * cpart, int x, int y, float s
|
|||||||
{
|
{
|
||||||
if(!cpart)
|
if(!cpart)
|
||||||
return 0;
|
return 0;
|
||||||
|
if (cpart->type == PT_PUMP || cpart->type == PT_GPMP)
|
||||||
|
cpart->temp -= .1f*strength;
|
||||||
|
else
|
||||||
cpart->temp -= strength;
|
cpart->temp -= strength;
|
||||||
if(cpart->temp > MAX_TEMP)
|
if(cpart->temp > MAX_TEMP)
|
||||||
cpart->temp = MAX_TEMP;
|
cpart->temp = MAX_TEMP;
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
#include "simulation/Tools.h"
|
|
||||||
#include "simulation/Simulation.h"
|
|
||||||
//#TPT-Directive ToolClass Tool_Grav TOOL_GRAV 4
|
|
||||||
Tool_Grav::Tool_Grav()
|
|
||||||
{
|
|
||||||
Identifier = "DEFAULT_TOOL_GRAV";
|
|
||||||
Name = "GRAV";
|
|
||||||
Colour = PIXPACK(0xCCCCFF);
|
|
||||||
Description = "Creates a short-lasting gravity well";
|
|
||||||
}
|
|
||||||
|
|
||||||
int Tool_Grav::Perform(Simulation * sim, Particle * cpart, int x, int y, float strength)
|
|
||||||
{
|
|
||||||
sim->gravmap[((y/CELL)*(XRES/CELL))+(x/CELL)] += 0.03f*strength;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
Tool_Grav::~Tool_Grav() {}
|
|
@ -1,4 +1,4 @@
|
|||||||
#include "simulation/Tools.h"
|
#include "ToolClasses.h"
|
||||||
//#TPT-Directive ToolClass Tool_Heat TOOL_HEAT 0
|
//#TPT-Directive ToolClass Tool_Heat TOOL_HEAT 0
|
||||||
Tool_Heat::Tool_Heat()
|
Tool_Heat::Tool_Heat()
|
||||||
{
|
{
|
||||||
@ -12,6 +12,9 @@ int Tool_Heat::Perform(Simulation * sim, Particle * cpart, int x, int y, float s
|
|||||||
{
|
{
|
||||||
if(!cpart)
|
if(!cpart)
|
||||||
return 0;
|
return 0;
|
||||||
|
if (cpart->type == PT_PUMP || cpart->type == PT_GPMP)
|
||||||
|
cpart->temp += .1f*strength;
|
||||||
|
else
|
||||||
cpart->temp += strength;
|
cpart->temp += strength;
|
||||||
if(cpart->temp > MAX_TEMP)
|
if(cpart->temp > MAX_TEMP)
|
||||||
cpart->temp = MAX_TEMP;
|
cpart->temp = MAX_TEMP;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include "simulation/Tools.h"
|
#include "ToolClasses.h"
|
||||||
#include "simulation/Simulation.h"
|
#include "simulation/Simulation.h"
|
||||||
//#TPT-Directive ToolClass Tool_NGrv TOOL_NGRV 5
|
//#TPT-Directive ToolClass Tool_NGrv TOOL_NGRV 5
|
||||||
Tool_NGrv::Tool_NGrv()
|
Tool_NGrv::Tool_NGrv()
|
||||||
|
18
src/simulation/tools/PGrv.cpp
Normal file
18
src/simulation/tools/PGrv.cpp
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#include "ToolClasses.h"
|
||||||
|
#include "simulation/Simulation.h"
|
||||||
|
//#TPT-Directive ToolClass Tool_PGrv TOOL_PGRV 4
|
||||||
|
Tool_PGrv::Tool_PGrv()
|
||||||
|
{
|
||||||
|
Identifier = "DEFAULT_TOOL_PGRV";
|
||||||
|
Name = "PGRV";
|
||||||
|
Colour = PIXPACK(0xCCCCFF);
|
||||||
|
Description = "Creates a short-lasting gravity well";
|
||||||
|
}
|
||||||
|
|
||||||
|
int Tool_PGrv::Perform(Simulation * sim, Particle * cpart, int x, int y, float strength)
|
||||||
|
{
|
||||||
|
sim->gravmap[((y/CELL)*(XRES/CELL))+(x/CELL)] += 0.03f*strength;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Tool_PGrv::~Tool_PGrv() {}
|
@ -1,5 +1,5 @@
|
|||||||
#include "simulation/Element.h"
|
#include "simulation/Element.h"
|
||||||
#include "simulation/Tools.h"
|
#include "ToolClasses.h"
|
||||||
|
|
||||||
SimTool::SimTool():
|
SimTool::SimTool():
|
||||||
Identifier("DEFAULT_TOOL_INVALID"),
|
Identifier("DEFAULT_TOOL_INVALID"),
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
#include "simulation/Tools.h"
|
#include "ToolClasses.h"
|
||||||
#include "simulation/Air.h"
|
#include "simulation/Air.h"
|
||||||
//#TPT-Directive ToolClass Tool_Vac TOOL_VAC 2
|
//#TPT-Directive ToolClass Tool_Vac TOOL_VAC 2
|
||||||
Tool_Vac::Tool_Vac()
|
Tool_Vac::Tool_Vac()
|
||||||
@ -6,7 +6,7 @@ Tool_Vac::Tool_Vac()
|
|||||||
Identifier = "DEFAULT_TOOL_VAC";
|
Identifier = "DEFAULT_TOOL_VAC";
|
||||||
Name = "VAC";
|
Name = "VAC";
|
||||||
Colour = PIXPACK(0x303030);
|
Colour = PIXPACK(0x303030);
|
||||||
Description = "Removes air pressure";
|
Description = "Reduces air pressure";
|
||||||
}
|
}
|
||||||
|
|
||||||
int Tool_Vac::Perform(Simulation * sim, Particle * cpart, int x, int y, float strength)
|
int Tool_Vac::Perform(Simulation * sim, Particle * cpart, int x, int y, float strength)
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#ifdef LUACONSOLE
|
||||||
// socket.lua from luasocket compiled into a cpp file
|
// socket.lua from luasocket compiled into a cpp file
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include "lua.h"
|
#include "lua.h"
|
||||||
@ -10,3 +11,4 @@ void luaopen_socket(lua_State *l){
|
|||||||
luaL_loadbuffer(l, socket_luac, socket_luac_sz, "@builtin socket.lua");
|
luaL_loadbuffer(l, socket_luac, socket_luac_sz, "@builtin socket.lua");
|
||||||
lua_call(l, 0, 0);
|
lua_call(l, 0, 0);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
Reference in New Issue
Block a user