Ejemplo n.º 1
0
        public void SetSubRace(string subRaceId)
        {
            SaveSubRaceID = subRaceId;

            //Spawn available characters and select first
            CharacterContainer.transform.DestroyChildren();
            var applicableCharacters = RPG.Player.CharacterDefinitions.Where(
                s =>
                s.ApplicableRaceID == SaveRaceID && s.ApplicableSubRaceID == SaveSubRaceID).ToList();

            bool firstApplicableCharacterSet      = false;
            Rm_ClassDefinition     firstCharacter = null;
            Rm_ClassNameDefinition firstClass     = null;

            //For each class that is within applicable characters, spawn class icon with details of the applicable character
            //Note: We are using both character and class definition details
            foreach (var classDef in RPG.Player.ClassNameDefinitions)
            {
                var applicableCharacter =
                    applicableCharacters.FirstOrDefault(c => c.ApplicableClassIDs.Any(a => a.ID == classDef.ID));
                if (applicableCharacter != null)
                {
                    if (!firstApplicableCharacterSet)
                    {
                        firstCharacter = applicableCharacter;
                        firstClass     = classDef;
                        firstApplicableCharacterSet = true;
                    }

                    var go = Instantiate(CharacterSelectPrefab, Vector3.zero, Quaternion.identity) as GameObject;
                    go.transform.SetParent(CharacterContainer.transform, false);
                    var classSelectModel = go.GetComponent <CharacterSelectModel>();
                    classSelectModel.ClassNameID = classDef.ID;
                    classSelectModel.CharacterID = applicableCharacter.ID;

                    if (classSelectModel.ButtonImage != null)
                    {
                        classSelectModel.ButtonImage.sprite = GeneralMethods.CreateSprite(classDef.Image.Image);
                    }
                }
            }

            if (firstCharacter == null)
            {
                throw new Exception("[RPGAIO] Could not find any character's for this subrace. Please check at least one character falls into this category.");
            }

            //Set descriptions and titles
            if (SubRaceInfoPanel != null)
            {
                var subRaceDefinition = RPG.Player.GetSubRaceDefinition(subRaceId);
                SubRaceTitle.text       = subRaceDefinition.Name;
                SubRaceDescription.text = subRaceDefinition.Description;
            }

            SetCharacter(firstClass.ID, firstCharacter.ID);
        }
Ejemplo n.º 2
0
        private IEnumerator InitiateCustom(GameObject spawnedCharacter, Rm_ClassDefinition character)
        {
            yield return(new WaitForEndOfFrame());

            //Initiate customisations
            if (spawnedCharacter != null)
            {
                InitiateCustomisations(character);
            }
        }
Ejemplo n.º 3
0
        private void InitiateCustomisations(Rm_ClassDefinition character)
        {
            if (!Rm_RPGHandler.Instance.Player.CustomisationsEnabled)
            {
                return;
            }

            VisualCustomisationContainer.transform.DestroyChildren();
            foreach (var visual in character.VisualCustomisations)
            {
                if (visual.CustomisationType == VisualCustomisationType.Category)
                {
                    var go = Instantiate(VisualCustCategoryPrefab, Vector3.zero, Quaternion.identity) as GameObject;
                    go.transform.SetParent(VisualCustomisationContainer.transform, false);
                    go.GetComponentInChildren <Text>().text = visual.Identifier;
                }
                else if (visual.DisplayType == VisualDisplayType.Slider)
                {
                    var go = Instantiate(VisualCustSliderPrefab, Vector3.zero, Quaternion.identity) as GameObject;
                    go.transform.SetParent(VisualCustomisationContainer.transform, false);
                    var subRaceSelect = go.GetComponent <VisualCustomisationSliderModel>();
                    subRaceSelect.Init(visual);
                }
                else if (visual.DisplayType == VisualDisplayType.Color)
                {
                    var go = Instantiate(VisualCustColorPrefab, Vector3.zero, Quaternion.identity) as GameObject;
                    go.transform.SetParent(VisualCustomisationContainer.transform, false);
                    var subRaceSelect = go.GetComponent <VisualCustomisationColorsModel>();
                    subRaceSelect.Init(visual);
                }
                else if (visual.DisplayType == VisualDisplayType.TextOptions)
                {
                    var go = Instantiate(VisualCustTextPrefab, Vector3.zero, Quaternion.identity) as GameObject;
                    go.transform.SetParent(VisualCustomisationContainer.transform, false);
                    var subRaceSelect = go.GetComponent <VisualCustomisationTextsModel>();
                    subRaceSelect.Init(visual);
                }
                else if (visual.DisplayType == VisualDisplayType.ImageOptions)
                {
                    var go = Instantiate(VisualCustImagePrefab, Vector3.zero, Quaternion.identity) as GameObject;
                    go.transform.SetParent(VisualCustomisationContainer.transform, false);
                    var subRaceSelect = go.GetComponent <VisualCustomisationImagesModel>();
                    subRaceSelect.Init(visual);
                }
                else if (visual.DisplayType == VisualDisplayType.TextList)
                {
                    var go = Instantiate(VisualCustTextListPrefab, Vector3.zero, Quaternion.identity) as GameObject;
                    go.transform.SetParent(VisualCustomisationContainer.transform, false);
                    var subRaceSelect = go.GetComponent <VisualCustomisationTextListModel>();
                    subRaceSelect.Init(visual);
                }
            }
        }
        private void SpawnCharacter(Rm_ClassDefinition character)
        {
            SpawnedCharacter = (GameObject)Instantiate(Resources.Load(character.ClassPrefabPath), MainCreationSpawnPosition.transform.position - new Vector3(0, 1, 0), MainCreationSpawnPosition.transform.rotation);
            var comp  = SpawnedCharacter.GetComponents(typeof(MonoBehaviour));
            var model = SpawnedCharacter.GetComponent <RPGController>().CharacterModel;

            foreach (var com in comp)
            {
                Destroy(com);
            }
            Destroy(SpawnedCharacter.GetComponent <NavMeshAgent>());
            Destroy(SpawnedCharacter.GetComponent <NavMeshObstacle>());
            Destroy(SpawnedCharacter.GetComponent <CapsuleCollider>());
            Destroy(SpawnedCharacter.GetComponent <CharacterController>());
            Destroy(SpawnedCharacter.transform.GetChild("TargetLock"));

            //Wait for end of frame and apply default customisations
            StartCoroutine(InitiateCustom(SpawnedCharacter, character));

            //Play Idle Animation
            var modelAnim = model.GetComponent <Animation>();
            var animator  = model.GetComponent <Animator>();

            if (modelAnim != null)
            {
                var idleAnimation = string.IsNullOrEmpty(character.LegacyAnimations.CombatIdleAnim.Animation)
                    ? character.LegacyAnimations.CombatIdleAnim
                    : character.LegacyAnimations.IdleAnim;

                if (modelAnim.GetClip(idleAnimation.Animation) != null)
                {
                    modelAnim[idleAnimation.Animation].wrapMode = WrapMode.Loop;
                    modelAnim.CrossFade(idleAnimation.Animation);
                }
            }
            else if (animator != null)
            {
                animator.SetFloat("speed", 0);
                animator.SetBool("moving", false);
                animator.SetBool("strafing", false);
                animator.SetBool("falling", false);
                animator.SetBool("idle", true);
                animator.SetBool("combatIdle", false);
                animator.SetBool("jumping", false);
            }
        }
