示例#1
0
    //--------------------------------------------------------------------------------------
    // Methods (Static):
    //--------------------------------------------------------------------------------------

    #region bool Create(EntityXml, GameObject)

    /// <summary>
    /// Creates a new player entity.
    /// </summary>
    /// <param name="descriptor">The descriptor of the entity.</param>
    /// <param name="parent">The parent game object.</param>
    /// <returns>Returns if the entity have been created or not.</returns>
    public static bool Create(EntityXml descriptor, GameObject parent)
    {
        // Check the type of the descriptor:
        if (descriptor.Type.ToLower() != EntityType.PLAYER)
        {
            return(false);
        }

        // Check if the entity will be inside the world:
        var core  = CoreManager.Instance;
        var level = core.Level;
        var cell  = level.GetCell(descriptor.X, descriptor.Y);

        if (cell == null || cell.EntityObject != null)
        {
            return(false);
        }

        // Load all the sprites from the selected charset:
        var charset = core.CurrentProfile != null ?
                      core.CurrentProfile.Charset :
                      ProfileData.GetRandomCharset();
        var sprites = core.LoadGameSprites(ProfileData.CHARSET_FILE_BASE);

        // Create the player node inside the scene:
        var victim = new GameObject(CoreManager.PLAYER_GOBJ_NAME);

        SceneUtil.SetParent(victim, parent);
        SceneUtil.SetPosition(victim, cell.TerrainObject);

        // Create the sprite renderer component:
        var spriteRenderer = victim.AddComponent <SpriteRenderer>();
        var sprite         = sprites.Where(x => x.name == charset + IDLE_EXT).FirstOrDefault();

        spriteRenderer.sprite = sprite;

        // Create the audio source component:
        victim.AddComponent <AudioSource>();

        // Create the player behaviour component:
        var playerController = victim.AddComponent <PlayerController>();

        playerController.configure(charset, sprites);
        playerController.EnterCell(cell);

        // Everything is alright:
        return(true);
    }