コード例 #1
0
 public CustomizeCharacter(int nexonSN, CharacterTemplate templete, Dictionary <string, int> defaultItem, List <int> unlockSlot)
 {
     this.NexonSN     = nexonSN;
     this.Templete    = templete;
     this.DefaultItem = defaultItem;
     this.UnlockSlot  = unlockSlot;
 }
コード例 #2
0
ファイル: ScriptGameMaster.cs プロジェクト: ly774508966/VRG
    //unregistered character sheet, character sheet template -> unregistered character sheet of template
    CharacterSheet SetCharacterValues(CharacterSheet hotSheet, CharacterTemplate hotTemplate)
    {
        //Set name and update game object
        hotSheet.fullName        = hotTemplate.fullName;
        hotSheet.stringID        = string.Format("{0:00} {1}", hotSheet.characterID, hotSheet.fullName);
        hotSheet.gameObject.name = hotSheet.stringID;

        //Assign Colors
        hotSheet.primaryColor   = hotTemplate.primaryColor;
        hotSheet.secondaryColor = hotTemplate.secondaryColor;
        hotSheet.skinColor      = hotTemplate.skinColor;

        //Assign Stats
        hotSheet.toughness        = hotTemplate.characterStatProfile.toughness;
        hotSheet.currentFocus     = hotTemplate.characterStatProfile.focus;
        hotSheet.baseMuscle       = hotTemplate.characterStatProfile.muscle;
        hotSheet.baseBrawl        = hotTemplate.characterStatProfile.brawl;
        hotSheet.baseMelee        = hotTemplate.characterStatProfile.muscle;
        hotSheet.baseShot         = hotTemplate.characterStatProfile.shot;
        hotSheet.baseEvasion      = hotTemplate.characterStatProfile.evasion;
        hotSheet.baseIntelligence = hotTemplate.characterStatProfile.intelligence;
        hotSheet.basePresence     = hotTemplate.characterStatProfile.presence;

        return(hotSheet);
    }
コード例 #3
0
    public override void Init(CharacterTemplate chr)
    {
        var xhit = Physics2D.Raycast(chr.transform.position, chr.transform.right, distanceFromPlayer, 1 << LayerMask.NameToLayer("Ground"));

        if (!xhit)
        {
            var pos = chr.transform.position + chr.transform.right * distanceFromPlayer;

            var yhit = Physics2D.Raycast(pos, -transform.up, maxCastHeight, 1 << LayerMask.NameToLayer("Ground"));
            if (yhit)
            {
                transform.position = new Vector2(pos.x, yhit.transform.position.y);

                direction = transform.up;
                targetTag = chr.GetComponent <PlayerController>() ? "Enemy" : "Player";
            }
            else
            {
                Destroy(gameObject);
            }
        }
        else
        {
            Destroy(gameObject);
        }
    }
コード例 #4
0
        public async Task <int> UpdateAsync(CharacterTemplate character)
        {
            _context.Attach(character).State = EntityState.Modified;
            int changes = await _context.SaveChangesAsync();

            return(await Task.FromResult(changes));
        }
コード例 #5
0
        public async Task <int> CreateAsync(CharacterTemplate character)
        {
            _context.Characters.Add(character);
            int changes = await _context.SaveChangesAsync();

            return(await Task.FromResult(changes));
        }
コード例 #6
0
 public override void Init(CharacterTemplate chr)
 {
     //var player = FindObjectOfType<PlayerController>().transform;
     //transform.parent = player;
     player = chr.GetComponent <PlayerController>();
     base.Init(chr);
 }
コード例 #7
0
    // Finds the nearest PC;
    public void FindNearestPC()
    {
        // Initially set distance to a high number.
        nearestPCDistance = Mathf.Infinity;

        foreach (GameObject PC in pcList)
        {
            playerCharTemp = PC.GetComponent <CharacterTemplate>();
            if (playerCharTemp.isDead == false)
            {
                // Grabs the distance between this enemy and a PC in the array.
                float distance = Vector3.Distance(transform.position, PC.transform.position);

                if (distance < nearestPCDistance)
                {
                    nearestPC         = PC;
                    nearestPCDistance = distance;
                }
                MoveToNearestPC();
            }
            else
            {
                Debug.Log("NO TARGET");
                StopUnit();
            }
        }
    }
