This repository has been archived on 2025-03-20. You can view files and clone it, but cannot push or open issues or pull requests.
The-Powder-Toy/src/simulation/Element.h
2023-04-05 14:11:37 +02:00

82 lines
2.1 KiB
C++

#pragma once
#include <memory>
#include "common/Vec2.h"
#include "graphics/Pixel.h"
#include "ElementDefs.h"
#include "Particle.h"
#include "StructProperty.h"
class Simulation;
class Renderer;
class VideoBuffer;
struct Particle;
class Element
{
public:
ByteString Identifier;
String Name;
pixel Colour;
int MenuVisible;
int MenuSection;
int Enabled;
float Advection;
float AirDrag;
float AirLoss;
float Loss;
float Collision;
float Gravity;
float NewtonianGravity;
float Diffusion;
float HotAir;
int Falldown;
int Flammable;
int Explosive;
int Meltable;
int Hardness;
// Photon wavelengths are ANDed with this value when a photon hits an element, meaning that only wavelengths present in both this value and the original photon will remain in the reflected photon
unsigned int PhotonReflectWavelengths;
int Weight;
unsigned char HeatConduct;
String Description;
unsigned int Properties;
unsigned int CarriesTypeIn;
float LowPressure;
int LowPressureTransition;
float HighPressure;
int HighPressureTransition;
float LowTemperature;
int LowTemperatureTransition;
float HighTemperature;
int HighTemperatureTransition;
int (*Update) (UPDATE_FUNC_ARGS);
int (*Graphics) (GRAPHICS_FUNC_ARGS);
void (*Create)(ELEMENT_CREATE_FUNC_ARGS) = nullptr;
bool (*CreateAllowed)(ELEMENT_CREATE_ALLOWED_FUNC_ARGS) = nullptr;
void (*ChangeType)(ELEMENT_CHANGETYPE_FUNC_ARGS) = nullptr;
bool (*CtypeDraw) (CTYPEDRAW_FUNC_ARGS);
std::unique_ptr<VideoBuffer> (*IconGenerator)(int, Vec2<int>);
Particle DefaultProperties;
Element();
static int defaultGraphics(GRAPHICS_FUNC_ARGS);
static int legacyUpdate(UPDATE_FUNC_ARGS);
static bool basicCtypeDraw(CTYPEDRAW_FUNC_ARGS);
static bool ctypeDrawVInTmp(CTYPEDRAW_FUNC_ARGS);
static bool ctypeDrawVInCtype(CTYPEDRAW_FUNC_ARGS);
/** Returns a list of properties, their type and offset within the structure that can be changed
by higher-level processes referring to them by name such as Lua or the property tool **/
static std::vector<StructProperty> const &GetProperties();
#define ELEMENT_NUMBERS_DECLARE
#include "ElementNumbers.h"
#undef ELEMENT_NUMBERS_DECLARE
};