/*
===========================================================================
Copyright (C) 2015 the OpenMoHAA team

This file is part of OpenMoHAA source code.

OpenMoHAA source code 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.

OpenMoHAA source code 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 OpenMoHAA source code; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
===========================================================================
*/

// nature.cpp: nature

#include "nature.h"

/*****************************************************************************/
/*QUAKED func_emitter (0 0.25 0.5) ?

"emitter" - Name of emitter to use.
******************************************************************************/
Event EV_Emitter_EmitterName
(
    "emitter",
    EV_DEFAULT,
    "s",
    "name",
    "Emitter to use",
    EV_NORMAL
);

CLASS_DECLARATION(Entity, Emitter, "func_emitter") {
    {&EV_Emitter_EmitterName, &Emitter::EmitterName},
    {NULL,                    NULL                 }
};

Emitter::Emitter()
{
    edict->s.eType = ET_EMITTER;
}

void Emitter::setEmitter(str name)
{
    emitterName      = name;
    edict->s.tag_num = gi.imageindex(emitterName);
}

void Emitter::EmitterName(Event *ev)
{
    setEmitter(ev->GetString(1));
}

/*****************************************************************************/
/*QUAKED func_rain (0 0.25 0.5) ?

This creates a raining effect in the brush

"emitter" - Name of emitter to use for the rain.
******************************************************************************/

CLASS_DECLARATION(Entity, Rain, "func_rain") {
    {NULL, NULL}
};

Rain::Rain()
{
    if (LoadingSavegame) {
        // Archive function will setup all necessary data
        return;
    }
    setSolidType(SOLID_NOT);
    edict->s.eType = ET_RAIN;
    setRainName("defaultrain");
}

void Rain::setRainName(str name)
{
    rainName         = name;
    edict->s.tag_num = gi.imageindex(rainName);
}

/*****************************************************************************/
/*       Plant Puffdaddy                                                     */
/*****************************************************************************/

Event EV_PuffDaddy_Idle
(
    "idle",
    EV_DEFAULT,
    NULL,
    NULL,
    "Animates the puff daddy.",
    EV_NORMAL
);

CLASS_DECLARATION(Animate, PuffDaddy, "plant_puffdaddy") {
    {&EV_Touch,          &PuffDaddy::Touch},
    {&EV_PuffDaddy_Idle, &PuffDaddy::Idle },
    {NULL,               NULL             }
};

void PuffDaddy::Idle(Event *ev)
{
    NewAnim("idle");
}

void PuffDaddy::Touch(Event *ev)
{
    Entity *other;

    other = ev->GetEntity(1);

    if (!other->inheritsFrom("Sentient")) {
        return;
    }

    NewAnim("touch", EV_PuffDaddy_Idle);
    //SetFrame( 0 );

    SurfaceCommand("puffdaddy", "+nodraw");
    setSolidType(SOLID_NOT);
}

PuffDaddy::PuffDaddy()
{
    if (LoadingSavegame) {
        // Archive function will setup all necessary data
        return;
    }
    setSolidType(SOLID_TRIGGER);
    edict->s.eType = ET_MODELANIM;
    setModel("plant_puffdaddy.tik");
    PostEvent(EV_Show, 0);
    //showModel();
}
