[759] | 1 | // This file is a part of Framsticks SDK. http://www.framsticks.com/ |
---|
| 2 | // Copyright (C) 1999-2018 Maciej Komosinski and Szymon Ulatowski. |
---|
| 3 | // See LICENSE.txt for details. |
---|
| 4 | |
---|
| 5 | #ifndef _GENEPROPS_H |
---|
| 6 | #define _GENEPROPS_H |
---|
| 7 | |
---|
| 8 | #include <common/nonstd_math.h> |
---|
| 9 | #include <frams/model/model.h> |
---|
| 10 | |
---|
| 11 | /** |
---|
| 12 | * Contains physical, biological and other properties of |
---|
| 13 | * stick, except for rotation. The constructor initializes properties of sticks with |
---|
| 14 | * default values. In order to change a property of a stick, the executeModifier() method |
---|
| 15 | * should be called. Modification of length, curvedness and twist properties |
---|
| 16 | * usually affects further sticks, so new sticks should have properties of |
---|
| 17 | * parents (prop) modified with the prop.propagateAlong() method. |
---|
| 18 | * "Biological" properties (assimilation, stamina, muscle strength and |
---|
| 19 | * ingestion) should be normalized after modification with normalizeBiol4(). |
---|
| 20 | */ |
---|
| 21 | struct GeneProps |
---|
| 22 | { |
---|
| 23 | public: |
---|
| 24 | double length; ///<incremented by L, decremented by l. Physical property, length of stick |
---|
| 25 | double curvedness; ///<incremented by C, decremented by c. Curvedness of sticks |
---|
| 26 | double weight; ///<incremented by W, decremented by w. Physical property, weight of stick (in water environment light sticks swim on the surface) |
---|
| 27 | double friction; ///<incremented by F, decremented by f. Physical property, friction of a stick (sticks will slide on the ground or stick to it) |
---|
| 28 | |
---|
| 29 | double muscle_power; ///<incremented by M, decremented by m. Biological property, muscle strength (muscle speed). Strong muscles act with bigger force, gain higher speed, can resist bigger stress, and use more energy |
---|
| 30 | double assimilation; ///<incremented by A, decremented by a. Biological property, assimilation, photosynthesis (a vertical stick can assimilate twice as much as horizontal one) |
---|
| 31 | double stamina; ///<incremented by S, decremented by s. Biological property, stamina (increases chance of survival during fights) |
---|
| 32 | double ingestion; ///<incremented by I, decremented by i. Biological property, ingestion (ability to gain energy from food) |
---|
| 33 | |
---|
| 34 | double twist; ///<incremented by Q, decremented by q. Twist of a stick |
---|
| 35 | double energy; ///<incremented by E, decremented by e. Energy of a creature |
---|
| 36 | |
---|
| 37 | double muscle_bend_range; ///<Used only by conv_f1 |
---|
| 38 | bool muscle_reset_range; ///<Used only by conv_f1 |
---|
| 39 | |
---|
| 40 | double visual_size; ///<incremented by H, decremented by h. Part's visual size, only affects appearance |
---|
| 41 | double cred; ///<incremented by D, decremented by d. Part's red color proportion |
---|
| 42 | double cgreen; ///<incremented by B, decremented by b. Part's blue color proportion |
---|
| 43 | double cblue; ///<incremented by G, decremented by g. Part's green color proportion |
---|
| 44 | |
---|
| 45 | static GeneProps standard_values; |
---|
| 46 | |
---|
| 47 | /** |
---|
| 48 | * Constructor initializing all properties with default values. |
---|
| 49 | */ |
---|
| 50 | GeneProps(); |
---|
| 51 | |
---|
| 52 | /** |
---|
| 53 | * Normalizes biological properties (muscle_power, |
---|
| 54 | * assimilation, stamina, and ingestion). This method is called in |
---|
| 55 | * executeModifier() when any of the biological properties is modified. All values |
---|
| 56 | * of those properties sum up to 1. |
---|
| 57 | */ |
---|
| 58 | void normalizeBiol4(); |
---|
| 59 | |
---|
| 60 | /** |
---|
| 61 | * Checks whether the given character is property modifier. If yes, the property |
---|
| 62 | * is modified and properties are normalized when needed. |
---|
| 63 | * @param modif character that might be a property modifier |
---|
| 64 | * @return 0 if the provided character was property modifier, -1 otherwise |
---|
| 65 | */ |
---|
| 66 | int executeModifier(char modif); |
---|
| 67 | |
---|
| 68 | /** |
---|
| 69 | * Adjusts current properties for the next stick. In order to set |
---|
| 70 | * new properties to the created stick, the copy of the previous stick should be created, |
---|
| 71 | * and propagateAlong() should be used for that copy. |
---|
| 72 | * @param use_reset_range true if this method should modify muscle_bend_range (used in f1 conversion). |
---|
| 73 | */ |
---|
| 74 | void propagateAlong(bool use_f1_muscle_reset_range); |
---|
| 75 | }; |
---|
| 76 | |
---|
| 77 | #endif // _GENEPROPS_H |
---|