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 :D

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 :D