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); }
private IEnumerator InitiateCustom(GameObject spawnedCharacter, Rm_ClassDefinition character) { yield return(new WaitForEndOfFrame()); //Initiate customisations if (spawnedCharacter != null) { InitiateCustomisations(character); } }
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); } }
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); } } }
//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"; }