#pragma once #include #include #include #include #include #include #include "Noise.h" #include "TypeRegistry.h" class Chunk; class JExpressionMemory; class JExpressionMemory : public virtual Framework::ReferenceCounter { private: Framework::RCTrie noises; Framework::Trie floatVariables; Framework::Trie boolVariables; Chunk* currentChunk; Framework::Critical cs; public: JExpressionMemory(); ~JExpressionMemory(); void lock(); void unlock(); float getNoise(Framework::Text name, float x, float y, float z) const; void setNoise(Framework::Text name, Noise* noise); void setCurrentChunk(Chunk* chunk); float getFloatVariable(Framework::Text name) const; void setFloatVariable(Framework::Text name, float value); bool getBoolVariable(Framework::Text name) const; void setBoolVariable(Framework::Text name, bool value); Chunk* zCurrentChunk(); }; class JFloatExpression : public virtual Framework::ReferenceCounter { private: public: JFloatExpression(); virtual float getValue(JExpressionMemory* zMemory) = 0; }; class JBoolExpression : public virtual Framework::ReferenceCounter { private: public: JBoolExpression(); virtual bool getValue(JExpressionMemory* zMemory) = 0; }; class JVariableFloatExpression : public JFloatExpression { private: Framework::Text name; public: JVariableFloatExpression(); float getValue(JExpressionMemory* zMemory) override; void setName(Framework::Text name); Framework::Text getName() const; }; class JVariableFloatExpressionFactory : public SubTypeFactory { public: JVariableFloatExpressionFactory(); JVariableFloatExpression* createValue( Framework::JSON::JSONObject* zJson) const override; void fromJson(JVariableFloatExpression* zResult, Framework::JSON::JSONObject* zJson) const override; void toJson(JVariableFloatExpression* zObject, Framework::JSON::JSONObject* zResult) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; Framework::Text getTypeToken() const override; }; class JVariableBoolExpression : public JBoolExpression { private: Framework::Text name; public: JVariableBoolExpression(); bool getValue(JExpressionMemory* zMemory) override; void setName(Framework::Text name); Framework::Text getName() const; }; class JVariableBoolExpressionFactory : public SubTypeFactory { public: JVariableBoolExpressionFactory(); JVariableBoolExpression* createValue( Framework::JSON::JSONObject* zJson) const override; void fromJson(JVariableBoolExpression* zResult, Framework::JSON::JSONObject* zJson) const override; void toJson(JVariableBoolExpression* zObject, Framework::JSON::JSONObject* zResult) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; Framework::Text getTypeToken() const override; }; class JConstantFloatExpression : public JFloatExpression { private: float value; public: JConstantFloatExpression(); float getValue(JExpressionMemory* zMemory) override; void setValue(float value); float getValue() const; }; class JConstantFloatExpressionFactory : public SubTypeFactory { public: JConstantFloatExpressionFactory(); JConstantFloatExpression* createValue( Framework::JSON::JSONObject* zJson) const override; void fromJson(JConstantFloatExpression* zResult, Framework::JSON::JSONObject* zJson) const override; void toJson(JConstantFloatExpression* zObject, Framework::JSON::JSONObject* zResult) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; Framework::Text getTypeToken() const override; }; class JConstantBoolExpression : public JBoolExpression { private: bool value; public: JConstantBoolExpression(); bool getValue(JExpressionMemory* zMemory) override; void setValue(bool value); bool getValue() const; }; class JConstantBoolExpressionFactory : public SubTypeFactory { public: JConstantBoolExpressionFactory(); JConstantBoolExpression* createValue( Framework::JSON::JSONObject* zJson) const override; void fromJson(JConstantBoolExpression* zResult, Framework::JSON::JSONObject* zJson) const override; void toJson(JConstantBoolExpression* zObject, Framework::JSON::JSONObject* zResult) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; Framework::Text getTypeToken() const override; }; class JNoiseFloatExpression : public JFloatExpression { private: Framework::Text name; JFloatExpression* x; JFloatExpression* y; JFloatExpression* z; public: JNoiseFloatExpression(); ~JNoiseFloatExpression(); float getValue(JExpressionMemory* zMemory) override; void setName(Framework::Text name); Framework::Text getName() const; void setX(JFloatExpression* x); JFloatExpression* zX() const; void setY(JFloatExpression* y); JFloatExpression* zY() const; void setZ(JFloatExpression* z); JFloatExpression* zZ() const; }; class JNoiseFloatExpressionFactory : public SubTypeFactory { public: JNoiseFloatExpressionFactory(); JNoiseFloatExpression* createValue( Framework::JSON::JSONObject* zJson) const override; void fromJson(JNoiseFloatExpression* zResult, Framework::JSON::JSONObject* zJson) const override; void toJson(JNoiseFloatExpression* zObject, Framework::JSON::JSONObject* zResult) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; Framework::Text getTypeToken() const override; }; class JOperatorFloatExpression : public JFloatExpression { private: Framework::Text op; std::function accumulator; Framework::RCArray values; public: JOperatorFloatExpression(); float getValue(JExpressionMemory* zMemory) override; void setOperator( Framework::Text op, std::function accumulator); Framework::Text getOperator(); void addValue(JFloatExpression* value); const Framework::RCArray& getValues() const; }; class JOperatorFloatExpressionFactory : public SubTypeFactory { public: JOperatorFloatExpressionFactory(); JOperatorFloatExpression* createValue( Framework::JSON::JSONObject* zJson) const override; void fromJson(JOperatorFloatExpression* zResult, Framework::JSON::JSONObject* zJson) const override; void toJson(JOperatorFloatExpression* zObject, Framework::JSON::JSONObject* zResult) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; Framework::Text getTypeToken() const override; }; class JBoolOperatorBoolExpression : public JBoolExpression { private: Framework::Text op; std::function accumulator; Framework::RCArray values; public: JBoolOperatorBoolExpression(); bool getValue(JExpressionMemory* zMemory) override; void setOperator( Framework::Text op, std::function accumulator); Framework::Text getOperator(); void addValue(JBoolExpression* value); const Framework::RCArray& getValues() const; }; class JBoolOperatorBoolExpressionFactory : public SubTypeFactory { public: JBoolOperatorBoolExpressionFactory(); JBoolOperatorBoolExpression* createValue( Framework::JSON::JSONObject* zJson) const override; void fromJson(JBoolOperatorBoolExpression* zResult, Framework::JSON::JSONObject* zJson) const override; void toJson(JBoolOperatorBoolExpression* zObject, Framework::JSON::JSONObject* zResult) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; Framework::Text getTypeToken() const override; }; class JFloatOperatorBoolExpression : public JBoolExpression { private: Framework::Text op; std::function accumulator; Framework::RCArray values; public: JFloatOperatorBoolExpression(); bool getValue(JExpressionMemory* zMemory) override; void setOperator( Framework::Text op, std::function accumulator); Framework::Text getOperator(); void addValue(JFloatExpression* value); const Framework::RCArray& getValues() const; }; class JFloatOperatorBoolExpressionFactory : public SubTypeFactory { public: JFloatOperatorBoolExpressionFactory(); JFloatOperatorBoolExpression* createValue( Framework::JSON::JSONObject* zJson) const override; void fromJson(JFloatOperatorBoolExpression* zResult, Framework::JSON::JSONObject* zJson) const override; void toJson(JFloatOperatorBoolExpression* zObject, Framework::JSON::JSONObject* zResult) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; Framework::Text getTypeToken() const override; }; class JBlockTypeBoolExpression : public JBoolExpression { private: int typeId; JFloatExpression* x; JFloatExpression* y; JFloatExpression* z; public: JBlockTypeBoolExpression(); ~JBlockTypeBoolExpression(); bool getValue(JExpressionMemory* zMemory) override; void setTypeId(int typeId); int getTypeId() const; void setX(JFloatExpression* x); JFloatExpression* zX() const; void setY(JFloatExpression* y); JFloatExpression* zY() const; void setZ(JFloatExpression* z); JFloatExpression* zZ() const; }; class JBlockTypeBoolExpressionFactory : public SubTypeFactory { public: JBlockTypeBoolExpressionFactory(); JBlockTypeBoolExpression* createValue( Framework::JSON::JSONObject* zJson) const override; void fromJson(JBlockTypeBoolExpression* zResult, Framework::JSON::JSONObject* zJson) const override; void toJson(JBlockTypeBoolExpression* zObject, Framework::JSON::JSONObject* zResult) const override; JSONObjectValidationBuilder* addToValidator( JSONObjectValidationBuilder* builder) const override; Framework::Text getTypeToken() const override; };