obstacle crash event

This commit is contained in:
milek7
2019-04-09 13:04:25 +02:00
parent 3de12ed827
commit a4bd25d47c
5 changed files with 51 additions and 0 deletions

View File

@@ -589,6 +589,9 @@ public:
bool
insert( TEventLauncher *Launcher ) {
return m_launchers.insert( Launcher ); }
inline void purge (TEventLauncher *Launcher) {
m_launchers.purge(Launcher);
}
// returns first event in the queue
inline
basic_event *
@@ -603,6 +606,9 @@ public:
// legacy method, returns pointer to specified event, or null
basic_event *
FindEvent( std::string const &Name );
inline TEventLauncher* FindEventlauncher(std::string const &Name) {
return m_launchers.find(Name);
}
// legacy method, inserts specified event in the event query
bool
AddToQuery( basic_event *Event, TDynamicObject const *Owner, double delay = 0.0 );

View File

@@ -188,10 +188,12 @@ void state_manager::process_commands() {
std::getline(ss, data, ':');
simulation::State.create_model(data, name, commanddata.location);
simulation::State.create_eventlauncher("node -1 0 launcher eventlauncher 0 0 0 20 none -0.1 obstacle_collision end", name + "_snd", commanddata.location);
}
if (commanddata.command == user_command::deletemodel) {
simulation::State.delete_model(simulation::Instances.find(commanddata.payload));
simulation::State.delete_eventlauncher(simulation::Events.FindEventlauncher(commanddata.payload + "_snd"));
}
if (commanddata.command == user_command::radiostop) {
@@ -288,11 +290,19 @@ TAnimModel * state_manager::create_model(const std::string &src, const std::stri
return m_serializer.create_model(src, name, position);
}
TEventLauncher * state_manager::create_eventlauncher(const std::string &src, const std::string &name, const glm::dvec3 &position) {
return m_serializer.create_eventlauncher(src, name, position);
}
void state_manager::delete_model(TAnimModel *model) {
Region->erase(model);
Instances.purge(model);
}
void state_manager::delete_eventlauncher(TEventLauncher *launcher) {
launcher->dRadius = 0.0f; // disable it
}
void
state_manager::update_clocks() {

View File

@@ -41,9 +41,15 @@ public:
// create model from node string
TAnimModel *
create_model(const std::string &src, const std::string &name, const glm::dvec3 &position);
// create eventlauncher from node string
TEventLauncher *
create_eventlauncher(const std::string &src, const std::string &name, const glm::dvec3 &position);
// delete TAnimModel instance
void
delete_model(TAnimModel *model);
// delete TEventLauncher instance
void
delete_eventlauncher(TEventLauncher *launcher);
private:
// members

View File

@@ -1049,6 +1049,33 @@ TAnimModel *state_serializer::create_model(const std::string &src, const std::st
return cloned;
}
TEventLauncher *state_serializer::create_eventlauncher(const std::string &src, const std::string &name, const glm::dvec3 &position) {
cParser parser(src);
parser.getTokens(); // "node"
parser.getTokens(2); // ranges
scene::node_data nodedata;
parser >> nodedata.range_max >> nodedata.range_min;
parser.getTokens(2); // name, type
nodedata.name = name;
nodedata.type = "eventlauncher";
scene::scratch_data scratch;
TEventLauncher *launcher = deserialize_eventlauncher(parser, scratch, nodedata);
if (!launcher)
return nullptr;
launcher->Event1 = simulation::Events.FindEvent( launcher->asEvent1Name );
launcher->location(position);
simulation::Events.insert(launcher);
simulation::Region->insert(launcher);
return launcher;
}
void
state_serializer::export_nodes_to_stream(std::ostream &scmfile, bool Dirty) const {
// groups

View File

@@ -43,6 +43,8 @@ public:
export_as_text(std::string const &Scenariofile) const;
// create new model from node stirng
TAnimModel * create_model(std::string const &src, std::string const &name, const glm::dvec3 &position);
// create new eventlauncher from node stirng
TEventLauncher * create_eventlauncher(std::string const &src, std::string const &name, const glm::dvec3 &position);
private:
// methods