コード例 #8
0
        private static void ApplyMutations(CharacterTemplate buildTemplate, List <MLNode> mutationNodes)
        {
            if (!buildTemplate.genotypeEntry.IsMutant)
            {
                return;
            }
            Mutations part = buildTemplate.PlayerBody.GetPart <Mutations>();

            foreach (MLNode node in mutationNodes)
            {
                if (node.Entry != null && node.Selected > 0)
                {
                    if (node.Entry.Mutation != null)
                    {
                        BaseMutation baseMutation = node.Entry.CreateInstance();
                        baseMutation.SetVariant(node.Variant);
                        part.AddMutation(baseMutation, node.Selected);
                    }
                    else if (node.Entry.DisplayName == "Chimera")
                    {
                        buildTemplate.MutationLevel = "Chimera";
                    }
                    else if (node.Entry.DisplayName == "Esper")
                    {
                        buildTemplate.MutationLevel = "Esper";
                    }
                }
            }
        }
コード例 #9
0
ファイル: Attack.cs プロジェクト: jcfalcone/ZombieCraze
    public override void OnEnter()
    {
        base.OnEnter();
        this.target = this.parent.GetTarget();

        this.currTime = this.CoolDown;
    }
コード例 #10
0
        public static void DrawSpawn(MapSpawnValues spawn, ISpriteBatch spriteBatch, IDrawableMap map, Font font)
        {
            var spawnArea = spawn.SpawnArea;

            // Only draw if it does not cover the whole map
            if (!spawnArea.X.HasValue && !spawnArea.Y.HasValue && !spawnArea.Width.HasValue && !spawnArea.Height.HasValue)
            {
                return;
            }

            // Draw spawn area
            Vector2   cameraOffset = map.Camera.Min;
            Rectangle rect         = spawnArea.ToRectangle(map);

            rect.X -= (int)cameraOffset.X;
            rect.Y -= (int)cameraOffset.Y;
            RenderRectangle.Draw(spriteBatch, rect, new Color(0, 255, 0, 75), new Color(0, 0, 0, 125), 2);

            // Draw name
            CharacterTemplate charTemp = CharacterTemplateManager.Instance[spawn.CharacterTemplateID];

            if (charTemp != null)
            {
                string text = string.Format("{0}x {1} [{2}]", spawn.SpawnAmount, charTemp.TemplateTable.Name, spawn.CharacterTemplateID);

                Vector2 textPos = new Vector2(rect.X, rect.Y);
                textPos -= new Vector2(0, font.MeasureString(text).Y);
                textPos  = textPos.Round();

                spriteBatch.DrawStringShaded(font, text, textPos, Color.White, Color.Black);
            }
        }
コード例 #11
0
 private void WriteClass(CharacterTemplate a)
 {
     writer.Write(a.ID);
     writer.Write(a.Name);
     writer.Write(a.Description);
     writer.Write(a.HPperVIT);
     writer.Write(a.MPperINT);
     writer.Write(a.HPperLVL);
     writer.Write(a.MPperLVL);
     writer.Write((int)a.DamageStat);
     WriteDictionary(a.BaseStats);
     writer.Write(a.SkillTree.Entries.Count);
     foreach (SkillTreeEntry e in a.SkillTree.Entries)
     {
         WriteSkillTreeEntry(e);
     }
     writer.Write(a.StarterEquipment.Length);
     for (int i = 0; i < a.StarterEquipment.Length; i++)
     {
         if (a.StarterEquipment[i] == null)
         {
             writer.Write("null");
         }
         else
         {
             writer.Write(a.StarterEquipment[i].ID);
         }
     }
 }
コード例 #12
0
    //Function to select next PC.
    public void SelectNextPC()
    {
        moveScript = currentPC.GetComponent <MoveToClickPoint>();
        moveScript.SetCharacterInactive();

        currentPCIndex++;
        if (currentPCIndex == pcList.Length)
        {
            currentPCIndex = 0;
        }
        currentPC      = pcList[currentPCIndex];
        playerCharTemp = currentPC.GetComponent <CharacterTemplate>();

        while (playerCharTemp.isDead == true)
        {
            // ** BUG ** DEAD GUY STILL GETS SELECTED;
            // ** NEED TO CHECK LOSE CONDITION HERE **
            currentPCIndex++;
            if (currentPCIndex == pcList.Length)
            {
                currentPCIndex = 0;
            }
            currentPC      = pcList[currentPCIndex];
            playerCharTemp = currentPC.GetComponent <CharacterTemplate>();
        }

        moveScript = currentPC.GetComponent <MoveToClickPoint>();
        moveScript.SetCharacterActive();

        playerCamera.currentPCIndex = currentPCIndex;
        playerCamera.currentPC      = currentPC;
    }
