1
0
Fork 0
mirror of https://github.com/AquariaOSE/Aquaria.git synced 2025-02-04 02:24:00 +00:00

Make maxSpeed float, little cleanup, minor Lua API stuff

Plus additional functions that don't use speed types:
+ entity_followPathSpeed()
+ entity_moveToNodeSpeed()
+ entity_swimToNodeSpeed()
+ entity_swimToPositionSpeed()

The following old functions (plus all of the above) return float now
(how long moving will take):

* entity_followPath()
* entity_moveToNode()
* entity_swimToNode)
* entity_swimToPosition()
This commit is contained in:
fgenesis 2015-06-12 02:59:01 +02:00
parent 8bd40be8aa
commit 209964034d
6 changed files with 116 additions and 129 deletions

View file

@ -3661,7 +3661,8 @@ void Continuity::reset()
speedTypes.clear(); speedTypes.clear();
InStream inFile("data/speedtypes.txt"); InStream inFile("data/speedtypes.txt");
int n, spd; int n;
float spd;
while (inFile >> n) while (inFile >> n)
{ {
inFile >> spd; inFile >> spd;
@ -3679,7 +3680,7 @@ void Continuity::reset()
core->resetTimer(); core->resetTimer();
} }
int Continuity::getSpeedType(int speedType) float Continuity::getSpeedType(int speedType)
{ {
if (speedType >= speedTypes.size() || speedType < 0) if (speedType >= speedTypes.size() || speedType < 0)
{ {

View file

@ -3869,58 +3869,6 @@ void DSQ::jumpToSection(InStream &inFile, const std::string &section)
debugLog("could not find section [" + section + "]"); debugLog("could not find section [" + section + "]");
} }
void DSQ::runGesture(const std::string &line)
{
std::istringstream is(line);
std::string target;
is >> target;
debugLog("Gesture: " + line);
if (target == "entity")
{
std::string entName;
is >> entName;
Entity *e = getEntityByName(entName);
if (e)
{
std::string cmd;
is >> cmd;
if (cmd=="anim" || cmd=="animate")
{
std::string anim;
is >> anim;
int loop = 0;
int group = 0;
if (anim == "idle")
{
e->skeletalSprite.stopAllAnimations();
loop = -1;
}
if (line.find("upperBody")!=std::string::npos)
{
group = 1;
}
if (line.find("loop")!=std::string::npos)
{
loop = -1;
}
if (line.find("stopAll")!=std::string::npos)
{
e->skeletalSprite.stopAllAnimations();
}
e->skeletalSprite.transitionAnimate(anim, 0.2, loop, group);
}
else if (cmd == "moveToNode")
{
std::string node;
is >> node;
Path *p = dsq->game->getPathByName(node);
e->moveToNode(p, 0);
}
}
}
}
bool DSQ::runScript(const std::string &name, const std::string &function, bool ignoremissing /* = false */) bool DSQ::runScript(const std::string &name, const std::string &function, bool ignoremissing /* = false */)
{ {
if (!scriptInterface.runScript(name, function, ignoremissing)) if (!scriptInterface.runScript(name, function, ignoremissing))

View file

@ -992,7 +992,7 @@ public:
float getStory(); float getStory();
void setStory(float v); void setStory(float v);
int getSpeedType(int speedType); float getSpeedType(int speedType);
void setNaijaModel(std::string model); void setNaijaModel(std::string model);
@ -1159,7 +1159,7 @@ public:
protected: protected:
std::vector<EatData> eats; std::vector<EatData> eats;
std::vector<int> speedTypes; std::vector<float> speedTypes;
float story; float story;
WorldType worldType; WorldType worldType;
@ -1395,7 +1395,6 @@ public:
void jumpToSection(InStream &inFile, const std::string &section); void jumpToSection(InStream &inFile, const std::string &section);
void runGesture(const std::string &line);
void generateCollisionMask(RenderObject *r); void generateCollisionMask(RenderObject *r);
void toggleRenderCollisionShapes(); void toggleRenderCollisionShapes();

View file

@ -255,7 +255,7 @@ Entity::Entity()
//debugLog("dsq->addEntity()"); //debugLog("dsq->addEntity()");
dsq->addEntity(this); dsq->addEntity(this);
maxSpeed = oldMaxSpeed = 300; maxSpeed = 300;
entityDead = false; entityDead = false;
health = maxHealth = 5; health = maxHealth = 5;
invincibleBreak = false; invincibleBreak = false;
@ -440,43 +440,45 @@ void Entity::setName(const std::string &name)
this->name = name; this->name = name;
} }
void Entity::followPath(Path *p, int speedType, int dir, bool deleteOnEnd) float Entity::followPath(Path *p, float speed, int dir, bool deleteOnEnd)
{ {
if (p) if(!speed)
{ speed = getMaxSpeed();
deleteOnPathEnd = deleteOnEnd; deleteOnPathEnd = deleteOnEnd;
position.stopPath(); position.stopPath();
position.ensureData(); position.ensureData();
position.data->path.clear(); position.data->path.clear();
if (dir) if (dir)
{
for (int i = p->nodes.size()-1; i >=0; i--)
{ {
for (int i = p->nodes.size()-1; i >=0; i--) PathNode pn = p->nodes[i];
{ position.data->path.addPathNode(pn.position, 1.0f-(float(i/float(p->nodes.size()))));
PathNode pn = p->nodes[i];
position.data->path.addPathNode(pn.position, 1.0f-(float(i/float(p->nodes.size()))));
}
} }
else
{
for (int i = 0; i < p->nodes.size(); i++)
{
PathNode pn = p->nodes[i];
position.data->path.addPathNode(pn.position, float(i/float(p->nodes.size())));
}
}
//debugLog("Calculating Time");
float time = position.data->path.getLength()/(float)dsq->continuity.getSpeedType(speedType);
//debugLog("Starting");
position.data->path.getPathNode(0)->value = position;
position.startPath(time);//, 1.0f/2.0f);
} }
else
{
for (int i = 0; i < p->nodes.size(); i++)
{
PathNode pn = p->nodes[i];
position.data->path.addPathNode(pn.position, float(i/float(p->nodes.size())));
}
}
//debugLog("Calculating Time");
float time = position.data->path.getLength()/speed;
//debugLog("Starting");
position.data->path.getPathNode(0)->value = position;
position.startPath(time);//, 1.0f/2.0f);
return time;
} }
void Entity::moveToNode(Path *path, int speedType, int dieOnPathEnd, bool swim) float Entity::moveToPos(Vector dest, float speed, int dieOnPathEnd, bool swim)
{ {
if(!speed)
speed = getMaxSpeed();
Vector start = position; Vector start = position;
Vector dest = path->nodes[0].position;
followEntity = 0; followEntity = 0;
//watchingEntity = 0; //watchingEntity = 0;
@ -519,7 +521,7 @@ void Entity::moveToNode(Path *path, int speedType, int dieOnPathEnd, bool swim)
//debugLog("Done"); //debugLog("Done");
//debugLog("Calculating Time"); //debugLog("Calculating Time");
float time = position.data->path.getLength()/(float)dsq->continuity.getSpeedType(speedType); float time = position.data->path.getLength()/speed;
//debugLog("Starting"); //debugLog("Starting");
position.data->path.getPathNode(0)->value = position; position.data->path.getPathNode(0)->value = position;
position.startPath(time);//, 1.0f/2.0f); position.startPath(time);//, 1.0f/2.0f);
@ -536,6 +538,8 @@ void Entity::moveToNode(Path *path, int speedType, int dieOnPathEnd, bool swim)
//position.startSpeedPath(dsq->continuity.getSpeedType(speedType)); //position.startSpeedPath(dsq->continuity.getSpeedType(speedType));
//position.startPath(((position.data->path.getNumPathNodes()*TILE_SIZE*4)-2)/dsq->continuity.getSpeedType(speedType)); //position.startPath(((position.data->path.getNumPathNodes()*TILE_SIZE*4)-2)/dsq->continuity.getSpeedType(speedType));
return time;
} }
void Entity::stopFollowingPath() void Entity::stopFollowingPath()
@ -1010,7 +1014,7 @@ bool Entity::isNearObstruction(int sz, int type, TileVector *hitTile)
return v; return v;
} }
bool Entity::touchAvatarDamage(int radius, float dmg, const Vector &override, int speed, float pushTime, Vector collidePos) bool Entity::touchAvatarDamage(int radius, float dmg, const Vector &override, float speed, float pushTime, Vector collidePos)
{ {
if (isv(EV_BEASTBURST, 1) && isDamageTarget(DT_AVATAR_BITE) && dsq->continuity.form == FORM_BEAST && dsq->game->avatar->bursting) if (isv(EV_BEASTBURST, 1) && isDamageTarget(DT_AVATAR_BITE) && dsq->continuity.form == FORM_BEAST && dsq->game->avatar->bursting)
{ {
@ -2213,7 +2217,7 @@ bool Entity::isUnderWater(const Vector &override)
return false; return false;
} }
void Entity::push(const Vector &vec, float time, int maxSpeed, float dmg) void Entity::push(const Vector &vec, float time, float maxSpeed, float dmg)
{ {
if (!this->isEntityDead()) if (!this->isEntityDead())
{ {
@ -2234,9 +2238,9 @@ void Entity::push(const Vector &vec, float time, int maxSpeed, float dmg)
//vel += pushVec; //vel += pushVec;
} }
void Entity::setMaxSpeed(int ms) void Entity::setMaxSpeed(float ms)
{ {
maxSpeed = oldMaxSpeed = ms; maxSpeed = ms;
} }
int Entity::getMaxSpeed() int Entity::getMaxSpeed()
@ -2395,11 +2399,6 @@ void Entity::onEnterState(int action)
{ {
switch (action) switch (action)
{ {
case STATE_IDLE:
{
maxSpeed = oldMaxSpeed;
}
break;
case STATE_DEAD: case STATE_DEAD:
{ {
if (!isGoingToBeEaten()) if (!isGoingToBeEaten())
@ -3020,7 +3019,7 @@ void Entity::shotHitEntity(Entity *hit, Shot *shot, Bone *b)
{ {
} }
bool Entity::doCollisionAvoidance(float dt, int search, float mod, Vector *vp, int overrideMaxSpeed, int ignoreObs, bool onlyVP) bool Entity::doCollisionAvoidance(float dt, int search, float mod, Vector *vp, float overrideMaxSpeed, int ignoreObs, bool onlyVP)
{ {
Vector accum; Vector accum;
int c = 0; int c = 0;

View file

@ -233,7 +233,7 @@ public:
void heal(float a, int type=0); void heal(float a, int type=0);
void push(const Vector &vec, float time, int maxSpeed, float dmg); void push(const Vector &vec, float time, float maxSpeed, float dmg);
bool canSetState(int state); bool canSetState(int state);
@ -312,9 +312,9 @@ public:
}; };
virtual void onNotify(Entity *notify){} virtual void onNotify(Entity *notify){}
//void followPath(Path *p, int spd, int loop, bool deleteOnEnd = false); //void followPath(Path *p, int spd, int loop, bool deleteOnEnd = false);
void followPath(Path *p, int speedType, int dir, bool deleteOnEnd = false); float followPath(Path *p, float speed, int dir, bool deleteOnEnd = false);
Entity *attachedTo; Entity *attachedTo;
bool touchAvatarDamage(int radius, float dmg, const Vector &override=Vector(-1,-1,-1), int speed=0, float pushTime = 0, Vector collidePos = Vector(0,0,0)); bool touchAvatarDamage(int radius, float dmg, const Vector &override=Vector(-1,-1,-1), float speed=0, float pushTime = 0, Vector collidePos = Vector(0,0,0));
void moveTowards(Vector p, float dt, int spd); void moveTowards(Vector p, float dt, int spd);
void moveAround(Vector p, float dt, int spd, int d); void moveAround(Vector p, float dt, int spd, int d);
@ -327,10 +327,10 @@ public:
void moveAroundEntity(float dt, int spd, int d, Entity *e); void moveAroundEntity(float dt, int spd, int d, Entity *e);
void moveTowardsGroupCenter(float dt, int spd); void moveTowardsGroupCenter(float dt, int spd);
void moveTowardsGroupHeading(float dt, int spd); void moveTowardsGroupHeading(float dt, int spd);
bool doCollisionAvoidance(float dt, int search, float mod, Vector *v = 0, int overrideMaxSpeed=0, int ignoreObs=0, bool onlyVP=false); bool doCollisionAvoidance(float dt, int search, float mod, Vector *v = 0, float overrideMaxSpeed=0, int ignoreObs=0, bool onlyVP=false);
void doSpellAvoidance(float dt, int range, float mod); void doSpellAvoidance(float dt, int range, float mod);
void doEntityAvoidance(float dt, int range, float mod, Entity *ignore =0); void doEntityAvoidance(float dt, int range, float mod, Entity *ignore =0);
void setMaxSpeed(int ms); void setMaxSpeed(float ms);
Entity *findTarget(int dist, int type, int t=0); Entity *findTarget(int dist, int type, int t=0);
//bool hasTarget() { return target != 0; } //bool hasTarget() { return target != 0; }
bool hasTarget(int t=0); bool hasTarget(int t=0);
@ -353,7 +353,7 @@ public:
void overideMaxSpeed(int ms, float time); void overideMaxSpeed(int ms, float time);
void disableOverideMaxSpeed(); void disableOverideMaxSpeed();
int currentEntityTarget; int currentEntityTarget;
void moveToNode(Path *path, int speedType, int dieOnPathEnd=0, bool swim = false); float moveToPos(Vector pos, float speed, int dieOnPathEnd=0, bool swim = false);
bool isHit(); bool isHit();
bool pathBurst(bool wallJump = false); bool pathBurst(bool wallJump = false);
Timer burstTimer; Timer burstTimer;
@ -599,7 +599,7 @@ protected:
void updateBoneLock(); void updateBoneLock();
int pushMaxSpeed; float pushMaxSpeed;
std::string currentAnim; std::string currentAnim;
@ -610,8 +610,7 @@ protected:
private: private:
int maxSpeed; float maxSpeed;
int oldMaxSpeed;
bool stopSoundsOnDeath; bool stopSoundsOnDeath;

View file

@ -3326,45 +3326,67 @@ luaFunc(entity_moveToNode)
{ {
Entity *e = entity(L); Entity *e = entity(L);
Path *p = path(L, 2); Path *p = path(L, 2);
float time = 0;
if (e && p) if (e && p)
{ {
e->moveToNode(p, lua_tointeger(L, 3), lua_tointeger(L, 4), 0); float speed = dsq->continuity.getSpeedType(lua_tointeger(L, 3));
time = e->moveToPos(p->nodes[0].position, speed, lua_tointeger(L, 4), 0);
} }
luaReturnNil(); luaReturnNum(time);
} }
luaFunc(entity_swimToNode) luaFunc(entity_swimToNode)
{ {
Entity *e = entity(L); Entity *e = entity(L);
Path *p = path(L, 2); Path *p = path(L, 2);
float time = 0;
if (e && p) if (e && p)
{ {
e->moveToNode(p, lua_tointeger(L, 3), lua_tointeger(L, 4), 1); float speed = dsq->continuity.getSpeedType(lua_tointeger(L, 3));
/* time = e->moveToPos(p->nodes[0].position, speed, lua_tointeger(L, 4), 1);
ScriptedEntity *se = dynamic_cast<ScriptedEntity*>(e);
se->swimPath = true;
*/
} }
luaReturnNil(); luaReturnNum(time);
} }
luaFunc(entity_swimToPosition) luaFunc(entity_swimToPosition)
{ {
Entity *e = entity(L); Entity *e = entity(L);
//Path *p = path(L, 2); float time = 0;
Path p;
PathNode n;
n.position = Vector(lua_tonumber(L, 2), lua_tonumber(L, 3));
p.nodes.push_back(n);
if (e) if (e)
{ {
e->moveToNode(&p, lua_tointeger(L, 4), lua_tointeger(L, 5), 1); float speed = dsq->continuity.getSpeedType(lua_tointeger(L, 4));
/* time = e->moveToPos(Vector(lua_tonumber(L, 2), lua_tonumber(L, 3)), speed, lua_tointeger(L, 5), 1);
ScriptedEntity *se = dynamic_cast<ScriptedEntity*>(e);
se->swimPath = true;
*/
} }
luaReturnNil(); luaReturnNum(time);
}
luaFunc(entity_moveToNodeSpeed)
{
Entity *e = entity(L);
Path *p = path(L, 2);
float time = 0;
if (e && p)
time = e->moveToPos(p->nodes[0].position, lua_tonumber(L, 3), lua_tointeger(L, 4), 0);
luaReturnNum(time);
}
luaFunc(entity_swimToNodeSpeed)
{
Entity *e = entity(L);
Path *p = path(L, 2);
float time = 0;
if (e && p)
time = e->moveToPos(p->nodes[0].position, lua_tonumber(L, 3), lua_tointeger(L, 4), 1);
luaReturnNum(time);
}
luaFunc(entity_swimToPositionSpeed)
{
Entity *e = entity(L);
float time = 0;
if (e)
time = e->moveToPos(Vector(lua_tonumber(L, 2), lua_tonumber(L, 3)), lua_tonumber(L, 4), lua_tointeger(L, 5), 1);
luaReturnNum(time);
} }
@ -3650,15 +3672,30 @@ luaFunc(loadMap)
luaFunc(entity_followPath) luaFunc(entity_followPath)
{ {
Entity *e = entity(L); Entity *e = entity(L);
float time = 0;
if (e) if (e)
{ {
Path *p = path(L, 2); Path *p = path(L, 2);
int speedType = lua_tointeger(L, 3); int speedType = lua_tointeger(L, 3);
int dir = lua_tointeger(L, 4); int dir = lua_tointeger(L, 4);
float speed = dsq->continuity.getSpeedType(speedType);
e->followPath(p, speedType, dir); time = e->followPath(p, speed, dir);
} }
luaReturnNil(); luaReturnNum(time);
}
luaFunc(entity_followPathSpeed)
{
Entity *e = entity(L);
float time = 0;
if (e)
{
Path *p = path(L, 2);
float speed = lua_tonumber(L, 3);
int dir = lua_tointeger(L, 4);
time = e->followPath(p, speed, dir);
}
luaReturnNum(time);
} }
luaFunc(spawnIngredient) luaFunc(spawnIngredient)
@ -6058,7 +6095,7 @@ luaFunc(entity_setMaxSpeed)
{ {
Entity *e = entity(L); Entity *e = entity(L);
if (e) if (e)
e->setMaxSpeed(lua_tointeger(L, 2)); e->setMaxSpeed(lua_tonumber(L, 2));
luaReturnNil(); luaReturnNil();
} }
@ -9599,6 +9636,7 @@ static const struct {
luaRegister(entity_stopInterpolating), luaRegister(entity_stopInterpolating),
luaRegister(entity_followPath), luaRegister(entity_followPath),
luaRegister(entity_followPathSpeed),
luaRegister(entity_isFollowingPath), luaRegister(entity_isFollowingPath),
luaRegister(entity_followEntity), luaRegister(entity_followEntity),
luaRegister(entity_sound), luaRegister(entity_sound),
@ -9852,6 +9890,7 @@ static const struct {
luaRegister(entity_warpToNode), luaRegister(entity_warpToNode),
luaRegister(entity_moveToNode), luaRegister(entity_moveToNode),
luaRegister(entity_moveToNodeSpeed),
luaRegister(cam_toNode), luaRegister(cam_toNode),
luaRegister(cam_snap), luaRegister(cam_snap),
@ -9866,7 +9905,9 @@ static const struct {
luaRegister(entity_flipToVel), luaRegister(entity_flipToVel),
luaRegister(entity_swimToNode), luaRegister(entity_swimToNode),
luaRegister(entity_swimToNodeSpeed),
luaRegister(entity_swimToPosition), luaRegister(entity_swimToPosition),
luaRegister(entity_swimToPositionSpeed),
luaRegister(createShot), luaRegister(createShot),