Re: embedding scripting into a program:a few questions

  • From: Tyler Littlefield <tyler@xxxxxxxxxxxxx>
  • To: programmingblind@xxxxxxxxxxxxx
  • Date: Mon, 8 Mar 2010 08:34:02 -0700

Hello Laura,
Yes; the project is open source. I put up a basic version for people to look 
at, and I'm working on making a 2.0 which has a ton of new features that 1.0 is 
lacking in, along with bug fixes and etc.

I'm not quite sure how angelscript handles some of what it does, it's really 
limited in documentation in a lot of cases. I'm going to try the python 
approach Ken suggested and see where that gets me, that may be what I need to 
set up.
                Thanks,
Tyler Littlefield
        http://tds-solutions.net
        Twitter: sorressean

On Mar 8, 2010, at 8:22 AM, qubit wrote:

> Hi Ty --
> Sounds like you've got a good design in mind.
> So an event is a class with a list of callbacks...  Well you don't have to 
> describe your whole system.  I just was interested in your approach.
> As for your scripting language, if you want it to do OO types of things, it 
> should have some of the features of C++, and this would also make 
> interfacing between your C++ base and the scripted portions a lot easier.
> Does AngelScript do that?
> Good luck, and if you want more feedback feel free to post.
> Is your project open source?
> --le
> 
> ----- Original Message ----- 
> From: "Tyler Littlefield" <tyler@xxxxxxxxxxxxx>
> To: <programmingblind@xxxxxxxxxxxxx>
> Sent: Sunday, March 07, 2010 9:07 PM
> Subject: Re: embedding scripting into a program:a few questions
> 
> 
> Hello Laura,
> basically events are defined as a class, you can use += and -= to add and/or 
> remove callbacks from the event, when the .invoke method is called, it will 
> iterate through the list of callbacks and fire those.
> So, essentially the idea is to be able to do something like: 
> player.OnConnect+=myfunc from the scripting language.
> 
> In answer to your other question(s), I think. Basically i have a component 
> class, and each class that inherits that can add it's own functionality. So 
> the components are a plugin of sorts. For example, one component will hold 
> stats like strength, dexterity, constitution, agility, inteligence, etc. 
> That means that I can add this component to both players and mobs.
> 
> Now, in the scripting language I use, I'd like to allow for builders/coders 
> with the scripting ability to create a component from the scripting side of 
> things. So maybe they want to add a component that will allow for a bot to 
> talk to players. They could code the player-interaction component in using 
> room-based events, and then every mob with player-interaction capabilities 
> would just have to add that component to themselves and they'd be set. While 
> this may be easier to just keep in c++, I'd really like to allow for people 
> that don't know c++ so well to script this in with just as much ease.
> 
> In answer to another question: I don't have a language picked out quite yet, 
> that was sort of the idea of sending a message to the list. I'm looking for 
> some ideas on what to use, and maybe some pointers on how to achieve what I 
> want, as I haven't done this before.
> 
> Thanks,
> Tyler Littlefield
> http://tds-solutions.net
> Twitter: sorressean
> 
> On Mar 7, 2010, at 7:53 PM, qubit wrote:
> 
>> Hi Ty --
>> Ah, then you will have C++ versus a scripting language.
>> Could you elaborate on the nature of the scripting language? You say you
>> want to embed scripts in a program -- and that the script shouldn't 
>> control
>> the program, but rather interact with it, controling 1 component?
>> 
>> You want the component to be able to call C++ methods, but you also want 
>> the
>> c++ part to be able to grab onto and control parts of the scripted
>> components, right?
>> 
>> This is actually not hard, if you consider making it possible to send an
>> event or signal to the scripted component telling it to do something. How 
>> is
>> your base handling events?
>> 
>> Also, it sounds as if you haven't chosen a scripting language yet.    Does
>> the language you are looking at provide a good translator and mechanism 
>> for
>> interfacing with the underlying code? (Actually, I'm sure it must, as 
>> that's
>> what a scripting language is for.)
>> 
>> Since I have not been one to hang out in MUD's, I confess I'm not that
>> familiar with the end result of your base.
>> 
>> You want to provide a base and scripting language for someone to use to
>> construct their own MUD?  Or are you implementing a MUD right now?
>> 
>> In any case, let me know so I can be clear.  I'm up for a good puzzle 
>> right
>> now...
>> Happy hacking.
>> --le
>> 
>> 
>> ----- Original Message ----- 
>> From: "Tyler Littlefield" <tyler@xxxxxxxxxxxxx>
>> To: <programmingblind@xxxxxxxxxxxxx>
>> Sent: Sunday, March 07, 2010 8:29 PM
>> Subject: Re: embedding scripting into a program:a few questions
>> 
>> 
>> Hello Laura,
>> The idea is that the world class be able to be exposed to the language--I
>> don't need to add methods to the world class. What I do need to do, and 
>> what
>> seems to be causing the issue is the component setup; All components will 
>> be
>> loaded at startup and as they're added, but I need to be able to inherit 
>> the
>> c++ component class and add to it in order to create scripted components,
>> then I can just register them with the world class.
>> The issue is making the scripted components be usable. Obviously I can't
>> access a scripted component from c++, or I could through it's basic
>> functionality, but the idea is for the components to be able to be added 
>> to
>> any object whether scripted or not.
>> 
>> Thanks,
>> Tyler Littlefield
>> http://tds-solutions.net
>> Twitter: sorressean
>> 
>> On Mar 7, 2010, at 7:23 PM, qubit wrote:
>> 
>>> Hi Ty --
>>> Did I read once that your base is implemented in C++?
>>> Let me clarify what you are saying you want to do:
>>> 1. class A in your scripting language needs to interface with class World
>>> in
>>> your base, and use its methods, and also to add methods of its own, and 
>>> to
>>> do this dynamically. Right?
>>> 2. These new methods need to access class World in some way.  Do they 
>>> need
>>> to go so far as to touch private or protected data?  Since you want
>>> dynamic
>>> insertion/removal of methods in class A, these methods will need to be
>>> able
>>> to work with World without being members of World.
>>> 3. As an aside, you could of course dynamically create a new inherited
>>> class
>>> C for each method m(), which is derived from World and therefore can use
>>> World's protected and public data.    m() can be a virtual or nonvirtual
>>> method.  But this all has to be done in the interface to your scripting
>>> language.  This is an interesting problem, as it almost requires that the
>>> scripting language have the same inheritance structure as C++ to make the
>>> implementation fall out cleanly.  But who ever heard of a clean
>>> implementation in the "real world"...*smile*
>>> Now, if your implementation goes so far as to create derived classes with
>>> their own virtual table for each function added to A, you will need some
>>> dynamic linking to pull it off.
>>> I'll have to think on this one for a while.
>>> 
>>> Hey Ty, great job picking an interesting project.  That should go really
>>> well on a resumé.
>>> Happy hacking.
>>> --le
>>> 
>>> ----- Original Message ----- 
>>> From: "Tyler Littlefield" <tyler@xxxxxxxxxxxxx>
>>> To: <programmingblind@xxxxxxxxxxxxx>
>>> Sent: Sunday, March 07, 2010 6:12 PM
>>> Subject: embedding scripting into a program:a few questions
>>> 
>>> 
>>> Hello all,
>>> As some of you may know, I'm working on a custom mud base that I will be
>>> releasing to the public and probably using for my own mud in the near
>>> future.
>>> I've got most of the stuff I want handled, except scripting; I was told 
>>> to
>>> use Angelscript and was taking a look at it, but it seems to not be to
>>> well
>>> documented, so maybe someone has another idea.
>>> 
>>> What I want, is to be able to make the world class (which stores a list 
>>> of
>>> players, rooms, mobs, etc) accessible to the scripting language I use.
>>> Secondly, I want to expose events so that the language can attach it's 
>>> own
>>> functions to them.
>>> Third and possibly more dificult, I want to expose my component system,
>>> which I will explain.
>>> 
>>> Rather than using a is-a setup (through inheritance), I decided to go 
>>> with
>>> a
>>> has-a setup. This provides some really cool ideas for design, such as
>>> being
>>> able to let clothing use containers if you decide that your shorts need
>>> pockets, without either moving container functionality up the 
>>> inheritance,
>>> or using a multiple-inheritance setup, which can become messy. So, the
>>> components get loaded with the object from a list. I can easily use an
>>> AddComponent function to add the component to the list, but I'd like to
>>> allow builders and coders that I don't want using shell or that have an
>>> idea
>>> for a component to be able to build one in the language of choice, then
>>> register it with the dictionary that is used for holding components and
>>> allowing other objects to use this setup. So, in short I need a sort of
>>> transparent way to communicate back and forth, and not for the scripting
>>> language of choice to just control the driver, etc.
>>> 
>>> Thanks,
>>> Tyler Littlefield
>>> http://tds-solutions.net
>>> Twitter: sorressean
>>> 
>>> __________
>>> View the list's information and change your settings at
>>> //www.freelists.org/list/programmingblind
>>> 
>>> __________
>>> View the list's information and change your settings at
>>> //www.freelists.org/list/programmingblind
>> 
>> __________
>> View the list's information and change your settings at
>> //www.freelists.org/list/programmingblind
>> 
>> __________
>> View the list's information and change your settings at
>> //www.freelists.org/list/programmingblind
> 
> __________
> View the list's information and change your settings at
> //www.freelists.org/list/programmingblind
> 
> __________
> View the list's information and change your settings at 
> //www.freelists.org/list/programmingblind

__________
View the list's information and change your settings at
//www.freelists.org/list/programmingblind

Other related posts: