rendered paste bodyvoid JFW_Obelisk_Weapon_CnC::Damaged(GameObject *obj,GameObject *damager,float damage)
{
Commands->Set_Health(obj,Commands->Get_Max_Health(obj));
Commands->Set_Shield_Strength(obj,Commands->Get_Max_Shield_Strength(obj));
}
void JFW_Obelisk_Weapon_CnC::Created(GameObject *obj)
{
Vector3 v;
GameObject *object;
attack = false;
range = 150.0f;
effectid = 0;
attackid = 0;
EnemySeen = true;
Commands->Set_Player_Type(obj,0);
Commands->Set_Is_Rendered(obj,false);
Commands->Enable_Enemy_Seen(obj,true);
Commands->Enable_Hibernation(obj,false);
Commands->Innate_Enable(obj);
v = Commands->Get_Position(obj);
object = Commands->Create_Object("Obelisk Effect",v);
if (object)
{
effectid = Commands->Get_ID(object);
Commands->Set_Animation_Frame(object,"OBL_POWERUP.OBL_POWERUP",0);
}
}
void JFW_Obelisk_Weapon_CnC::Custom(GameObject *obj,int message,int param,GameObject *sender)
{
Vector3 pos,pos2;
float distance;
GameObject *object;
switch(message)
{
case 1:
if (!param)
{
Commands->Enable_Enemy_Seen(obj,false);
EnemySeen = false;
ActionParamsStruct params;
params.Set_Basic(this,100,0);
params.Set_Attack(obj,0,0,true);
Commands->Action_Attack(obj,params);
Commands->Action_Reset(obj,100);
if (effectid)
{
object = Commands->Find_Object(effectid);
if (object)
{
Commands->Set_Animation_Frame(object,"OBL_POWERUP.OBL_POWERUP",0);
}
}
}
else
{
Commands->Enable_Enemy_Seen(obj,true);
EnemySeen = true;
}
break;
case 2:
if (!attack && EnemySeen)
{
object = Commands->Find_Object(param);
if (object)
{
pos = Commands->Get_Position(obj);
pos2 = Commands->Get_Position(object);
distance = Commands->Get_Distance(pos,pos2);
pos.Z = 0;
pos2.Z = 0;
if ((Commands->Get_Distance(pos,pos2) > 15) && (range >= distance))
{
attackid = param;
EnemySeen = false;
Commands->Start_Timer(obj,this,2.0,1);
object = Commands->Find_Object(effectid);
if (object)
{
Commands->Set_Animation_Frame(object,"OBL_POWERUP.OBL_POWERUP",1);
}
pos2.Z -= 20;
Commands->Create_Sound("Obelisk_Warm_Up",pos2,obj);
}
else
{
if (effectid)
{
object = Commands->Find_Object(effectid);
if (object)
{
Commands->Set_Animation_Frame(object,"OBL_POWERUP.OBL_POWERUP",0);
}
}
Commands->Action_Reset(obj,100);
}
}
}
break;
case 3:
attack = true;
if (effectid)
{
object = Commands->Find_Object(effectid);
if (object)
{
Commands->Set_Animation_Frame(object,"OBL_POWERUP.OBL_POWERUP",0);
}
}
Commands->Action_Reset(obj,100);
break;
}
}
void JFW_Obelisk_Weapon_CnC::Enemy_Seen(GameObject *obj,GameObject *seen)
{
int id;
if (!attack)
{
id = Commands->Get_ID(seen);
Commands->Send_Custom_Event(obj,obj,2,id,0);
}
}
void JFW_Obelisk_Weapon_CnC::Timer_Expired(GameObject *obj,int number)
{
GameObject *object;
Vector3 pos,pos2;
float distance;
if (!attack)
{
if (number == 1)
{
object = Commands->Find_Object(attackid);
if (object)
{
pos = Commands->Get_Position(obj);
pos2 = Commands->Get_Position(object);
distance = Commands->Get_Distance(pos,pos2);
pos.Z = 0;
pos2.Z = 0;
if ((Commands->Get_Distance(pos,pos2) > 15) && (range >= distance))
{
ActionParamsStruct params;
params.Set_Basic(this,100,0);
//params.Set_Attack(object,range,0,true); //testing with this commented out
if (Is_Soldier(object)) {
params.Set_Attack_Position(Commands->Get_Bone_Position(object,"c R Foot"),range,0,true);
} //target feet
else { params.Set_Attack(object,range,0,true); }
Commands->Action_Attack(obj,params);
attackid = 0;
Commands->Start_Timer(obj,this,2.0,2);
}
else
{
if (effectid)
{
object = Commands->Find_Object(effectid);
if (object)
{
Commands->Set_Animation_Frame(object,"OBL_POWERUP.OBL_POWERUP",0);
}
}
Commands->Action_Reset(obj,100);
EnemySeen = true;
}
}
else
{
if (effectid)
{
object = Commands->Find_Object(effectid);
if (object)
{
Commands->Set_Animation_Frame(object,"OBL_POWERUP.OBL_POWERUP",0);
}
}
Commands->Action_Reset(obj,100);
EnemySeen = true;
}
}
else
{
if (number == 2)
{
if (effectid)
{
object = Commands->Find_Object(effectid);
if (object)
{
Commands->Set_Animation_Frame(object,"OBL_POWERUP.OBL_POWERUP",0);
}
}
EnemySeen = true;
}
}
}
}
void JFW_Obelisk_Weapon_CnC::Register_Auto_Save_Variables()
{
Auto_Save_Variable(1,1,&EnemySeen);
Auto_Save_Variable(2,4,&attackid);
Auto_Save_Variable(3,4,&effectid);
Auto_Save_Variable(4,4,&range);
Auto_Save_Variable(5,1,&attack);
}