Beowulf Zessinthal Posted March 18, 2017 Posted March 18, 2017 When i first learnt to script (in LSL), i thought i had fallen into heaven So logical, so powerful .. ahh.. but soon in Sansar the scripting language will be C#. Im excited for the chance to see some comparative LSL vs C# examples. I will post a basic LSL script here.. would someone show me a reasonable C# version? Then maybe folk who already know both can post a few other examples? Title what the script does: LSL: Switch alpha values of object using a timer float alpha; default { state_entry(){ alpha= 1.0; llSetAlpha(alpha, ALL_SIDES); llSetTimerEvent(2); } timer(){ if(alpha == 1.0){ alpha= 0.4; } else{ alpha= 1.0; } llSetAlpha(alpha, ALL_SIDES); } }
Rachel1206 Posted March 19, 2017 Posted March 19, 2017 It would look like something like this in C#: float alpha= 1.0f; public void default_event_state_entry() { this.alpha = 1.0; this.llSetAlpha(alpha,ALL_SIDES); this.llSetTimerEvent(2); } public void default_event_timer() { switch( alpha ) { case 1.0: alpha = 0.4; break; default: alpha = 1.0; break; } this.llSetAlpha( alpha,ALL_SIDES); } For larger project C# will be superior and easier to code and control. The most notable difference in the above sample is the definition of default_event_state_entry, where you have to create event handlers for the basic events touch_start etc. Second the switch statement makes handling if-statements much easier. Compared to LSL there will be a little more code to write, but IMHO this is a small price to pay for much better programming control and logic.
Beowulf Zessinthal Posted March 19, 2017 Author Posted March 19, 2017 awesome thanks so much! .. i dont quite understand the detail of it yet of course but i will look at it really hard tomorrow and soak up 'how it looks' as a first step! That will be a big and exciting time for me! thanks again Rachel! 1
Beowulf Zessinthal Posted March 19, 2017 Author Posted March 19, 2017 Everyone .. please feel free to add in simple comparative examples if you think they can demonstrate some specific thing you are interested in showing about C#!
Beowulf Zessinthal Posted March 21, 2017 Author Posted March 21, 2017 am currently doing http://csharp.net-tutorials.com/ ..it seems very well presented^^
Madelaine McMasters Posted March 21, 2017 Posted March 21, 2017 I wonder if you'll find that the LSL/C# language differences will be dwarfed by the differences in simulation and scripting architecture between SL and Sansar. Most of the time you spent learning LSL was not in learning the language, but rather how the simulator, event system, physics, communications, UI, camera and other SL bits operate, and how the LSL function library lets you work them. 1
Beowulf Zessinthal Posted March 21, 2017 Author Posted March 21, 2017 (edited) Thats true Madelaine .. but as i cannot get in yet i am getting better acquainted with the things i will need to know. So later i will have less frustration^^ C# seems very doable after LSL .. so far only 1.5 days spent, but already im optimistic^^ Over the next few days i will watch a few youtube tutorials too. Bring it on baby! Edited March 21, 2017 by Beowulf Zessinthal
Lindens Kelly Linden Posted April 28, 2017 Lindens Posted April 28, 2017 C# in sansar will be a little more complicated to write, but also a bit easier to use. For example instead of configuration notecards, public variables are shown in the object's properties - right next to the rest of the object properties. The current API is pretty limited, and of note for your example there is no interface yet to the visual components of an object. So these examples are somewhat theoretical at this time. However except for VisualObject and its methods the below is how your script could look in Sansar. First is probably the closest to how LSL lays things out: // You have to include the libraries you want to use in C# using LindenLab.ServerScript; using System; // All scripts are a class that extends one of a selection of base classes. // The base classes decide what APIs are available and where the script could work. // This one works on an object. Some might be agent or scene(region) specific. public class AlphaChanger : ObjectScript { // Public fields in the base class get shown in the UI when editing public float HighAlpha = 1.0; public float LowAlpha = 0.4; public override void Init() { // Init is the place to set up callbacks and events. // There is a timer class, so here is one quick option. // Note that ChangeAlpha could be any method we create that takes a TimerData // Thus multiple timers are easy Timer.Create(TimeSpan.FromSeconds(2), ChangeAlpha); } public void ChangeAlpha(TimerData data) { // Hypothetical VisualObject is an interface to visual object APIs // This one has a hypothetical property to get and set the alpha if (VisualObject.Alpha == HighAlpha) { VisualObject.Alpha = LowAlpha; } else { VisualObject.Alpha = HighAlpha; } } } This is how I would probably actually write it in C#, but it is more dense and a little harder to read. // You have to include the libraries you want to use in C# using LindenLab.ServerScript; using System; // All scripts are a class that extends one of a selection of base classes. // The base classes decide what APIs are available and where the script could work. // This one works on an object. Some might be agent or scene(region) specific. public class AlphaChanger : ObjectScript { // Public fields in the base class get shown in the UI when editing public float HighAlpha = 1.0; public float LowAlpha = 0.4; public override void Init() { // Init is the place to set up callbacks and events. // This is a bit more dense, but C# supports anonymous methods inline so for simple actions on events this might be “easier”. Timer.Create(TimeSpan.FromSeconds(2), data => VisualObject.Alpha = (VisualObject.Alpha == HighAlpha) ? LowAlpha : HighAlpha); } } Lastly here is an overly fancy way to do it, that is overkill but some example of the power in Sansar's C#: // You have to include the libraries you want to use in C# using LindenLab.ServerScript; using System; // All scripts are a class that extends one of a selection of base classes. // The base classes decide what APIs are available and where the script could work. // This one works on an object. Some might be agent or scene(region) specific. public class AlphaChanger : ObjectScript { // Public fields in the base class get shown in the UI when editing public float HighAlpha = 1.0; public float LowAlpha = 0.4; public override void Init() { // Init is the place to set up callbacks and events. // We support coroutines, which are like mini scripts all themselves which can // be paused or wait for events independently of the rest of the script. // If you are doing something more complex than a toggle these can be a lot easier to read and write. StartCoroutine(ChangeAlpha); } public void ChangeAlpha() { // <side note here that this is overkill for this example, but is cool so I wanted to show it> while (true) { // Hypothetical VisualObject is an interface to visual object APIs // This one has a hypothetical property to get and set the alpha if (VisualObject.Alpha == HighAlpha) { VisualObject.Alpha = LowAlpha; } else { VisualObject.Alpha = HighAlpha; } // This will wait 2 seconds before continuing this loop. The rest of the script is not stopped. // For events there is also WaitFor(<event>) which would pause just this method until the event happens. Wait(TimeSpan.FromSeconds(2)); } } } 7
Beowulf Zessinthal Posted May 4, 2017 Author Posted May 4, 2017 Kelly .. i only just got to absorb this now ... Thanks so much for posting each of the three variations .. and i see the sense of the 'methods' involved .. i really enjoyed it!
Love Zhaoying Posted May 4, 2017 Posted May 4, 2017 Sounds like the Sansar flavor of C# will be Classy!
mikka Luik Posted May 4, 2017 Posted May 4, 2017 Thanks Kelly, scripting side is of my interest in new platform so... any clues on what within the API is in place? Pretty please ? =^^=
Lucia Nightfire Posted May 5, 2017 Posted May 5, 2017 Kelly's simple snippets have far more substance than all of Sansar's public PV's thus far, heh.
Rachel1206 Posted May 5, 2017 Posted May 5, 2017 Yes, and notice the usage of unity subroutines. Although this is SL/LSL, looking forward to a lift of the curtain to much more! using LindenLab.ServerScript.Secrets&Things2Come.FromKelly;
ellestones Posted May 25, 2017 Posted May 25, 2017 Quote On 4/29/2017 at 5:51 AM, Kelly Linden said: ... For example instead of configuration notecards, public variables are shown in the object's properties - right next to the rest of the object properties. The current API is pretty limited, and of note for your example there is no interface yet to the visual components of an object. That's seriously cool Even more cool when/if there will be a interface to visual components where class object public properties can be set at design time by the object owner. I can see an explosion of user -created components taking Sansar by storm should this be the case 1
Recommended Posts
Please take a moment to consider if this thread is worth bumping.
Please sign in to comment
You will be able to leave a comment after signing in
Sign In Now