1
0
Fork 0
mirror of https://github.com/AquariaOSE/Aquaria.git synced 2024-11-25 09:44:02 +00:00
Aquaria/Aquaria/GasCloud.cpp

134 lines
3.3 KiB
C++

/*
Copyright (C) 2007, 2010 - Bit-Blot
This file is part of Aquaria.
Aquaria is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "Shot.h"
#include "Game.h"
const float pSpawnRate = 1.0;
GasCloud::GasCloud(Entity *source, const Vector &position, const std::string &particles, const Vector &color, int radius, float life, float damage, bool isMoney, float poisonTime) : Entity()
{
sourceEntity = source;
this->poisonTime = poisonTime;
this->particles = particles;
//this->gfx = gfx;
//this->isMoney = isMoney;
this->position = position;
this->damage = damage;
this->radius = radius;
pTimer = 0;
setLife(life);
setDecayRate(1);
renderQuad = false;
this->color = color;
pTimer = pSpawnRate*10;
vel = Vector(0,-100);
emitter = new ParticleEffect;
emitter->load(particles);
emitter->start();
emitter->setDie(true);
//emitter->parentManagedStatic = true;
//addChild(&emitter);
dsq->game->addRenderObject(emitter, LR_PARTICLES);
//setDamageTarget(DT_ENEMY_GAS, false)
setEntityType(ET_NEUTRAL);
deathSound = "";
}
void GasCloud::onUpdate(float dt)
{
Entity::onUpdate(dt);
if (emitter)
emitter->position = this->position;
if (life > 0.1f)
{
if (damage > 0)
{
FOR_ENTITIES(i)
{
Entity *e = (*i);
if (e != this && (e->getEntityType() == ET_ENEMY || e->getEntityType() == ET_AVATAR) && e->isDamageTarget(DT_ENEMY_GAS) && (e->position - position).isLength2DIn(radius + e->collideRadius))
{
bool doit = (sourceEntity != e);
if (doit && sourceEntity)
{
if (sourceEntity->getEntityType() == ET_AVATAR)
doit = ((e->getEntityType() == ET_ENEMY) && doit);
}
if (doit)
{
DamageData d;
d.attacker = 0;
d.damageType = DT_ENEMY_GAS;
d.damage = this->damage;
e->damage(d);
if (poisonTime > 0)
{
if (e->isDamageTarget(DT_ENEMY_POISON))
{
e->setPoison(1, poisonTime);
}
}
}
}
}
}
/*
pTimer += dt;
while (pTimer > pSpawnRate)
{
int a = rand()%360;
int r = rand()%radius;
Vector pos = position;
pos += Vector(sinf(a)*r, cosf(a)*r);
Quad *quad = new Quad;
{
quad->rotation.z = rand()%360;
quad->position = pos;
quad->color = color;
quad->setTexture(gfx);
quad->alpha.path.addPathNode(0, 0);
quad->alpha.path.addPathNode(0.5, 0.2);
quad->alpha.path.addPathNode(0.5, 0.8);
quad->alpha.path.addPathNode(0, 1);
quad->alpha.startPath(3);
quad->scale = Vector(0.5, 0.5);
quad->scale.interpolateTo(Vector(2,2),4);
}
dsq->getTopStateData()->addRenderObject(quad, LR_PARTICLES);
pTimer -= pSpawnRate;
}
*/
}
else
{
if (emitter && emitter->isRunning())
{
emitter->stop();
emitter = 0;
}
}
}