コード例 #13
0
ファイル: PlayerPortrait.cs プロジェクト: sn31/UnityGame
    void Start()
    {
        foreach (GameObject portrait in GameObject.FindGameObjectsWithTag("Portrait"))
        {
            portraits.Add(portrait);
        }

        if (pcList == null)
        {
            UpdatePCList();
        }
        if (pcList.Length > 0)
        {
            for (int i = 3; i >= 0; i--)
            {
                Debug.Log("pc" + pcList.Length + " textures " + portraits.Count);
                img         = (RawImage)portraits[i].GetComponent <RawImage>();
                target      = pcList[i].GetComponent <CharacterTemplate>();
                img.texture = (Texture)target.Portrait;
            }
            // img = (RawImage)portraits[0].GetComponent<RawImage>();
            // img.texture = (Texture)text1;
            // img = (RawImage)portraits[1].GetComponent<RawImage>();
            // img.texture = (Texture)text2;
            // img = (RawImage)portraits[2].GetComponent<RawImage>();
            // img.texture = (Texture)text3;
            // img = (RawImage)portraits[3].GetComponent<RawImage>();
            // img.texture = (Texture)text4;
        }
    }
コード例 #14
0
    private bool AddCharacter(int newId = -1)
    {
        if (string.IsNullOrEmpty(charName.text))
        {
            return(false);
        }
        try
        {
            string name  = charName.text.Trim();
            int    race  = dicRace.Where(x => x.Value == charRace.options[charRace.value].text).FirstOrDefault().Key;
            float  move  = (float)Convert.ToDouble(string.IsNullOrEmpty(charMove.text) ? "0" : charMove.text);
            int    id    = newId == -1 ? (characters.Count > 0 ? characters.Select(x => x.id).Max() + 1 : 0) : newId;
            bool   enemy = charIsEnemy.isOn;
            if (characters.Where(x => x.name == name).Count() > 0)
            {
                Debug.LogError("Character exist");
                return(false);
            }

            if (!charIsEnemy.isOn && !AddLevelList(newId))
            {
                return(false);
            }

            CharacterTemplate newCharacter = new CharacterTemplate(id, name, race, move, enemy, characterLevels);
            characters.Add(newCharacter);
        }
        catch (Exception ex)
        {
            Debug.LogError(ex.Message);
            return(false);
        }
        return(true);
    }
コード例 #15
0
    private void LoadCharacter(string id)
    {
        CharacterTemplate temp = characters.Where(x => x.id.ToString() == id).First();

        if (temp != null)
        {
            charId           = temp.id;
            charName.text    = temp.name;
            charRace.value   = charRace.options.FindIndex(x => x.text == dicRace[(int)temp.race]);
            charMove.text    = temp.move.ToString();
            charIsEnemy.isOn = temp.enemy;

            SetCharWeapon();
            if (charIsEnemy.isOn)
            {
                characterLevels = temp.levelData;
            }
            else
            {
                charLevel.text   = temp.levelData[0].level.ToString();
                charExp.text     = temp.levelData[0].exp.ToString();
                charHP.text      = temp.levelData[0].hp.ToString();
                charAtk.text     = temp.levelData[0].atk.ToString();
                charDef.text     = temp.levelData[0].def.ToString();
                charWis.text     = temp.levelData[0].wis.ToString();
                charDex.text     = temp.levelData[0].dex.ToString();
                charMdef.text    = temp.levelData[0].mdef.ToString();
                charGold.text    = temp.levelData[0].gold.ToString();
                charWeapon.value = charWeapon.options.FindIndex(x => x.text == dicWeapon[(int)temp.levelData[0].equipWeapon]);

                charWeapon.RefreshShownValue();
            }
            ReloadCharacterLevel();
        }
    }
コード例 #16
0
        /// <summary>
        /// Updates a CombatEntity using a given template.
        /// </summary>
        /// <param name="template">The template used to update the CombatEntity.</param>
        /// <returns>Returns a read-only reference to the CombatEntity if the operation was successful. Else returns null.</returns>
        public async Task <IReadOnlyCombatEntity> UpdateAsync(CharacterTemplate template)
        {
            if (!template.EntityId.HasValue)
            {
                return(null);
            }
            CombatEntity entity;

            lock (_lock)
            {
                entity = _combatEntities.ContainsKey(template.EntityId.Value) ? _combatEntities[template.EntityId.Value] : null;
            }

            if (entity == null)
            {
                return(null);
            }

            var modified = await _combatEntityFactory.UpdateAsync(entity, template);

            if (modified == null)
            {
                return(null);
            }

            lock (_lock)
            {
                _combatEntities[modified.Id] = modified;
            }
            return(modified);
        }
