forked from Mirrors/openclonk
Add sequence trigger: Object enters region (rectangle or circle)
parent
30f62f6a43
commit
490e92bc4e
|
@ -351,8 +351,16 @@ public func Definition(def)
|
|||
def.EditorProps.finished = { Name="$Finished$", Type="bool", Set="SetFinished" };
|
||||
def.EditorProps.trigger = { Name="$Trigger$", Type="enum", OptionKey="Trigger", Set="SetTrigger", Options = [
|
||||
{ Name="$None$" },
|
||||
{ Name="$EnterRegionRect$", Value={ Trigger="enter_region_rect", Rect=[-20, -20, 40, 40] }, ValueKey="Rect", Delegate={ Type="rect", Color=0xff8000, Relative=true, Set="SetTriggerRect", SetRoot=true } },
|
||||
{ Name="$EnterRegionCircle$", Value={ Trigger="enter_region_circle", Radius=25 }, ValueKey="Radius", Delegate={ Type="circle", Color=0xff8000, Relative=true, Set="SetTriggerRadius", SetRoot=true } },
|
||||
{ Name="$PlayerEnterRegionRect$", EditorHelp="$PlayerEnterRegionHelp$", Value={ Trigger="player_enter_region_rect", Rect=[-20, -20, 40, 40] }, ValueKey="Rect", Delegate={ Type="rect", Color=0xff8000, Relative=true, Set="SetTriggerRect", SetRoot=true } },
|
||||
{ Name="$PlayerEnterRegionCircle$", EditorHelp="$PlayerEnterRegionHelp$", Value={ Trigger="player_enter_region_circle", Radius=25 }, ValueKey="Radius", Delegate={ Type="circle", Color=0xff8000, Relative=true, Set="SetTriggerRadius", SetRoot=true } },
|
||||
{ Name="$ObjectEnterRegionRect$", EditorHelp="$ObjectEnterRegionHelp$", Value={ Trigger="object_enter_region_rect", Rect=[-20, -20, 40, 40] }, Delegate={ Name="$ObjectEnterRegionRect$", EditorHelp="$ObjectEnterRegionHelp$", Type="proplist", EditorProps = {
|
||||
ID = { Name="$ID$", EditorHelp="$IDHelp$", Type="def", Set="SetTriggerID", SetRoot=true },
|
||||
Rect = { Type="rect", Color=0xff8000, Relative=true, Set="SetTriggerRect", SetRoot=true }
|
||||
} } },
|
||||
{ Name="$ObjectEnterRegionCircle$", EditorHelp="$ObjectEnterRegionHelp$", Value={ Trigger="object_enter_region_circle", Radius=25 }, Delegate={ Name="$ObjectEnterRegionCircle$", EditorHelp="$ObjectEnterRegionHelp$", Type="proplist", EditorProps = {
|
||||
ID = { Name="$ID$", EditorHelp="$IDHelp$", Type="def", Set="SetTriggerID", SetRoot=true },
|
||||
Radius = { Type="circle", Color=0xff8000, Relative=true, Set="SetTriggerRadius", SetRoot=true }
|
||||
} } },
|
||||
{ Name="$GameStart$", Value={ Trigger="game_start" } },
|
||||
{ Name="$PlayerJoin$", Value={ Trigger="player_join" } },
|
||||
{ Name="$PlayerRemove$", Value={ Trigger="player_remove" } },
|
||||
|
@ -403,6 +411,16 @@ public func SetTriggerRadius(int new_trigger_radius)
|
|||
return true;
|
||||
}
|
||||
|
||||
public func SetTriggerID(id new_id)
|
||||
{
|
||||
if (trigger)
|
||||
{
|
||||
trigger.ID = new_id;
|
||||
SetTrigger(trigger); // restart trigger
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public func SetAction(new_action, new_action_progress_mode, new_action_allow_parallel)
|
||||
{
|
||||
action = new_action;
|
||||
|
@ -445,16 +463,28 @@ public func StartTrigger()
|
|||
if (!trigger) return false;
|
||||
SetGraphics("Active");
|
||||
var fn = trigger.Trigger;
|
||||
if (fn == "enter_region_rect")
|
||||
var id_search;
|
||||
if (trigger.ID) id_search = Find_ID(trigger.ID);
|
||||
if (fn == "player_enter_region_rect")
|
||||
{
|
||||
this.search_mask = Find_And(Find_InRect(trigger.Rect[0], trigger.Rect[1], trigger.Rect[2], trigger.Rect[3]), Find_OCF(OCF_Alive), Find_Func("IsClonk"), Find_Not(Find_Owner(NO_OWNER)));
|
||||
AddTimer(this.EnterRegionTimer, check_interval);
|
||||
}
|
||||
else if (fn == "enter_region_circle")
|
||||
else if (fn == "player_enter_region_circle")
|
||||
{
|
||||
this.search_mask = Find_And(Find_Distance(trigger.Radius), Find_OCF(OCF_Alive), Find_Func("IsClonk"), Find_Not(Find_Owner(NO_OWNER)));
|
||||
AddTimer(this.EnterRegionTimer, check_interval);
|
||||
}
|
||||
else if (fn == "object_enter_region_rect")
|
||||
{
|
||||
this.search_mask = Find_And(Find_InRect(trigger.Rect[0], trigger.Rect[1], trigger.Rect[2], trigger.Rect[3]), id_search);
|
||||
AddTimer(this.EnterRegionTimer, check_interval);
|
||||
}
|
||||
else if (fn == "object_enter_region_circle")
|
||||
{
|
||||
this.search_mask = Find_And(Find_Distance(trigger.Radius), Find_OCF(OCF_Alive), Find_Func("IsClonk"), id_search);
|
||||
AddTimer(this.EnterRegionTimer, check_interval);
|
||||
}
|
||||
else return false;
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -5,8 +5,9 @@ Active=Aktiv
|
|||
Finished=Sequenz beendet
|
||||
Trigger=Ausloeser
|
||||
None=Nichts
|
||||
EnterRegionRect=Spieler betritt Bereich (Rechteck)
|
||||
EnterRegionCircle=Spieler betritt Bereich (Radius)
|
||||
PlayerEnterRegionRect=Spieler betritt Bereich (Rechteck)
|
||||
PlayerEnterRegionCircle=Spieler betritt Bereich (Radius)
|
||||
PlayerEnterRegionHelp=Wird ausgeloest, wenn der Clonk eines Spielers im angegebenen Bereich gefunden wird.
|
||||
DeactivateAfterAction=Nur einmal ausfuehren
|
||||
GameStart=Spielstart
|
||||
PlayerJoin=Spielerbeitritt
|
||||
|
@ -20,3 +21,8 @@ AnyClonkDeath=Beliebiger Clonk stirbt
|
|||
PlayerClonkDeath=Spielerclonk stirbt
|
||||
NeutralClonkDeath=Neutraler Clonk stirbt
|
||||
SpecificClonkDeath=Bestimmer Clonk stirbt...
|
||||
ObjectEnterRegionRect=Objektyp in Bereich (Rechteck)
|
||||
ObjectEnterRegionHelp=Wird ausgeloest, wenn ein Objekt von einem bestimmten Typ im angegebenen Bereich gefunden wird.
|
||||
ID=Objekttyp
|
||||
IDHelp=Typ des Objektes, nach dem gesucht wird. Bei nichtangabe werden alle Objekte gefunden.
|
||||
ObjectEnterRegionCircle=Objektyp in Bereich (Radius)
|
||||
|
|
|
@ -5,8 +5,9 @@ Active=Active
|
|||
Finished=Finished
|
||||
Trigger=Trigger
|
||||
None=None
|
||||
EnterRegionRect=Player enters region (rectangle)
|
||||
EnterRegionCircle=Player enters region (radius)
|
||||
PlayerEnterRegionRect=Player enters rectangle
|
||||
PlayerEnterRegionCircle=Player enters radius
|
||||
PlayerEnterRegionHelp=Triggered when a player's clonk enters the specified region.
|
||||
DeactivateAfterAction=Run once only
|
||||
GameStart=Game start
|
||||
PlayerJoin=Player join
|
||||
|
@ -20,3 +21,8 @@ AnyClonkDeath=Any clonk dies
|
|||
PlayerClonkDeath=Player clonk dies
|
||||
NeutralClonkDeath=Neutral clonk dies
|
||||
SpecificClonkDeath=Specific clonk dies...
|
||||
ObjectEnterRegionRect=Object enters rectangle
|
||||
ObjectEnterRegionHelp=Triggered when an object of a specified type is found in the specified region.
|
||||
ID=Object type
|
||||
IDHelp=Definition of object type that triggers this sequence. If nil, any object triggers the sequence.
|
||||
ObjectEnterRegionCircle=Object of type enters radius
|
||||
|
|
Loading…
Reference in New Issue