mirror of
https://github.com/scp-fs2open/fs2open.github.com.git
synced 2026-11-08 07:28:22 -10:00
68 lines
1.9 KiB
C++
68 lines
1.9 KiB
C++
//
|
|
//
|
|
|
|
#include "asteroid.h"
|
|
#include "object.h"
|
|
#include "vecmath.h"
|
|
#include "ship.h"
|
|
#include "asteroid/asteroid.h"
|
|
|
|
namespace scripting {
|
|
namespace api {
|
|
|
|
//**********HANDLE: Asteroid
|
|
ADE_OBJ_DERIV(l_Asteroid, object_h, "asteroid", "Asteroid handle", l_Object);
|
|
|
|
ADE_VIRTVAR(Target, l_Asteroid, "object", "Asteroid target object; may be object derivative, such as ship.", "object", "Target object, or invalid handle if asteroid handle is invalid")
|
|
{
|
|
object_h *oh = NULL;
|
|
object_h *th = NULL;
|
|
if(!ade_get_args(L, "o|o", l_Asteroid.GetPtr(&oh), l_Object.GetPtr(&th)))
|
|
return ade_set_error(L, "o", l_Object.Set(object_h()));
|
|
|
|
if(!oh->IsValid())
|
|
return ade_set_error(L, "o", l_Object.Set(object_h()));
|
|
|
|
asteroid *asp = &Asteroids[oh->objp->instance];
|
|
|
|
if(ADE_SETTING_VAR && th != NULL) {
|
|
if(th->IsValid())
|
|
asp->target_objnum = OBJ_INDEX(th->objp);
|
|
else
|
|
asp->target_objnum = -1;
|
|
}
|
|
|
|
if(asp->target_objnum > 0 && asp->target_objnum < MAX_OBJECTS)
|
|
return ade_set_object_with_breed(L, asp->target_objnum);
|
|
else
|
|
return ade_set_error(L, "o", l_Object.Set(object_h()));
|
|
|
|
}
|
|
|
|
ADE_FUNC(kill, l_Asteroid, "[ship killer=nil, wvector hitpos=nil]", "Kills the asteroid. Set \"killer\" to designate a specific ship as having been the killer, and \"hitpos\" to specify the world position of the hit location; if nil, the asteroid center is used.", "boolean", "True if successful, false or nil otherwise")
|
|
{
|
|
object_h *victim,*killer=NULL;
|
|
vec3d *hitpos=NULL;
|
|
if(!ade_get_args(L, "o|oo", l_Asteroid.GetPtr(&victim), l_Ship.GetPtr(&killer), l_Vector.GetPtr(&hitpos)))
|
|
return ADE_RETURN_NIL;
|
|
|
|
if(!victim->IsValid())
|
|
return ADE_RETURN_NIL;
|
|
|
|
if(killer != NULL && !killer->IsValid())
|
|
return ADE_RETURN_NIL;
|
|
|
|
if (!hitpos)
|
|
hitpos = &victim->objp->pos;
|
|
|
|
if (killer)
|
|
asteroid_hit(victim->objp, killer->objp, hitpos, victim->objp->hull_strength + 1);
|
|
else
|
|
asteroid_hit(victim->objp, NULL, hitpos, victim->objp->hull_strength + 1);
|
|
|
|
return ADE_RETURN_TRUE;
|
|
}
|
|
|
|
}
|
|
}
|