コード例 #17
0
        /// <summary>
        /// Updates an existing combat entity with the template given asynchronously.
        /// <para>Will return null if the operation failed.</para>
        /// </summary>
        /// <param name="entity">The CombatEntity to update.</param>
        /// <param name="template">The template to use to update the entity with.</param>
        /// <returns>Returns the modified combat entity or null if no entity was modified.</returns>
        public async Task <CombatEntity> UpdateAsync(CombatEntity entity, CharacterTemplate template)
        {
            if (!await IsValidTemplateAsync(template))
            {
                return(null);
            }

            var hairData = await _characterHairRepo.GetDataAsync();

            var baseData = await _characterBaseRepo.GetDataAsync();

            try
            {
                // Find the corresponding iconUris and arrange them in the correct order
                var hair = hairData.First(h => h.Id == template.HairId).IconUri;

                entity.IconUris.HairIconUri = hair;
            }
            catch (ArgumentException e)
            {
                Console.WriteLine(e.Message);
                return(null);
            }

            entity.Name         = template.Name;
            entity.GroupId      = template.GroupId;
            entity.GrowthPoints = template.AllocatedStats;

            return(entity);
        }
コード例 #18
0
        public void TestNextRoundInitiative()
        {
            int periE = 33;
            int persE = 13;
            //Emptied peripheral
            CharacterTemplate basicTemplate  = new CharacterTemplate("Test", 5, periE, persE);
            Character         participantOne = new Character("Lucy", basicTemplate);

            Character participantTwo = new Character("Sabo", basicTemplate);

            CombatController cc = new CombatController();

            cc.AddCharacter(participantOne);
            cc.AddCharacter(participantTwo);

            participantOne.CurrentInitiative = 5;
            participantTwo.CurrentInitiative = 10;


            cc.NextRound();
            String[] expected = { "Sabo", "Lucy" };
            Assert.AreEqual(0, cc.initiativeList.IndexOfValue(expected[0]));
            Assert.AreEqual(1, cc.initiativeList.IndexOfValue(expected[1]));

            participantTwo.CurrentInitiative = 5;
            participantOne.CurrentInitiative = 10;

            cc.NextRound();
            Assert.AreEqual(1, cc.initiativeList.IndexOfValue(expected[0]));
            Assert.AreEqual(0, cc.initiativeList.IndexOfValue(expected[1]));
        }
コード例 #19
0
        public Character CreateCharacter(string code, object[] stats)
        {
            String        name          = (String)stats[0];
            int           essence       = (int)stats[1];
            int           willpower     = (int)stats[2];
            List <String> healthLevels  = (List <String>)stats[3];
            Boolean       isBattlegroup = (Boolean)stats[4];
            String        drill;
            int           size, might;
            int           persE = CalculatePersonalEssence(code, essence);
            int           periE = CalculatePeripheralEssence(code, essence);

            if (!isBattlegroup)
            {
                CharacterTemplate template = new CharacterTemplate(code, essence, willpower, periE, persE, healthLevels, false);
                Character         newChar  = new Character(name, template);
                return(newChar);
            }
            else
            {
                drill = (String)stats[5];
                size  = (int)stats[6];
                might = (int)stats[7];
                CharacterTemplate template    = new CharacterTemplate(code, essence, willpower, periE, persE, healthLevels, true);
                Battlegroup       battleGroup = new Battlegroup(name, template, might, size, drill);
                return(battleGroup);
            }
        }
コード例 #20
0
ファイル: Player.cs プロジェクト: jesst3r/3DGame
        public Player(CharacterTemplate CharacterClass, List <ModularAbility> skills)
        {
            this.Equipment = (Items.ItemEquip[])CharacterClass.StarterEquipment.Clone();
            this.Inventory = new Items.Inventory(64);
            foreach (KeyValuePair <string, float> basestat in CharacterClass.BaseStats)
            {
                this.StatBonuses.Add(new StatBonus()
                {
                    FlatValue = basestat.Value, Type = basestat.Key, Order = StatBonus.StatOrder.Template
                });
            }
            this.StatBonuses.Add(new StatBonus()
            {
                FlatValue = 100, Type = "MP", Order = StatBonus.StatOrder.Template
            });

            this.SkillTree       = CharacterClass.SkillTree;
            this.Camera.Distance = 15;
            this.Gravity         = false;
            this.JumpStrength    = 10;
            this.MaxJumps        = 2;

            this.Abilities = new List <ModularAbility>();
            foreach (SkillTreeEntry e in CharacterClass.SkillTree.Entries)
            {
                List <ModularAbility> found = skills.Where(x => x.ID == e.SkillID).ToList();
                if (found.Count != 1)
                {
                    continue;
                }
                this.Abilities.Add(found[0]);
            }
            LearnFromTree();
        }
