// Pistol // Ready Jack // 5.22.04 // 1.4
// Adapted for Anvil Dropper by Lex Neva


// Make sure these are right
string gBulletName = "Anvil Target Seeker";
float gBulletSpeed = 25.0;

// use a hold anim, you'll go
// into the aim anim automatically when entering mouselook
vector gAimOffset = <0.0, 0.0, 0.875>; // borrowed from the Revolver script
integer gArmed;


getPerms()
{
integer perms = llGetPermissions()
| PERMISSION_TAKE_CONTROLS;
llRequestPermissions(llGetOwner(), perms);
}


arm() {
if (!(llGetPermissions() & PERMISSION_TAKE_CONTROLS)) {
getPerms();
} else {
llOwnerSay("Go into mouselook, aim at someone, and click!");

llTakeControls(CONTROL_ML_LBUTTON, TRUE, FALSE);
gArmed = TRUE;
}
}

disarm() {
llReleaseControls();
gArmed = FALSE;
}


default
{

state_entry() {
if (llGetAttached()) {
// attaching
gAimOffset = <0.0, 0.0, 0.875>;
vector size = llGetAgentSize(llGetOwner());
gAimOffset.z = gAimOffset.z * (size.z / 2.0);
getPerms();
}
}

run_time_permissions(integer perms)
{
if (perms & (PERMISSION_TAKE_CONTROLS
| PERMISSION_DEBIT)) {
arm();
} else {
llOwnerSay("insufficient permissions");
}
}

attach(key avatar)
{
if (avatar != NULL_KEY) {
// attaching
gAimOffset = <0.0, 0.0, 0.875>;
vector size = llGetAgentSize(avatar);
gAimOffset.z = gAimOffset.z * (size.z / 2.0);
getPerms();

} else {
// detaching
if (gArmed) disarm();
}
}

control(key avatar, integer levels, integer edges)
{
// mouse press
if ((levels & CONTROL_ML_LBUTTON) && (edges & CONTROL_ML_LBUTTON)) {
} else if (!(levels & CONTROL_ML_LBUTTON) && (edges & CONTROL_ML_LBUTTON)) { // mouse release
rotation rot = llGetRot();
vector aim = llRot2Fwd(rot);
vector pos = llGetPos() + gAimOffset + (aim * 1.0);


llRezObject(gBulletName, pos, aim * gBulletSpeed, rot, 1);

llSleep(0.8); // prevent rezzing several in one place
}

// mouse down
//if ((levels & CONTROL_ML_LBUTTON) && !(edges & CONTROL_ML_LBUTTON)) {
//}
}
}