//
// Copyright(C) 2014-2015 Samuel Villarreal
//
// This program 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.
//
// DESCRIPTION:
//      Misc Mantis Object Classes
//

#include "scripts/common.txt"

/*
==============================================================
TurokMantisKeyPlaque
==============================================================
*/

class TurokMantisKeyPlaque : BPR::CL_BPR_WorldObject //[BP_Randomizer]
{
    kActor @self;
    float time;
    bool bActivated;
    
    TurokMantisKeyPlaque(kActor @actor)
    {
		super(actor); //[BP_Randomizer]
        @self = actor;
        time = 0;
        bActivated = false;
    }
    
    /*
    ==============================================================
    OnTick
    ==============================================================
    */
    
    void OnTick(void)
    {
        if(time <= 0.0f)
        {
            return;
        }
        
        time -= GAME_FRAME_TIME;
        
        if(time <= 0.0f)
        {
            World.TriggerActorsByTID(self, 440);
        }
    }
    
    /*
    ==============================================================
    OnSpawn
    ==============================================================
    */
    
    void OnSpawn(void)
    {
        self.AnimState().Set(anim_mantisKeyIdle, 4.0f, 0);
    }
    
    /*
    ==============================================================
    OnActivate
    ==============================================================
    */
    
    void OnActivate(void)
    {
        if(bActivated)
        {
            return;
        }
        
        self.AnimState().Blend(anim_mantisKeyLower, 4.0f, 130.0f, 0);
        
        time = 30.0f;
        bActivated = true;
        self.MarkPersistentBit(false);
    }
    
    /*
    ==============================================================
    OnRestore
    ==============================================================
    */
    
    void OnRestore(void)
    {
        self.Flags() |= AF_IGNORESOUNDEVENTS;
        self.AnimState().Set(anim_mantisKeyLower, 4.0f, 0);
        self.ModelVariation() = 1;
        
        self.AnimState().SetLastFrame(true);
        bActivated = true;
    }
};

/*
==============================================================
TurokMantisStatue
==============================================================
*/

class TurokMantisStatue : BPR::CL_BPR_WorldObject //[BP_Randomizer]
{
    kActor @self;
    
    TurokMantisStatue(kActor @actor)
    {
		super(actor); //[BP_Randomizer]
        @self = actor;
    }
    
    /*
    ==============================================================
    OnTick
    ==============================================================
    */
    
    void OnTick(void)
    {
    }
    
    /*
    ==============================================================
    OnSpawn
    ==============================================================
    */
    
    void OnSpawn(void)
    {
        self.AnimState().Set(anim_mantisStatueIdle, 4.0f, 0);
    }
    
    /*
    ==============================================================
    OnActivate
    ==============================================================
    */
    
    void OnActivate(void)
    {
        self.AnimState().Set(anim_mantisStatueTrigger, 4.0f, 0);
        World.TriggerActorsByTID(self, 441);
        self.MarkPersistentBit(false);
    }
    
    /*
    ==============================================================
    OnRestore
    ==============================================================
    */
    
    void OnRestore(void)
    {
        World.TriggerActorsByTID(self, 441);
        self.Remove();
    }
};

/*
==============================================================
TurokMantisWall
==============================================================
*/

class TurokMantisWall : BPR::CL_BPR_WorldObject //[BP_Randomizer]
{
    kActor @self;
    float time;
    
    TurokMantisWall(kActor @actor)
    {
		super(actor); //[BP_Randomizer]
        @self = actor;
        time = 0;
    }
    
    /*
    ==============================================================
    ScreenShake
    ==============================================================
    */
    
    void ScreenShake(kActor @instigator, const float w, const float x, const float y, const float z)
    {
        Player.Actor().RecoilPitch() = -Math::Deg2Rad(w);
    }
    
    /*
    ==============================================================
    MeleeBluntStrong
    ==============================================================
    */
    
    void MeleeBluntStrong(kActor @instigator, const float w, const float x, const float y, const float z)
    {
        self.MeleeObject("Damage_Blunt_10", kVec3(x, y, z), w);
    }
    
    /*
    ==============================================================
    OnTick
    ==============================================================
    */
    
    void OnTick(void)
    {
        if( self.AnimState().PlayingID() == anim_mantisWallCollapseOutward ||
            self.AnimState().PlayingID() == anim_mantisWallCollapseInward)
        {
            time += GAME_FRAME_TIME;
            
            if(time >= 120.0f)
            {
                self.Remove();
            }
        }
    }
    
    /*
    ==============================================================
    OnSpawn
    ==============================================================
    */
    
    void OnSpawn(void)
    {
        self.AnimState().Set(anim_mantisWallIdle, 4.0f, 0);
    }
    
    /*
    ==============================================================
    OnRestore
    ==============================================================
    */
    
    void OnRestore(void)
    {
        self.Flags() |= AF_IGNORESOUNDEVENTS;
        self.AnimState().Set(anim_mantisWallCollapseOutward, 4.0f, 0);
        self.AnimState().SetLastFrame(true);
    }
};