コード例 #21
0
 public virtual void Init(CharacterTemplate chr)
 {
     //Debug.DrawRay(chr.transform.position, transform.right,Color.red,2f);
     targetTag          = chr.GetComponent <PlayerController>() ? "Enemy" : "Player";
     transform.position = chr.transform.position + (offset * chr.transform.right);
     direction          = chr.transform.right;
 }
コード例 #22
0
    public virtual void Picked(CharacterTemplate _char)
    {
        this.playerScore.value += this.ItemScore;
        this.OnScoreChange.Raise();

        ObjectManager.instance.Destroy(gameObject);
        parent.Picked();
    }
コード例 #23
0
ファイル: FollowPlayer.cs プロジェクト: jcfalcone/ZombieCraze
    public override void OnEnter()
    {
        base.OnEnter();
        this.target = this.parent.GetTarget();
        this.parent.GetAnimator().SetFloat("Speed", 1f);

        this.parent.SetSpeed(this.parentSpeedOnEnter);
    }
コード例 #24
0
 public CreateCharacter(string nexonID, int nexonSN, string name, CharacterTemplate template, bool isCheat, bool usePreset, bool isPremium)
 {
     this.NexonID   = nexonID;
     this.NexonSN   = nexonSN;
     this.Name      = name;
     this.Template  = template;
     this.IsCheat   = isCheat;
     this.UsePreset = usePreset;
     this.IsPremium = isPremium;
 }
コード例 #25
0
 private void classlist_DoubleClick(object sender, EventArgs e)
 {
     if (classlist.SelectedItems.Count != 1)
     {
         return;
     }
     CurrentClass = (CharacterTemplate)classlist.SelectedItem;
     EditCurrentClass();
     panel1.Refresh();
 }
コード例 #26
0
ファイル: Move.cs プロジェクト: tsubaki/TestArbor
    void Reset()
    {
        controller = new CharacterTemplate ();
        controller.animator = GetComponent<Animator> ();

        characterController = GetComponent<CharacterController> ();
        characterController.center = Vector3.up * 0.75f;
        characterController.height = 1.5f;
        characterController.radius = 0.3f;
    }
コード例 #27
0
        // Public Methods
        public async Task <CharacterTemplate> ReadAsync(int?id)
        {
            if (id == null)
            {
                return(null);
            }
            CharacterTemplate character = await _context.CharacterTemplates.FirstOrDefaultAsync(m => m.Id == id);

            return(await Task.FromResult(character));
        }
コード例 #28
0
        private CharacterTemplate ReadClass1()
        {
            CharacterTemplate result = CharacterTemplate.CreateEmpty(reader.ReadString());

            result.Name        = reader.ReadString();
            result.Description = reader.ReadString();
            result.HPperVIT    = reader.ReadInt32();
            result.MPperINT    = reader.ReadInt32();
            result.HPperLVL    = reader.ReadInt32();
            result.MPperLVL    = reader.ReadInt32();
            CharacterTemplate.Attrubutes setstat;
            switch (reader.ReadInt32())
            {
            case 0:
            {
                setstat = CharacterTemplate.Attrubutes.STR;
                break;
            }

            case 1:
            {
                setstat = CharacterTemplate.Attrubutes.DEX;
                break;
            }

            case 2:
            default:
            {
                setstat = CharacterTemplate.Attrubutes.INT;
                break;
            }
            }
            result.DamageStat = setstat;


            result.ArmourPreference = (CharacterTemplate.ArmourTypes)reader.ReadInt32();

            result.WeaponPreferenceIDs = ReadListOfString();

            result.BaseStats = ReadDictionary();
            int skillcount = reader.ReadInt32();

            for (int i = 0; i < skillcount; i++)
            {
                result.SkillTree.Entries.Add(ReadSkillTreeEntry());
            }
            List <string> invnentoryIDs  = new List <string>();
            int           inventorycount = reader.ReadInt32();

            for (int i = 0; i < inventorycount; i++)
            {
                invnentoryIDs.Add(reader.ReadString());
            }
            return(result);
        }
