Game Development Community

Character customization

by alex · in Torque 3D Professional · 01/11/2014 (7:04 am) · 6 replies

Hello,sorry to disturb you but I urgently need your help. They say that the engine supports Sharp(C#) and as I previously worked on a completely different engine, he read C# code but the question is that whether my code to take torque??Or it should be a little spoof...I wanted to create a system of choosing appearance character..and.. here is such a script:
public class RPG_Player : ProjectEntities.PlayerCharacter
       {

          private RPG_PlayerType _type = null;
          public new RPG_PlayerType Type
          {
             get { return _type;}
          }

          
          public class Customies
          {
             public enum Part
             {
                Head,
                Hair
             }
             
             internal RPG_Player Parrent;
             Dictionary<Part,List<string>> _Parts;
             
             [FieldSerialize]
             private string _Head;
             [FieldSerialize]
             private string _Hair;
             
             // &Atilde;&Acirc;&iquest;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12;b :)     
             string pathParts, pathHeads, pathHairs; 

             public Customies()
             {
                pathParts = "Types\Units\" + Parrent.Type.Name + "\parts";
                pathHeads = pathParts + "\heads"; 
                pathHairs = pathParts + "\hairs"; 
                
                if ( !Engine.FileSystem.VirtualDirectory.Exists( pathParts ) )            
                   Log.Warning( "&Atilde;&iuml;&iquest;&frac12;&Atilde;&Acirc;&cedil;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&micro;&Atilde;&Acirc;&ordm;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&frac34;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&cedil;&Atilde;‘&iuml;&iquest;&frac12; &Atilde;&Acirc;&frac12;&Atilde;&Acirc;&micro; &Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&micro;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&sup2;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&micro;&Atilde;‘&iuml;&iquest;&frac12;!", pathParts );
                // &Atilde;&Acirc;&cedil; &Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&deg;&Atilde;&Acirc;&ordm; &Atilde;&Acirc;&iquest;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&frac34;&Atilde;&Acirc;&sup2;&Atilde;&Acirc;&micro;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&micro;&Atilde;&Acirc;&frac14; &Atilde;&Acirc;&sup2;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&micro; &Atilde;&Acirc;&iquest;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&cedil;...
                
                _Parts = new Dictionary<RPG_Player.Customies.Part, List<string>>();
                // Find all part and save in lists
                _Parts.Add( Part.Head, new List<string>(Engine.FileSystem.VirtualDirectory.GetFiles( pathHeads, "*.mesh" ) ) );
                _Parts.Add( Part.Hair, new List<string>(Engine.FileSystem.VirtualDirectory.GetFiles( pathHairs, "*.mesh" ) ) );
             }
             
             public string Head
             {
                get { return _Head;}
             }
             public string Hair
             {
                get { return _Hair;}
             }
             
             public void Set( Part part, string Name )
             {
                if ( !_Parts[part].Contains( Name ) ) return;
                Parrent.AttachPart( part, Name );
                switch( part )
                {
                   case Part.Head:
                      _Head = Name;
                      break;
                   case Part.Hair:
                      _Hair = Name;
                      break;
                }
             }
          
          }
          
          [FieldSerialize]
          Customies customies;
          
          public RPG_Player()
          {
             customies = new RPG_Player.Customies();
             customies.Parrent = this;
          }
          
          
          public Customies Custom
          {
             get { return customies;}
          }
          
          
          internal void AttachPart( Customies.Part part, string Name )
          {
             MapObjectAttachedObject mobj;
             mobj = GetFirstAttachedObjectByAlias( part.ToString() );
             //       
             if ( mobj != null ) this.Detach( mobj );
             
             // &Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&frac34;&Atilde;&Acirc;&middot;&Atilde;&Acirc;&acute;&Atilde;&Acirc;&deg;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&frac14; &Atilde;&Acirc;&frac34;&Atilde;&Acirc;&plusmn;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&micro;&Atilde;&Acirc;&ordm;&Atilde;‘&iuml;&iquest;&frac12;    
             MapObjectAttachedMesh obj = new MapObjectAttachedMesh();    
             // &Atilde;&Acirc;&iquest;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&frac34;&Atilde;&Acirc;&plusmn;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&micro;&Atilde;&Acirc;&frac14; &Atilde;&Acirc;&iquest;&Atilde;&Acirc;&frac34;&Atilde;&Acirc;&raquo;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&cedil;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12; &Atilde;&Acirc;&ordm;&Atilde;&Acirc;&frac34;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12; &Atilde;&Acirc;&frac12;&Atilde;&Acirc;&deg; &Atilde;&Acirc;&ordm;&Atilde;&Acirc;&frac34;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&frac34;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12; &Atilde;&Acirc;&plusmn;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&acute;&Atilde;&Acirc;&micro;&Atilde;&Acirc;&frac14; &Atilde;&Acirc;&deg;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&deg;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&cedil;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12;      
             MapObjectAttachedMesh.MeshBoneSlot bone = GetBoneSlotFromAttachedMeshes( Name );
                                     
             // &Atilde;&Acirc;&micro;&Atilde;&Acirc;&para;&Atilde;&Acirc;&micro;&Atilde;&Acirc;&raquo;&Atilde;&Acirc;&cedil; &Atilde;&Acirc;&micro;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12; &Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&raquo;&Atilde;&Acirc;&frac34;&Atilde;‘&iuml;&iquest;&frac12;        
             if ( bone != null )        
             {           
                // &Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&ordm;&Atilde;&Acirc;&deg;&Atilde;&Acirc;&middot;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&sup2;&Atilde;&Acirc;&deg;&Atilde;&Acirc;&micro;&Atilde;&Acirc;&frac14; &Atilde;&Acirc;&ordm;&Atilde;&Acirc;&frac34;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12;           
                obj.BoneSlot = bone;       
             }         
             else // &Atilde;&Acirc;&cedil;&Atilde;&Acirc;&frac12;&Atilde;&Acirc;&deg;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&micro;         
             {              
                // &Atilde;&Acirc;&sup2;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&frac12;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12; &Atilde;&Acirc;&iquest;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&frac34;&Atilde;&Acirc;&iquest;&Atilde;&Acirc;&cedil;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&sup2;&Atilde;&Acirc;&deg;&Atilde;&Acirc;&micro;&Atilde;&Acirc;&frac14; &Atilde;&Acirc;&iquest;&Atilde;&Acirc;&frac34;&Atilde;&Acirc;&middot;&Atilde;&Acirc;&cedil;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&cedil;&Atilde;‘&iuml;&iquest;&frac12;, &Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&ordm;&Atilde;&Acirc;&deg;&Atilde;&Acirc;&raquo;&Atilde;&Acirc;&cedil;&Atilde;&Acirc;&frac12;&Atilde;&Acirc;&sup3; &Atilde;&Acirc;&cedil; &Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&acute; &Atilde;&Acirc;&cedil; &Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&iquest;...            
                obj.PositionOffset = Vec3.Zero;         
             }     
             // &Atilde;&Acirc;&middot;&Atilde;&Acirc;&deg;&Atilde;&Acirc;&acute;&Atilde;&Acirc;&deg;&Atilde;‘&iuml;&iquest;&frac12; &Atilde;&Acirc;&cedil;&Atilde;&Acirc;&frac14;&Atilde;‘&iuml;&iquest;&frac12; &Atilde;&Acirc;&frac14;&Atilde;&Acirc;&frac34;&Atilde;&Acirc;&acute;&Atilde;&Acirc;&micro;&Atilde;&Acirc;&raquo;&Atilde;&Acirc;&cedil;      
             obj.MeshName = Name;      
             // &Atilde;&Acirc;&middot;&Atilde;&Acirc;&deg;&Atilde;&Acirc;&acute;&Atilde;&Acirc;&deg;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&frac14; &Atilde;&Acirc;&iquest;&Atilde;&Acirc;&frac34;&Atilde;&Acirc;&raquo;&Atilde;&Acirc;&micro;     
             obj.Alias = part.ToString();
             // &Atilde;&Acirc;&deg;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&deg;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&cedil;&Atilde;&Acirc;&frac14; &Atilde;&Acirc;&ordm; &Atilde;&Acirc;&frac34;&Atilde;&Acirc;&plusmn;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;&Acirc;&micro;&Atilde;&Acirc;&ordm;&Atilde;‘&iuml;&iquest;&frac12;&Atilde;‘&iuml;&iquest;&frac12;      
             Attach( obj ); 
          }

       }


If there are errors or that it will not be able to Sest torque write to me and I will fix it:)
Thank you for your help:) Sorry for my english:))

