CharacterCustomizer.cs 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. public class CharacterCustomizer : MonoBehaviour
  6. {
  7. [SerializeField] Characters charactersData;
  8. public List<CharacterObjects> characterObjects;
  9. [EasyButtons.Button]
  10. void clearDuplicates(){
  11. List<int> duplicates = new List<int>();
  12. for(int i =0; i < characterObjects.Count; i++){
  13. if(duplicates.Contains(characterObjects[i].id)){
  14. characterObjects.RemoveAt(i);
  15. }else{
  16. duplicates.Add(characterObjects[i].id);
  17. }
  18. }
  19. }
  20. [EasyButtons.Button]
  21. void clearEmptyObjectsRows(){
  22. for(int i =0; i < characterObjects.Count; i++){
  23. bool exist = false;
  24. foreach(CharacterPreset preset in charactersData.characters){
  25. if(preset.characterId == characterObjects[i].id){ exist=true;break;}
  26. }
  27. if(!exist){characterObjects.RemoveAt(i);}
  28. }
  29. }
  30. [EasyButtons.Button]
  31. void refresh(){
  32. validateCharacterData();
  33. }
  34. void OnValidate()
  35. {
  36. validateCharacterData();
  37. }
  38. void validateCharacterData()
  39. {
  40. charactersData = Resources.Load<Characters>("characters");
  41. if (charactersData == null) { Debug.LogError("No Character Data Found!"); return; }
  42. clearEmptyObjectsRows();
  43. foreach(CharacterPreset preset in charactersData.characters){
  44. bool exists = false;
  45. for(int i =0; i < characterObjects.Count; i++){
  46. if(characterObjects[i].id == preset.characterId){
  47. if(characterObjects[i].name != preset.name){characterObjects[i].name=preset.name;}
  48. exists=true;
  49. }
  50. }
  51. if(!exists){characterObjects.Add(new CharacterObjects(preset.characterId,preset.name));}
  52. }
  53. }
  54. public void ChangeCharacter(int characterId){
  55. foreach(CharacterObjects obj in characterObjects){
  56. if(obj.id == characterId){
  57. foreach(GameObject go in obj.body){go.SetActive(true);}
  58. }else{
  59. foreach(GameObject go in obj.body){go.SetActive(false);}
  60. foreach(GameObject go in obj.hair){go.SetActive(false);}
  61. foreach(GameObject go in obj.gloves){go.SetActive(false);}
  62. foreach(GameObject go in obj.eyeWears){go.SetActive(false);}
  63. foreach(GameObject go in obj.tops){go.SetActive(false);}
  64. foreach(GameObject go in obj.bottoms){go.SetActive(false);}
  65. }
  66. }
  67. }
  68. public void ChangeCharacter(string characterName){
  69. ChangeCharacter(GetCharacterId(characterName));
  70. }
  71. public int GetCharacterId(string name){
  72. foreach(CharacterPreset preset in charactersData.characters){
  73. if(preset.name == name){return preset.characterId;}
  74. }
  75. return -1;
  76. }
  77. }