Page 1 of 1
[Help 2] How to make function sleep for a period amount of time?
Posted: Thu Feb 08, 2018 1:11 am
by Pixir
Code: Select all
public void Spawn(TriggerArgs args){
Vector2 worldPosition = Vector2.Zero;
Random rnd = new Random();
int y = rnd.Next(-200,200);
int x = rnd.Next(-200,200);
IObject Crate = (IObject)Game.CreateObject("HangingCrateHolder",new Vector2(y,x), 0f);
Crate.SetBodyType(BodyType.Static);
IObjectOnDestroyedTrigger Trigger = (IObjectOnDestroyedTrigger)Game.CreateObject("OnDestroyedTrigger");
Trigger.SetTriggerDestroyObjects(Crate);
Score();
}
I'm trying to make a script that spawns random HangingCrateHolder(s) and detects when they were destroyed but it doesn't seem to work
Code: Select all
CS1502 The best overloaded method match for 'SFDGameScriptInterface.IObjectOnDestroyedTrigger.SetTriggerDestroyObjects(System.Collections.Generic.IEnumerable<SFDGameScriptInterface.IObject>)' has some invalid arguments @(26, 2) Trigger.SetTriggerDestroyObjects(Crate);
CS1503 Argument 1: cannot convert from 'SFDGameScriptInterface.IObject' to 'System.Collections.Generic.IEnumerable<SFDGameScriptInterface.IObject>' @(26, 35) Trigger.SetTriggerDestroyObjects(Crate);
Any help is appreciated
Re: Check if object destroyed
Posted: Thu Feb 08, 2018 11:31 am
by JakSparro98
Pixir wrote: ↑Thu Feb 08, 2018 1:11 am
Code: Select all
public void Spawn(TriggerArgs args){
Vector2 worldPosition = Vector2.Zero;
Random rnd = new Random();
int y = rnd.Next(-200,200);
int x = rnd.Next(-200,200);
IObject Crate = (IObject)Game.CreateObject("HangingCrateHolder",new Vector2(y,x), 0f);
Crate.SetBodyType(BodyType.Static);
IObjectOnDestroyedTrigger Trigger = (IObjectOnDestroyedTrigger)Game.CreateObject("OnDestroyedTrigger");
Trigger.SetTriggerDestroyObjects(Crate);
Score();
}
I'm trying to make a script that spawns random HangingCrateHolder(s) and detects when they were destroyed but it doesn't seem to work
Code: Select all
CS1502 The best overloaded method match for 'SFDGameScriptInterface.IObjectOnDestroyedTrigger.SetTriggerDestroyObjects(System.Collections.Generic.IEnumerable<SFDGameScriptInterface.IObject>)' has some invalid arguments @(26, 2) Trigger.SetTriggerDestroyObjects(Crate);
CS1503 Argument 1: cannot convert from 'SFDGameScriptInterface.IObject' to 'System.Collections.Generic.IEnumerable<SFDGameScriptInterface.IObject>' @(26, 35) Trigger.SetTriggerDestroyObjects(Crate);
Any help is appreciated
Since the method accepts Generic Collections and arrays you only need to include the object inside one them:
Code: Select all
//Using arrays
IObject[] Objects=new IObject[1];
Objects[0]=Crate;
Trigger.SetTriggerDestroyObjects(Objects);
or
Code: Select all
//Using lists
List<IObject> Objects = new List<IObject>();
Objects.Add(Crate);
Trigger.SetTriggerDestroyObjects(Objects);
Re: Check if object destroyed
Posted: Thu Feb 08, 2018 12:44 pm
by Pixir
Thank you it worked

Re: Check if object destroyed
Posted: Thu Feb 08, 2018 5:57 pm
by Pixir
Code: Select all
public void Spawn(TriggerArgs args){
Vector2 worldPosition = Vector2.Zero;
Random rnd = new Random();
int y = rnd.Next(-200,200);
int x = rnd.Next(-200,200);
IObject Crate = (IObject)Game.CreateObject("HangingCrateHolder",new Vector2(y,x), 0f);
Crate.SetBodyType(BodyType.Static);
Crate.CustomID ="Aim";
IObjectOnDestroyedTrigger Trigger = (IObjectOnDestroyedTrigger)Game.CreateObject("OnDestroyedTrigger");
IObject[] Objects=new IObject[1];
Objects[0]=Crate;
Trigger.SetTriggerDestroyObjects(Objects);
Trigger.CustomID="Aim5";
Trigger.SetScriptMethod("ScoreUp");
Score();
IObjectTimerTrigger Timer = (IObjectTimerTrigger)Game.CreateObject("TimerTrigger");
Timer.SetIntervalTime(3000);
Timer.SetRepeatCount(1);
Timer.SetScriptMethod(Delete(Crate,Trigger));
Timer.Trigger();
}
public void Delete(IObject Crate,IObjectOnDestroyedTrigger Trigger){
Trigger.Destroy();
Crate.Remove();
}
How to make the function to wait for 2000ms and then delete the trigger and the HangingCrateHolder?
Any help is appreciated
Re: [Help 2] How to make function sleep for a period amount of time?
Posted: Thu Feb 08, 2018 7:42 pm
by Gurt
Do a "fire and forget" update event.
Code: Select all
Events.UpdateCallback.Start((float e) => { yourTrigger.Remove(); }, 2000, 1);
First parameter is an Action<float>, second the minimum game time to elapse in milliseconds (2000 for 2 seconds) and the third is the repeat count. Set it to 1 to only trigger the action once.
Re: [Help 2] How to make function sleep for a period amount of time?
Posted: Fri Feb 09, 2018 10:57 am
by Pixir
Thank you it worked