About the author

Recent Threads


#1
01/11/2014 (7:09 am)
up theme
#2
01/11/2014 (7:14 am)
No.

There is a product that binds C# to the engine made by Winterleaf Entertainment called DotNetTorque.

And when posting code it's easier to surround it with MarkupLite code tags:
// so your code looks like this
public class RPG_Player : ProjectEntities.PlayerCharacter
{
  private RPG_PlayerType _type = null;
  public new RPG_PlayerType Type
  {
    get { return _type;}
  }
};
#3
01/11/2014 (7:16 am)

Thank you,that this script he will take with this addition, and the script does not need to change?
#4
01/11/2014 (7:22 am)
It's an engine script binding. It still uses constructs from the engine. It's just replacing TorqueScript with C#. If the RPG_Player class doesn't exist in the engine then I think what you'll end up with there is a script-side namespace that will have to be attached to an engine object at run-time:
// this is torquescript, but the concept remains the same
// the class field should really be set at the object's creation to 
// avoid issues with namespace re-definition.
%player = new Player()
{
  class="RPG_Player";
};
I'm pretty sure that any existing code you have will need to be adapted to work with T3D.
#5
01/11/2014 (7:26 am)

Stop I'm confused a little,so I have to use a torque script(torsion) or DotNetTorque??
#6
01/11/2014 (8:47 am)
@alex depends. DotNetTorque is a commercial product which you need to pay for (albeit there is a free version out there, but it doesn't provide engine source code).
If you want access to the engine source code, or simply want TorqueScript you can just download T3D.

If you want to pay you can pay for DotNetTorque, but I should say that we are working hard on releasing the OMNI engine, which will have a better implementation of C#.