reimplement alt use on right mouse button

This replaces throwing then controlling or inside a vehicle, throwing items remains on RMB as is.
Controls
Maikel de Vries 2015-06-27 16:56:45 +02:00
parent 83124d86f4
commit 91cd15c40c
8 changed files with 89 additions and 90 deletions

View File

@ -50,6 +50,7 @@ static const ACTIONTYPE_EXTRA = 4;
this.control.current_object: object that is being used at the moment
this.control.using_type: way of usage
this.control.alt: alternate usage by right mouse button
this.control.mlastx: last x position of the cursor
this.control.mlasty: last y position of the cursor
this.control.noholdingcallbacks: whether to do HoldingUseControl callbacks
@ -74,6 +75,7 @@ protected func Construction()
menu = nil;
this.control.alt = false;
this.control.current_object = nil;
this.control.using_type = nil;
this.control.shelved_command = nil;
@ -256,7 +258,8 @@ public func ObjectControl(int plr, int ctrl, int x, int y, int strength, bool re
*/
if (this.control.current_object && ctrl == CON_Aim)
{
ctrl = CON_Use;
if (this.control.alt) ctrl = CON_UseAlt;
else ctrl = CON_Use;
repeat = true;
release = false;
@ -287,7 +290,7 @@ public func ObjectControl(int plr, int ctrl, int x, int y, int strength, bool re
// save last mouse position:
// if the using has to be canceled, no information about the current x,y
// is available. Thus, the last x,y position needs to be saved
if (ctrl == CON_Use)
if (ctrl == CON_Use || ctrl == CON_UseAlt)
{
this.control.mlastx = x;
this.control.mlasty = y;
@ -313,7 +316,7 @@ public func ObjectControl(int plr, int ctrl, int x, int y, int strength, bool re
var contents = this->GetHandItem(0);
// usage
var use = (ctrl == CON_Use || ctrl == CON_UseDelayed);
var use = (ctrl == CON_Use || ctrl == CON_UseDelayed || ctrl == CON_UseAlt || ctrl == CON_UseAltDelayed);
if (use)
{
if (house)
@ -588,12 +591,17 @@ func DetermineUsageType(object obj)
func GetUseCallString(string action)
{
// Control... or Contained...
var control = "Control";
if (this.control.using_type == C4D_Structure) control = "Contained";
var control_string = "Control";
if (this.control.using_type == C4D_Structure)
control_string = "Contained";
// ..Use.. or ..UseAlt...
var estr = "";
if (this.control.alt && this.control.using_type != C4D_Object)
estr = "Alt";
// Action
if (!action) action = "";
return Format("~%sUse%s",control,action);
if (!action)
action = "";
return Format("~%sUse%s%s", control_string, estr, action);
}
func CanReIssueCommand(proplist data)
@ -629,6 +637,7 @@ func StartUseControl(int ctrl, int x, int y, object obj)
obj->SetController(GetController());
this.control.current_object = obj;
this.control.using_type = DetermineUsageType(obj);
this.control.alt = ctrl != CON_Use;
var hold_enabled = obj->Call("~HoldingEnabled");
@ -675,6 +684,7 @@ func StartUseDelayedControl(int ctrl, object obj)
this.control.current_object = obj;
this.control.using_type = DetermineUsageType(obj);
this.control.alt = ctrl != CON_UseDelayed;
VirtualCursor()->StartAim(this);
@ -706,7 +716,7 @@ func StopUseControl(int x, int y, object obj, bool cancel)
var stop = "Stop";
if (cancel) stop = "Cancel";
// ControlUseStop, ContainedUseCancel, etc...
// ControlUseStop, ControlUseAltStop, ContainedUseAltStop, ContainedUseCancel, etc...
var handled = obj->Call(GetUseCallString(stop),this,x,y);
if (obj == this.control.current_object)
{
@ -728,6 +738,7 @@ func StopUseControl(int x, int y, object obj, bool cancel)
this.control.current_object = nil;
this.control.using_type = nil;
this.control.alt = false;
if (removal_helper)
{
@ -749,7 +760,7 @@ func HoldingUseControl(int ctrl, int x, int y, object obj)
{
var mex = x;
var mey = y;
if (ctrl == CON_UseDelayed)
if (ctrl == CON_UseDelayed || ctrl == CON_UseAltDelayed)
{
mex = this.control.mlastx;
mey = this.control.mlasty;
@ -798,11 +809,10 @@ func HoldingUseControl(int ctrl, int x, int y, object obj)
func StopUseDelayedControl(object obj)
{
// ControlUseStop, etc...
var handled = obj->Call(GetUseCallString("Stop"),this,this.control.mlastx,this.control.mlasty);
// ControlUseStop, ControlUseAltStop, ContainedUseAltStop, etc...
var handled = obj->Call(GetUseCallString("Stop"), this, this.control.mlastx, this.control.mlasty);
if (!handled)
handled = obj->Call(GetUseCallString(),this,this.control.mlastx,this.control.mlasty);
handled = obj->Call(GetUseCallString(), this, this.control.mlastx, this.control.mlasty);
if (obj == this.control.current_object)
{
@ -812,6 +822,7 @@ func StopUseDelayedControl(object obj)
{
this.control.current_object = nil;
this.control.using_type = nil;
this.control.alt = false;
}
this.control.noholdingcallbacks = false;
}
@ -846,7 +857,7 @@ func FxItemRemovalCheckStop(object target, proplist effect, int reason, bool tem
func ControlUse2Script(int ctrl, int x, int y, int strength, bool repeat, bool release, object obj)
{
// standard use
if (ctrl == CON_Use)
if (ctrl == CON_Use || ctrl == CON_UseAlt)
{
if (!release && !repeat)
{
@ -858,7 +869,7 @@ func ControlUse2Script(int ctrl, int x, int y, int strength, bool repeat, bool r
}
}
// gamepad use
else if (ctrl == CON_UseDelayed)
else if (ctrl == CON_UseDelayed || ctrl == CON_UseAltDelayed)
{
if (!release && !repeat)
{
@ -871,7 +882,7 @@ func ControlUse2Script(int ctrl, int x, int y, int strength, bool repeat, bool r
}
// more use (holding)
if (ctrl == CON_Use || ctrl == CON_UseDelayed)
if (ctrl == CON_Use || ctrl == CON_UseAlt || ctrl == CON_UseDelayed || ctrl == CON_UseAltDelayed)
{
if (release)
{
@ -894,13 +905,15 @@ func ControlMovement2Script(int ctrl, int x, int y, int strength, bool repeat, b
// overloads of movement commandos
if (ctrl == CON_Left || ctrl == CON_Right || ctrl == CON_Down || ctrl == CON_Up || ctrl == CON_Jump)
{
var control = "Control";
if (Contained() == obj) control = "Contained";
var control_string = "Control";
if (Contained() == obj)
control_string = "Contained";
if (release)
{
// if any movement key has been released, ControlStop is called
if (obj->Call(Format("~%sStop",control),this,ctrl)) return true;
if (obj->Call(Format("~%sStop", control_string), this, ctrl))
return true;
}
else
{
@ -909,10 +922,10 @@ func ControlMovement2Script(int ctrl, int x, int y, int strength, bool repeat, b
return true;
// Control*
if (ctrl == CON_Left) if (obj->Call(Format("~%sLeft",control),this)) return true;
if (ctrl == CON_Right) if (obj->Call(Format("~%sRight",control),this)) return true;
if (ctrl == CON_Up) if (obj->Call(Format("~%sUp",control),this)) return true;
if (ctrl == CON_Down) if (obj->Call(Format("~%sDown",control),this)) return true;
if (ctrl == CON_Left) if (obj->Call(Format("~%sLeft",control_string),this)) return true;
if (ctrl == CON_Right) if (obj->Call(Format("~%sRight",control_string),this)) return true;
if (ctrl == CON_Up) if (obj->Call(Format("~%sUp",control_string),this)) return true;
if (ctrl == CON_Down) if (obj->Call(Format("~%sDown",control_string),this)) return true;
// for attached (e.g. horse: also Jump command
if (GetProcedure() == "ATTACH")

View File

@ -36,7 +36,7 @@ func Control2Menu(int ctrl, int x, int y, int strength, bool repeat, bool releas
// update angle for visual effect on the menu
if (repeat)
{
if (ctrl == CON_UseDelayed)
if (ctrl == CON_UseDelayed || ctrl == CON_UseAltDelayed)
this->GetMenu()->~UpdateCursor(mex,mey);
}
// click on menu
@ -132,7 +132,8 @@ public func TriggerHoldingControl()
if (/*this.control.current_object && */!this.control.noholdingcallbacks)
{
var ctrl = CON_UseDelayed;
if (this.control.alt)
ctrl = CON_UseAltDelayed;
ObjectControl(GetOwner(), ctrl, 0, 0, 0, true, false);
}

View File

@ -52,16 +52,6 @@ protected func RejectCollect(id def, object obj)
/*-- Control --*/
public func ControlUseStart(object clonk, int ix, int iy)
{
return UseAnyStart(clonk,ix,iy,0);
}
public func ControlUseAltStart(object clonk, int ix, int iy)
{
return UseAnyStart(clonk,ix,iy,1);
}
private func UseAnyStart(object clonk, int ix, int iy, int item)
{
var result = CheckForKeg(clonk);
if (!result)
@ -70,7 +60,7 @@ private func UseAnyStart(object clonk, int ix, int iy, int item)
return true;
}
if (!clonk->GetHandItem(item))
if (!clonk->GetHandItem(0))
{
PlayerMessage(clonk->GetOwner(),"$TxtNeedsAmmo$");
clonk->CancelUse();
@ -109,11 +99,6 @@ private func CheckForKeg(object clonk)
public func HoldingEnabled() { return true; }
public func ControlUseAltHolding(object clonk, int ix, int iy)
{
return ControlUseHolding(clonk, ix, iy);
}
local angPrec = 1000;
public func ControlUseHolding(object clonk, int ix, int iy)
@ -165,23 +150,12 @@ private func ConvertAngle(int angle)
public func ControlUseStop(object clonk, int ix, int iy)
{
return UseAnyStop(clonk,ix,iy,0);
}
public func ControlUseAltStop(object clonk, int ix, int iy)
{
return UseAnyStop(clonk,ix,iy,1);
}
private func UseAnyStop(object clonk, int ix, int iy, int item)
{
RemoveTrajectory(this);
if (!CheckForKeg(clonk))
return true;
var projectile = clonk->GetHandItem(item);
var projectile = clonk->GetHandItem(0);
if (!projectile) // Needs a projectile
{
PlayerMessage(clonk->GetOwner(),"$TxtNeedsAmmo$");
@ -219,11 +193,6 @@ public func ControlUseCancel()
return true;
}
public func ControlUseAltCancel()
{
return ControlUseCancel();
}
//Stops the player from shooting for the defined amount of frames
public func FxIntCooldownTimer(object target, effect, int timer)
{

View File

@ -81,26 +81,13 @@ public func ControlUseStart(object clonk)
return true;
}
public func ControlUseAltStart(object clonk)
{
return true;
}
public func HoldingEnabled() { return true; }
public func HoldingEnabled() { return true; }
public func ControlUseAnyHolding(object clonk, int x, int y)
{
ArmAnimation(x,y);
}
public func ControlUseHolding(object clonk, int x, int y)
{
ControlUseAnyHolding(clonk,x,y);
}
public func ControlUseAltHolding(object clonk, int x, int y)
{
ControlUseAnyHolding(clonk,x,y);
ArmAnimation(x,y);
return true;
}
public func DefinePower(int x, int y)
@ -122,26 +109,21 @@ public func DefinePower(int x, int y)
public func ArmAnimation(int x, int y)
{
var power = DefinePower(x,y);
var power = DefinePower(x, y);
SetAnimationPosition(aim_anim, Anim_Const(759 - (power * 759 / 100)));
}
public func ControlUseStop(object clonk, int x, int y)
{
DoFire(clonk,DefinePower(x,y),0);
}
public func ControlUseAltStop(object clonk, int x, int y)
{
DoFire(clonk,DefinePower(x,y),1);
DoFire(clonk, DefinePower(x,y));
}
public func ContainedUse(object clonk, int x, int y)
{
DoFire(clonk, 70, nil);
DoFire(clonk, 70);
}
protected func DoFire(object clonk, int power, int hand)
protected func DoFire(object clonk, int power)
{
//Fire the catapult!
// PlayAnimation("Launch", 5, Anim_Linear(0,0, GetAnimationLength("Launch"), 10, ANIM_Remove), Anim_Const(1000));
@ -151,10 +133,12 @@ protected func DoFire(object clonk, int power, int hand)
Sound("Catapult_Launch");
var projectile = nil;
if(Contents(0)) projectile = Contents(0); //Is clonk sitting in the catapult? Then (s)he shall be the projectile!
if (Contents(0))
projectile = Contents(0); //Is clonk sitting in the catapult? Then (s)he shall be the projectile!
else
if(clonk->GetHandItem(hand)) projectile = clonk->GetHandItem(hand); //otherwise, fire what is in the clonk's hand
if(projectile)
if(clonk->GetHandItem(0))
projectile = clonk->GetHandItem(0); //otherwise, fire what is in the clonk's hand
if (projectile)
{
//finding the spot of the catapult's arm depending on rotation
var i = 1;

View File

@ -97,6 +97,6 @@ global func IsCrewControl(int ctrl)
/** Control uses selected item */
global func IsUseControl(int ctrl)
{
if (ctrl == CON_Use) return true;
if (ctrl == CON_Use || ctrl == CON_UseAlt) return true;
return false;
}

View File

@ -246,6 +246,20 @@
Hold=1
SendCursorPos=1
[ControlDef]
Identifier=UseAlt
GUIName=$CON_UseAlt$
GUIDesc=$CON_UseAlt_Desc$
Hold=1
SendCursorPos=1
[ControlDef]
Identifier=UseAltDelayed
GUIName=$CON_UseAlt$
GUIDesc=$CON_UseAlt_Desc$
Hold=1
SendCursorPos=1
[ControlDef]
Identifier=CancelUse
@ -516,8 +530,7 @@
# Use Left mouse button
# Drop S+Left mouse button
# Throw Right mouse button
#
# UseAlt Shift + Left mouse button
# UseAlt Right mouse button (low priority)
#
# Interact Space
#
@ -666,6 +679,15 @@
GUIGroup=20
Control=Throw
[Assignment]
Key=Mouse1ButtonRight
Priority=80
GUIName=$KEY_MouseUseAlt$
GUIDesc=$KEY_MouseUseAlt_Desc$
GUIDisabled=1
GUIGroup=20
Control=UseAlt
# Zoom
[Assignment]

View File

@ -24,6 +24,8 @@ CON_Use=Benutzen
CON_Use_Desc=Benutzen des Gegenstandes in der Hand.
CON_Throw=Werfen
CON_Throw_Desc=Werfen des Gegenstandes in der Hand in die anvisierte Richtung.
CON_UseAlt=Use
CON_UseAlt_Desc=Use the item in the hand alternatively.
CON_Hotkey1=Hotkey 1
CON_Hotkey2=Hotkey 2
@ -68,6 +70,9 @@ KEY_MouseUse_Desc=Benutzen des Gegenstandes in der Hand.
KEY_MouseThrow=Werfen
KEY_MouseThrow_Desc=Werfen des Gegenstandes in der Hand.
KEY_MouseUseAlt=Use Alt
KEY_MouseUseAlt_Desc=Secondary use.
KEY_GamepadUse=Benutzen / Werfen
KEY_GamepadUse_Desc=Benutzen des Gegenstandes in der Hand. Falls der Gegenstand nicht benutzt werden kann, wird er stattdessen bei Loslassen der Taste in die Richtung geworfen in die mit dem Analog Stick gezielt wird.

View File

@ -25,6 +25,8 @@ CON_Use=Use
CON_Use_Desc=Use the item in the hand.
CON_Throw=Throw
CON_Throw_Desc=Throw the item in the hand into the aimed direction.
CON_UseAlt=Use
CON_UseAlt_Desc=Use the item in the hand alternatively.
CON_Hotkey1=Hotkey 1
CON_Hotkey2=Hotkey 2
@ -69,6 +71,9 @@ KEY_MouseUse_Desc=Use the item in the hand.
KEY_MouseThrow=Throw
KEY_MouseThrow_Desc=Throw the item in the hand.
KEY_MouseUseAlt=Use Alt
KEY_MouseUseAlt_Desc=Secondary use.
KEY_GamepadUse=Use / Throw
KEY_GamepadUse_Desc=Use the item in the hand. If the item cannot be used, it is thrown into the direction in which you aim with the analog stick on release.