Commit 5ab55c3e by MCMic

Moved proportions system in a PersonType class

Still buggy
parent ad6e136b
......@@ -84,18 +84,7 @@ static void set_proportion(int pnum, const char* args)
sscanf(args, "%f%f%f%f", &headprop, &bodyprop, &armprop, &legprop);
if (Person::players[pnum]->creature == wolftype) {
Person::players[pnum]->proportionhead = 1.1 * headprop;
Person::players[pnum]->proportionbody = 1.1 * bodyprop;
Person::players[pnum]->proportionarms = 1.1 * armprop;
Person::players[pnum]->proportionlegs = 1.1 * legprop;
} else if (Person::players[pnum]->creature == rabbittype) {
Person::players[pnum]->proportionhead = 1.2 * headprop;
Person::players[pnum]->proportionbody = 1.05 * bodyprop;
Person::players[pnum]->proportionarms = 1.00 * armprop;
Person::players[pnum]->proportionlegs = 1.1 * legprop;
Person::players[pnum]->proportionlegs.y = 1.05 * legprop;
}
Person::players[pnum]->setProportions(headprop, bodyprop, armprop, legprop);
}
static void set_protection(int pnum, const char* args)
......@@ -291,22 +280,7 @@ void ch_save(const char* args)
fpackf(tfile, "Bf Bf Bf", Person::players[j]->protectionhead, Person::players[j]->protectionhigh, Person::players[j]->protectionlow);
fpackf(tfile, "Bf Bf Bf", Person::players[j]->metalhead, Person::players[j]->metalhigh, Person::players[j]->metallow);
fpackf(tfile, "Bf Bf", Person::players[j]->power, Person::players[j]->speedmult);
float headprop, bodyprop, armprop, legprop;
if (Person::players[j]->creature == wolftype) {
headprop = Person::players[j]->proportionhead.x / 1.1;
bodyprop = Person::players[j]->proportionbody.x / 1.1;
armprop = Person::players[j]->proportionarms.x / 1.1;
legprop = Person::players[j]->proportionlegs.x / 1.1;
} else {
// rabbittype
headprop = Person::players[j]->proportionhead.x / 1.2;
bodyprop = Person::players[j]->proportionbody.x / 1.05;
armprop = Person::players[j]->proportionarms.x / 1.00;
legprop = Person::players[j]->proportionlegs.x / 1.1;
}
fpackf(tfile, "Bf Bf Bf Bf", headprop, bodyprop, armprop, legprop);
fpackf(tfile, "Bf Bf Bf Bf", Person::players[j]->getProportion(0), Person::players[j]->getProportion(1), Person::players[j]->getProportion(2), Person::players[j]->getProportion(3));
fpackf(tfile, "Bi", Person::players[j]->numclothes);
if (Person::players[j]->numclothes) {
......@@ -472,14 +446,6 @@ void ch_belt(const char*)
void ch_cellophane(const char*)
{
cellophane = !cellophane;
float mul = (cellophane ? 0 : 1);
for (auto player : Person::players) {
player->proportionhead.z = player->proportionhead.x * mul;
player->proportionbody.z = player->proportionbody.x * mul;
player->proportionarms.z = player->proportionarms.x * mul;
player->proportionlegs.z = player->proportionlegs.x * mul;
}
}
void ch_funnybunny(const char*)
......@@ -678,18 +644,7 @@ void ch_default(const char*)
Person::players[0]->speedmult = 1;
Person::players[0]->scale = 1;
if (Person::players[0]->creature == wolftype) {
Person::players[0]->proportionhead = 1.1;
Person::players[0]->proportionbody = 1.1;
Person::players[0]->proportionarms = 1.1;
Person::players[0]->proportionlegs = 1.1;
} else if (Person::players[0]->creature == rabbittype) {
Person::players[0]->proportionhead = 1.2;
Person::players[0]->proportionbody = 1.05;
Person::players[0]->proportionarms = 1.00;
Person::players[0]->proportionlegs = 1.1;
Person::players[0]->proportionlegs.y = 1.05;
}
Person::players[0]->setProportions(1, 1, 1, 1);
Person::players[0]->numclothes = 0;
Person::players[0]->skeleton.drawmodel.textureptr.load(
......
......@@ -602,6 +602,8 @@ void Game::InitGame()
Menu::Load();
Animation::loadAll();
PersonType::Load();
}
void Game::LoadScreenTexture()
......
......@@ -851,11 +851,7 @@ bool Game::LoadLevel(const std::string& name, bool tutorial)
Person::players[i]->updatedelay = 0;
Person::players[i]->normalsupdatedelay = 0;
Person::players[i]->proportionhead = 1.2;
Person::players[i]->proportionbody = 1.05;
Person::players[i]->proportionarms = 1.00;
Person::players[i]->proportionlegs = 1.1;
Person::players[i]->proportionlegs.y = 1.05;
Person::players[i]->setProportions(1, 1, 1, 1);
Person::players[i]->headless = 0;
Person::players[i]->currentoffset = 0;
Person::players[i]->targetoffset = 0;
......@@ -869,13 +865,6 @@ bool Game::LoadLevel(const std::string& name, bool tutorial)
Game::LoadingScreen();
if (cellophane) {
Person::players[i]->proportionhead.z = 0;
Person::players[i]->proportionbody.z = 0;
Person::players[i]->proportionarms.z = 0;
Person::players[i]->proportionlegs.z = 0;
}
Person::players[i]->tempanimation = Animation("Tempanim", lowheight, neutral);
if (i == 0) {
......@@ -1066,8 +1055,6 @@ void Game::ProcessDevInput()
return;
}
float headprop, bodyprop, armprop, legprop;
/* Console */
if (Input::isKeyPressed(consolekey)) {
console = !console;
......@@ -1242,28 +1229,10 @@ void Game::ProcessDevInput()
// FIXME: Those proportions are buggy
if (closest >= 0) {
if (Person::players[closest]->creature == wolftype) {
headprop = Person::players[closest]->proportionhead.x / 1.1;
bodyprop = Person::players[closest]->proportionbody.x / 1.1;
armprop = Person::players[closest]->proportionarms.x / 1.1;
legprop = Person::players[closest]->proportionlegs.x / 1.1;
} else { // rabbittype
headprop = Person::players[closest]->proportionhead.x / 1.2;
bodyprop = Person::players[closest]->proportionbody.x / 1.05;
armprop = Person::players[closest]->proportionarms.x / 1.00;
legprop = Person::players[closest]->proportionlegs.x / 1.1;
}
if (Person::players[closest]->creature == rabbittype) {
Person::players[closest]->creature = wolftype;
Person::players[closest]->whichskin = 0;
Person::players[closest]->skeletonLoad();
Person::players[closest]->proportionhead = 1.1;
Person::players[closest]->proportionbody = 1.1;
Person::players[closest]->proportionarms = 1.1;
Person::players[closest]->proportionlegs = 1.1;
Person::players[closest]->proportionlegs.y = 1.1;
Person::players[closest]->scale = .23 * 5 * Person::players[0]->scale;
Person::players[closest]->damagetolerance = 300;
......@@ -1272,30 +1241,10 @@ void Game::ProcessDevInput()
Person::players[closest]->whichskin = 0;
Person::players[closest]->skeletonLoad(true);
Person::players[closest]->proportionhead = 1.2;
Person::players[closest]->proportionbody = 1.05;
Person::players[closest]->proportionarms = 1.00;
Person::players[closest]->proportionlegs = 1.1;
Person::players[closest]->proportionlegs.y = 1.05;
Person::players[closest]->scale = .2 * 5 * Person::players[0]->scale;
Person::players[closest]->damagetolerance = 200;
}
if (Person::players[closest]->creature == wolftype) {
Person::players[closest]->proportionhead = 1.1 * headprop;
Person::players[closest]->proportionbody = 1.1 * bodyprop;
Person::players[closest]->proportionarms = 1.1 * armprop;
Person::players[closest]->proportionlegs = 1.1 * legprop;
}
if (Person::players[closest]->creature == rabbittype) {
Person::players[closest]->proportionhead = 1.2 * headprop;
Person::players[closest]->proportionbody = 1.05 * bodyprop;
Person::players[closest]->proportionarms = 1.00 * armprop;
Person::players[closest]->proportionlegs = 1.1 * legprop;
Person::players[closest]->proportionlegs.y = 1.05 * legprop;
}
}
}
......@@ -1527,40 +1476,7 @@ void Game::ProcessDevInput()
Person::players.back()->oldcoords = Person::players.back()->coords;
Person::players.back()->realoldcoords = Person::players.back()->coords;
if (Person::players[0]->creature == wolftype) {
headprop = Person::players[0]->proportionhead.x / 1.1;
bodyprop = Person::players[0]->proportionbody.x / 1.1;
armprop = Person::players[0]->proportionarms.x / 1.1;
legprop = Person::players[0]->proportionlegs.x / 1.1;
} else {
// rabbittype
headprop = Person::players[0]->proportionhead.x / 1.2;
bodyprop = Person::players[0]->proportionbody.x / 1.05;
armprop = Person::players[0]->proportionarms.x / 1.00;
legprop = Person::players[0]->proportionlegs.x / 1.1;
}
if (Person::players.back()->creature == wolftype) {
Person::players.back()->proportionhead = 1.1 * headprop;
Person::players.back()->proportionbody = 1.1 * bodyprop;
Person::players.back()->proportionarms = 1.1 * armprop;
Person::players.back()->proportionlegs = 1.1 * legprop;
}
if (Person::players.back()->creature == rabbittype) {
Person::players.back()->proportionhead = 1.2 * headprop;
Person::players.back()->proportionbody = 1.05 * bodyprop;
Person::players.back()->proportionarms = 1.00 * armprop;
Person::players.back()->proportionlegs = 1.1 * legprop;
Person::players.back()->proportionlegs.y = 1.05 * legprop;
}
if (cellophane) {
Person::players.back()->proportionhead.z = 0;
Person::players.back()->proportionbody.z = 0;
Person::players.back()->proportionarms.z = 0;
Person::players.back()->proportionlegs.z = 0;
}
Person::players.back()->setProportions(1, 1, 1, 1);
Person::players.back()->tempanimation = Animation("Tempanim", lowheight, neutral);
......
......@@ -43,8 +43,11 @@ along with Lugaru. If not, see <http://www.gnu.org/licenses/>.
#define getweapontype 7
#define pathfindtype 8
#define rabbittype 0
#define wolftype 1
enum person_type
{
rabbittype = 0,
wolftype = 1
};
struct InvalidPersonException : public exception {
const char * what () const throw () {
......@@ -52,8 +55,20 @@ struct InvalidPersonException : public exception {
}
};
class PersonType
{
public:
// head, body, arms, legs
XYZ proportions[4];
static std::vector<PersonType> types;
static void Load();
};
class Person : public enable_shared_from_this<Person>
{
private:
float proportions[4];
public:
static std::vector<std::shared_ptr<Person>> players;
......@@ -95,10 +110,10 @@ public:
XYZ coords;
XYZ velocity;
XYZ proportionhead;
XYZ proportionlegs;
XYZ proportionarms;
XYZ proportionbody;
//~ XYZ proportionhead;
//~ XYZ proportionlegs;
//~ XYZ proportionarms;
//~ XYZ proportionbody;
float unconscioustime;
......@@ -330,6 +345,8 @@ public:
inline AnimationFrame& currentFrame() { return Animation::animations.at(animCurrent).frames.at(frameCurrent); }
inline AnimationFrame& targetFrame() { return Animation::animations.at(animTarget).frames.at(frameTarget); }
void setProportions(float, float, float, float);
XYZ getProportion(int part) const;
void CheckKick();
void CatchFire();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment