mirror of
https://github.com/4ian/GDevelop.git
synced 2025-10-15 10:19:04 +00:00

This is done by given unique identifiers to "Trigger Once" conditions (stable given the same object in memory) and events list function names (stable given events with same content). This avoids useless hot-reloading and re-triggering Trigger Once conditions after a hot-reloading. Don't show in changelog
72 lines
2.1 KiB
C++
72 lines
2.1 KiB
C++
/*
|
|
* GDevelop Core
|
|
* Copyright 2008-2016 Florian Rival (Florian.Rival@gmail.com). All rights
|
|
* reserved. This project is released under the MIT License.
|
|
*/
|
|
#include "GDCore/Events/Instruction.h"
|
|
|
|
#include <assert.h>
|
|
|
|
#include <iostream>
|
|
#include <vector>
|
|
|
|
#include "GDCore/Events/Expression.h"
|
|
#include "GDCore/Events/InstructionsList.h"
|
|
#include "GDCore/String.h"
|
|
|
|
namespace gd {
|
|
|
|
gd::Expression Instruction::badExpression("");
|
|
|
|
Instruction::Instruction(gd::String type_) : type(type_), inverted(false) {
|
|
parameters.reserve(8);
|
|
}
|
|
|
|
Instruction::Instruction(gd::String type_,
|
|
const std::vector<gd::Expression>& parameters_,
|
|
bool inverted_)
|
|
: type(type_), inverted(inverted_), parameters(parameters_) {
|
|
parameters.reserve(8);
|
|
}
|
|
|
|
const gd::Expression& Instruction::GetParameter(std::size_t index) const {
|
|
if (index >= parameters.size()) return badExpression;
|
|
|
|
return parameters[index];
|
|
}
|
|
|
|
gd::Expression& Instruction::GetParameter(std::size_t index) {
|
|
if (index >= parameters.size()) return badExpression;
|
|
|
|
return parameters[index];
|
|
}
|
|
|
|
void Instruction::SetParametersCount(std::size_t size) {
|
|
while (size < parameters.size())
|
|
parameters.erase(parameters.begin() + parameters.size() - 1);
|
|
while (size > parameters.size()) parameters.push_back(gd::Expression(""));
|
|
}
|
|
|
|
void Instruction::SetParameter(std::size_t nb, const gd::Expression& val) {
|
|
if (nb >= parameters.size()) {
|
|
std::cout << "Trying to write an out of bound parameter.\n\n" << std::endl;
|
|
return;
|
|
}
|
|
parameters[nb] = val;
|
|
}
|
|
|
|
std::shared_ptr<Instruction> GD_CORE_API
|
|
CloneRememberingOriginalElement(std::shared_ptr<Instruction> instruction) {
|
|
std::shared_ptr<Instruction> copy =
|
|
std::make_shared<Instruction>(*instruction);
|
|
// Original instruction is either the original instruction of the copied
|
|
// instruction, or the instruction copied.
|
|
copy->originalInstruction = instruction->originalInstruction.expired()
|
|
? instruction
|
|
: instruction->originalInstruction;
|
|
|
|
return copy;
|
|
}
|
|
|
|
} // namespace gd
|