Ejemplo n.º 5
0
    public void Init()
    {
        var playerChar = GetObject.PlayerCharacter;

        _classDefinition = Rm_RPGHandler.Instance.Player.CharacterDefinitions.First(c => c.ID == playerChar.PlayerCharacterID);
        if (_classDefinition.Image != null)
        {
            if (CharacterPortrait.Portrait != null)
            {
                CharacterPortrait.Portrait.sprite = GeneralMethods.CreateSprite(_classDefinition.Image);
            }
        }
        else
        {
            if (CharacterPortrait != null)
            {
                Destroy(CharacterPortrait.gameObject);
            }
        }
    }
Ejemplo n.º 6
0
    //todo: this is where we will have templates
    private static void AddDummyData(Rm_RPGHandler newData)
    {
        //Dummy Data
        var attStr = new Rm_AttributeDefintion()
        {
            Name = "Strength", DefaultValue = 10
        };
        var attStr3 = new Rm_AttributeDefintion()
        {
            Name = "Dexterity", DefaultValue = 10
        };
        var attStr4 = new Rm_AttributeDefintion()
        {
            Name = "Intelligence", DefaultValue = 10
        };
        var attStr5 = new Rm_AttributeDefintion()
        {
            Name = "Vitality", DefaultValue = 10
        };

        newData.ASVT.AttributesDefinitions.Add(attStr);
        newData.ASVT.AttributesDefinitions.Add(attStr3);
        newData.ASVT.AttributesDefinitions.Add(attStr4);
        newData.ASVT.AttributesDefinitions.Add(attStr5);

        var attStr2 = new Rm_VitalDefinition()
        {
            Name = "Mana", DefaultValue = 100
        };

        newData.ASVT.VitalDefinitions.Add(attStr2);

        var statDef1 = new Rm_StatisticDefintion()
        {
            ID = "Movement", Name = "Movement", DefaultValue = 1, IsDefault = true
        };
        var statDef2 = new Rm_StatisticDefintion()
        {
            ID = "Attack Speed", Name = "Attack Speed", DefaultValue = 1, IsDefault = true
        };
        var statDef3 = new Rm_StatisticDefintion()
        {
            ID = "Attack Range", Name = "Attack Range", DefaultValue = 2, IsDefault = true
        };
        var statDef4 = new Rm_StatisticDefintion()
        {
            ID = "Cast Speed", Name = "Cast Speed", DefaultValue = 1, IsDefault = true
        };
        var statDef5 = new Rm_StatisticDefintion()
        {
            ID = "Critical Chance", Name = "Critical Chance", DefaultValue = 0, IsDefault = true
        };

        newData.ASVT.StatisticDefinitions.AddRange(new[] { statDef1, statDef2, statDef3, statDef4, statDef5 });
        var classDef = new Rm_ClassDefinition()
        {
            Name              = "Default",
            ClassPrefabPath   = "Prefabs/Classes/Default",
            AttributePerLevel = new List <Rm_AsvtAmount>()
            {
                new Rm_AsvtAmount()
                {
                    Amount = 5,
                    AsvtID = attStr.ID
                }
            },
            StartingScene       = "DemoScene",
            ApplicableRaceID    = "Default_Builtin_Race_10101010",
            ApplicableSubRaceID = "Default_Builtin_SubRace_10101010",
            ApplicableGenderID  = "Default_Builtin_Gender_10101010",
            ApplicableClassIDs  = new List <StringField>()
            {
                new StringField()
                {
                    ID = "Default_Builtin_Class_10101010"
                }
            }
        };

        newData.Player.CharacterDefinitions.Add(classDef);
        newData.GameInfo.MinimapOptions.PlayerIconPath = "RPGMakerAssets/minimapIcon";
    }