コード例 #29
0
        /// <summary>
        /// Creates and returns a CombatEntity from a given template.
        /// </summary>
        /// <param name="template">The template used to insert spawn the CombatEntity.</param>
        /// <returns>Returns a read-only reference to the CombatEntity if the operation was successful. Else returns null.</returns>
        public async Task <IReadOnlyCombatEntity> CreateAsync(CharacterTemplate template)
        {
            var entity = await _combatEntityFactory.CreateAsync(template);

            lock (_lock)
            {
                _combatEntities.Add(entity.Id, entity);
            }

            return(entity);
        }
コード例 #30
0
    public override void Picked(CharacterTemplate _char)
    {
        WeaponTemplate weapon = _char.GetWeapon();

        if (weapon != null)
        {
            weapon.AddBullet(this.bulletAmount);

            base.Picked(_char);
        }
    }
コード例 #31
0
ファイル: HealthPack.cs プロジェクト: jcfalcone/ZombieCraze
    public override void Picked(CharacterTemplate _char)
    {
        if (_char.IsFullHealth())
        {
            return;
        }

        _char.AddHealth(this.healthAmount);

        base.Picked(_char);
    }
コード例 #32
0
    void OnGUI()
    {
        if (!skin) skin = Resources.Load("skin") as GUISkin;
        GUI.skin = skin;
        this.minSize = rect;
        this.titleContent = new GUIContent("Character", null, "3rd Person Character Creator");
        if (templateNames == null) templateNames = new List<string>();
        if (templates == null) return;
        foreach (CharacterTemplate template in templates)
        {
            if (!templateNames.Contains(template.name))
                templateNames.Add(template.name);
        }
        GUILayout.BeginVertical ("box");
        if (templates.Count > 0)
        {
            EditorGUILayout.Space();
            GUILayout.BeginHorizontal("box");
            selectedTemplate = EditorGUILayout.Popup("Character Template", selectedTemplate, templateNames.ToArray());
            GUILayout.EndHorizontal();
            currentTemplate = templates[selectedTemplate];
        }
        else
        {
            EditorGUILayout.HelpBox("Can't find a Character Template\nPlease create Template in\n3rd Person Controller>Resources>New Character Template ", MessageType.Error);
        }
        var currentEvent = Event.current;

        buttomRect = GUILayoutUtility.GetLastRect();
        buttomRect.position = new Vector2(0, buttomRect.position.y);
        buttomRect.width = this.maxSize.x;

        if (buttomRect.Contains(currentEvent.mousePosition) || templates == null)
        {
            templates = new List<CharacterTemplate>();
            LoadAllAssets(Application.dataPath, ref templates);
        }

        if (!isValidTemplate())
        {
            EditorGUILayout.HelpBox("The Character Template is null or incomplete", MessageType.Error);
            GUILayout.EndVertical ();
            GUILayout.FlexibleSpace();
            return;
        }
        if (!charObj)EditorGUILayout.HelpBox("Make sure your FBX model is select as Humanoid!",MessageType.Info);
        else
        if (!charExist) {
            EditorGUILayout.HelpBox ("Missing a Animator Component", MessageType.Error);

        } else if (!isHuman)
            EditorGUILayout.HelpBox ("This is not a Humanoid", MessageType.Error);
        else if (!isValidAvatar)
            EditorGUILayout.HelpBox (charObj.name + " is a invalid Humanoid", MessageType.Info);

        GUILayout.BeginHorizontal("box");

        charObj = EditorGUILayout.ObjectField("FBX Model", charObj, typeof(GameObject), true, GUILayout.ExpandWidth(true)) as GameObject;

        if (GUI.changed && charObj !=null)
            humanoidpreview = Editor.CreateEditor(charObj);

        GUILayout.EndHorizontal();
        EditorGUILayout.Space();
        if(charObj)
            charAnimator = charObj.GetComponent<Animator>();
        charExist = charAnimator != null;
        isHuman = charExist?charAnimator.isHuman:false;
        isValidAvatar = charExist?charAnimator.avatar.isValid:false;

        if (CanCreate ())
        {
            DrawHumanoidPreview ();
            GUILayout.BeginHorizontal();
            GUILayout.FlexibleSpace();
            if (GUILayout.Button ("Create"))
                Create ();
            GUILayout.FlexibleSpace();
            GUILayout.EndHorizontal();
        }

        EditorGUILayout.Space();
        GUILayout.EndVertical ();
    }