Character4D ResolveCharacter() { Character4D character = new Character4D(); //character = character.FromJson(); return(new Character4D()); }
/// <summary> /// Load character from prefab by given path. /// </summary> public void Load(string path) { var character = UnityEditor.AssetDatabase.LoadAssetAtPath <Character4D>(path); if (character == null) { throw new Exception("Error loading character, please make sure you are loading correct prefab!"); } if (Character4D != null) { Destroy(Character4D.gameObject); } Character4D = Instantiate(character, transform); Character4D.transform.localPosition = Vector3.zero; Shadow = Character4D.transform.Find("Shadow").gameObject; OnDirectionChanged(DirectionDropdown.value); var mat = new Material(Shader.Find("Sprites/Default")); foreach (var spriteRenderer in Character4D.GetComponentsInChildren <SpriteRenderer>()) { if (spriteRenderer.name != "Eyes") { spriteRenderer.material = mat; } } Debug.LogWarning("All materials were replaced by [Sprites/Default] to avoid outline artefacts."); }
void Start() { character4D = this.GetComponent <Character4D>(); string jsonString = JsonConvert.SerializeObject(PersistentData.Instance.CurrentSave.characterJson.characterJson); character4D.FromJson(jsonString, true); }
void Start() { tileManager = GameObject.FindGameObjectWithTag("TileManager").GetComponent <TileManager>(); destroyObject = GetComponent <DestroyObject>(); player = GameObject.Find("Player").GetComponent <PlayerController>(); attackSpeed = 0.8f; time = 0.0f; character = player.GetComponentInChildren <Character4D>(); }
void Start() { hotbarUI = GameObject.Find("HotbarUI").GetComponent <Canvas>(); MainUI = GameObject.Find("MainUI").GetComponent <Canvas>(); hotbarUI.enabled = true; MainUI.enabled = false; mainCamera = GetComponentInChildren <Camera>(); body = GetComponent <Rigidbody2D>(); animator = this.GetComponentInChildren <AnimationManager>(); character4D = this.GetComponentInChildren <Character4D>(); }
private void SetCharacter() { character4D = GameObject.Find("Human").GetComponent <Character4D>(); }
/// <summary> /// This can be used as an example for building your own inventory UI. /// </summary> public void OnSelectTab(bool value) { if (!value) { return; } Item.GetParams = null; Dictionary <string, SpriteGroupEntry> dict; Action <Item> equipAction; int equippedIndex; var tab = Tabs.GetComponentsInChildren <Toggle>().Single(i => i.isOn); switch (tab.name) { case "Armor": { dict = SpriteCollection.Armor.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.Armor); equippedIndex = Character.Front.Armor == null ? -1 : SpriteCollection.Armor.FindIndex(i => i.Sprites.Contains(Character.Front.Armor.SingleOrDefault(j => j.name == "FrontBody"))); break; } case "Helmet": { dict = SpriteCollection.Armor.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.Helmet); equippedIndex = SpriteCollection.Armor.FindIndex(i => i.Sprites.Contains(Character.Front.Helmet)); Item.GetParams = item => CreateFakeItemParams(item, dict[item.Id], ".Armor.", ".Helmet."); break; } case "Vest": case "Bracers": case "Leggings": { string part; switch (tab.name) { case "Vest": part = "FrontBody"; break; case "Bracers": part = "FrontArmL"; break; case "Leggings": part = "FrontLegL"; break; default: throw new NotSupportedException(tab.name); } dict = SpriteCollection.Armor.ToDictionary(i => i.Id, i => i); equipAction = item => Character.Equip(dict[item.Id], tab.name.ToEnum <EquipmentPart>()); equippedIndex = Character.Front.Armor == null ? -1 : SpriteCollection.Armor.FindIndex(i => i.Sprites.Contains(Character.Front.Armor.SingleOrDefault(j => j.name == part))); Item.GetParams = item => CreateFakeItemParams(item, dict[item.Id], ".Armor.", $".{tab.name}."); break; } case "Shield": { dict = SpriteCollection.Shield.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.Shield); equippedIndex = Character.Front.Shield == null ? -1 : SpriteCollection.Shield.FindIndex(i => i.Sprites.SequenceEqual(Character.Front.Shield)); break; } case "Melee1H": { dict = SpriteCollection.MeleeWeapon1H.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.MeleeWeapon1H); equippedIndex = SpriteCollection.MeleeWeapon1H.FindIndex(i => i.Sprites.Contains(Character.Front.PrimaryWeapon)); break; } case "Melee2H": { dict = SpriteCollection.MeleeWeapon2H.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.MeleeWeapon2H); equippedIndex = SpriteCollection.MeleeWeapon2H.FindIndex(i => i.Sprites.Contains(Character.Front.PrimaryWeapon)); break; } case "Bow": { dict = SpriteCollection.Bow.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.Bow); equippedIndex = Character.Front.CompositeWeapon == null ? -1 : SpriteCollection.Bow.FindIndex(i => i.Sprites.SequenceEqual(Character.Front.CompositeWeapon)); break; } case "Crossbow": { dict = SpriteCollection.Crossbow.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.Crossbow); equippedIndex = Character.Front.CompositeWeapon == null ? -1 : SpriteCollection.Crossbow.FindIndex(i => i.Sprites.SequenceEqual(Character.Front.CompositeWeapon)); break; } case "Firearm1H": { dict = SpriteCollection.Firearm1H.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.SecondaryFirearm1H); equippedIndex = Character.Front.SecondaryWeapon == null ? -1 : SpriteCollection.Firearm1H.FindIndex(i => i.Sprites.Contains(Character.Front.SecondaryWeapon)); break; } case "Body": { dict = SpriteCollection.Body.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.SetBody(dict[item.Id], BodyPart.Body); equippedIndex = Character.Front.Body == null ? -1 : SpriteCollection.Body.FindIndex(i => i.Sprites.SequenceEqual(Character.Front.Body)); break; } case "Head": { dict = SpriteCollection.Body.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.SetBody(dict[item.Id], BodyPart.Head); equippedIndex = Character.Front.Head == null ? -1 : SpriteCollection.Body.FindIndex(i => i.Sprites.Contains(Character.Front.Head)); break; } case "Ears": { dict = SpriteCollection.Ears.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.SetBody(dict[item.Id], BodyPart.Ears); equippedIndex = Character.Front.Ears == null ? -1 : SpriteCollection.Ears.FindIndex(i => i.Sprites.SequenceEqual(Character.Front.Ears)); break; } case "Eyebrows": { dict = SpriteCollection.Eyebrows.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.SetBody(dict[item.Id], BodyPart.Eyebrows); equippedIndex = SpriteCollection.Eyebrows.FindIndex(i => i.Sprites.Contains(Character.Front.Expressions[0].Eyebrows)); break; } case "Eyes": { dict = SpriteCollection.Eyes.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.SetBody(dict[item.Id], BodyPart.Eyes); equippedIndex = SpriteCollection.Eyes.FindIndex(i => i.Sprites.Contains(Character.Front.Expressions[0].Eyes)); break; } case "Hair": { dict = SpriteCollection.Hair.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.SetBody(dict[item.Id], BodyPart.Hair); equippedIndex = SpriteCollection.Hair.FindIndex(i => i.Sprites.Contains(Character.Front.Hair)); break; } case "Beard": { dict = SpriteCollection.Beard.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.SetBody(dict[item.Id], BodyPart.Beard); equippedIndex = SpriteCollection.Beard.FindIndex(i => i.Sprites.Contains(Character.Front.Beard)); break; } case "Mouth": { dict = SpriteCollection.Mouth.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.SetBody(dict[item.Id], BodyPart.Mouth); equippedIndex = SpriteCollection.Mouth.FindIndex(i => i.Sprites.Contains(Character.Front.Expressions[0].Mouth)); break; } case "Makeup": { dict = SpriteCollection.Makeup.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.SetBody(dict[item.Id], BodyPart.Makeup); equippedIndex = SpriteCollection.Makeup.FindIndex(i => i.Sprites.Contains(Character.Front.Makeup)); break; } case "Mask": { dict = SpriteCollection.Mask.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.Mask); equippedIndex = SpriteCollection.Mask.FindIndex(i => i.Sprites.Contains(Character.Front.Mask)); break; } case "Earrings": { dict = SpriteCollection.Earrings.ToDictionary(i => i.Id, i => i); equipAction = item => Character4D.Equip(dict[item.Id], EquipmentPart.Earrings); equippedIndex = Character.Front.Earrings == null ? -1 : SpriteCollection.Earrings.FindIndex(i => i.Sprites.SequenceEqual(Character.Front.Earrings)); break; } default: throw new NotImplementedException(tab.name); } var items = dict.Values.Select(i => new Item(i.Id)).ToList(); items.Insert(0, new Item("Empty")); dict.Add("Empty", null); if (Item.GetParams == null) { Item.GetParams = item => CreateFakeItemParams(item, dict[item.Id]); // We override GetParams method because we don't have a database with item params. } var collectionId = SpriteCollection.Id; IconCollection.Active = IconCollection.Instances.ContainsKey(collectionId) ? IconCollection.Instances[collectionId] : IconCollection.Instances["FantasyHeroes"]; InventoryItem.OnLeftClick = item => { equipAction(item); EquipCallback?.Invoke(item); ItemName.text = item.Params.SpriteId ?? "Empty"; SetPaintButton(tab.name, item); }; Inventory.Initialize(ref items, items[equippedIndex + 1], reset: true); var equipped = items.Count > equippedIndex + 1 ? items[equippedIndex + 1] : null; SetPaintButton(tab.name, equipped); }
private IEnumerator CaptureFrames(Vector2 direction, List <CaptureOption> options, int frameSize, int frameCount, bool shadow) { _character = FindObjectOfType <Character4D>(); _character.SetDirection(direction); _character.Shadows.ForEach(i => i.SetActive(false)); _character.Shadows[0].SetActive(shadow); var stateHandler = _character.Animator.GetBehaviours <StateHandler>().SingleOrDefault(i => i.Name == "Death"); if (stateHandler) { stateHandler.StateExit.RemoveAllListeners(); } var clips = new Dictionary <string, List <Texture2D> >(); foreach (var option in options) { _character.Animator.SetInteger("State", (int)option.State); if (option.Action != null) { _character.Animator.SetTrigger(option.Action); } else { _character.Animator.ResetTrigger("Slash1H"); _character.Animator.ResetTrigger("Slash2H"); _character.Animator.ResetTrigger("Jab"); } _character.Animator.SetBool("Action", option.Action != null); _character.Animator.speed = 2; yield return(new WaitForSeconds(0.1f)); _character.Animator.speed = 0; var lowerClip = option.State == CharacterState.Death ? null : _character.Animator.GetCurrentAnimatorClipInfo(0)[0].clip; var upperClip = option.State == CharacterState.Death ? null : _character.Animator.GetCurrentAnimatorClipInfo(1)[0].clip; var complexClip = option.State == CharacterState.Death ? _character.Animator.GetCurrentAnimatorClipInfo(2)[0].clip : null; for (var j = 0; j < frameCount; j++) { var normalizedTime = (float)j / (frameCount - 1); var clip = upperClip ?? complexClip; var expressionEvent = clip.events.Where(i => i.functionName == "SetExpression" && Mathf.Abs(i.time / clip.length - normalizedTime) <= 1f / (frameCount - 1)) .OrderBy(i => Mathf.Abs(i.time / clip.length - normalizedTime)).FirstOrDefault(); if (expressionEvent != null) { _character.SetExpression(expressionEvent.stringParameter); } yield return(ShowFrame(lowerClip?.name, upperClip?.name, complexClip?.name, normalizedTime)); var frame = CaptureFrame(frameSize, frameSize); var animationName = option.Action ?? option.State.ToString(); if (clips.ContainsKey(animationName)) { clips[animationName].Add(frame); } else { clips.Add(animationName, new List <Texture2D> { frame }); } } } _character.LayerManager.Sprites[0].gameObject.SetActive(false); _character.AnimationManager.SetState(CharacterState.Idle); _character.Animator.speed = 1; if (stateHandler) { stateHandler.StateExit.AddListener(() => _character.SetExpression("Default")); } var texture = CreateSheet(clips, frameSize, frameSize); yield return(StandaloneFilePicker.SaveFile("Save as sprite sheet", "", "Character", "png", texture.EncodeToPNG(), (success, path) => { Debug.Log(success ? $"Saved as {path}" : "Error saving."); })); }
public void Setup(Character4D character) { character.Parts.ForEach(i => Setup(i)); }
protected override void Awake() { base.Awake(); Character4D.SetDirection(Vector2.down); SetupComponent(); }
public override void PlayMoveAnimation() { if (!Animator.gameObject.activeInHierarchy) { return; } if (isDead) { Animator.SetInteger(ANIM_STATE, (int)StateTypes.Death); return; } if (isCasting) { Animator.SetInteger(ANIM_STATE, (int)StateTypes.Ready); return; } if (movementState.Has(MovementState.Forward) || movementState.Has(MovementState.Backward) || movementState.Has(MovementState.Right) || movementState.Has(MovementState.Left)) { if (extraMovementState == ExtraMovementState.IsSprinting) { Animator.SetInteger(ANIM_STATE, (int)StateTypes.Run); } else { Animator.SetInteger(ANIM_STATE, (int)StateTypes.Walk); } } else { Animator.SetInteger(ANIM_STATE, (int)StateTypes.Idle); } // Update direction if (Mathf.Abs(Mathf.Abs(direction2D.x) - Mathf.Abs(direction2D.y)) < 0.01f) { // Up, Down is higher priority Vector2 applyDirection2D = direction2D; applyDirection2D.x = 0; direction2D = applyDirection2D.normalized; } if (Mathf.Abs(direction2D.x) > Mathf.Abs(direction2D.y)) { if (direction2D.x > 0) { Character4D.SetDirection(Vector2.right); } else { Character4D.SetDirection(Vector2.left); } } else { if (direction2D.y > 0) { Character4D.SetDirection(Vector2.up); } else { Character4D.SetDirection(Vector2.down); } } }
private void SetEquipmentSprites() { List <CharacterItem> items = new List <CharacterItem>(); if (equipItems != null) { items.AddRange(equipItems); } if (equipWeapons != null) { items.Add(equipWeapons.leftHand); items.Add(equipWeapons.rightHand); } // Clear equipped items for (int i = 0; i < (int)EHeroEditorItemPart.Count; ++i) { switch ((EHeroEditorItemPart)i) { case EHeroEditorItemPart.Armor: Character4D.UnEquip(Enums.EquipmentPart.Armor); break; case EHeroEditorItemPart.Helmet: Character4D.UnEquip(Enums.EquipmentPart.Helmet); break; case EHeroEditorItemPart.Shield: Character4D.UnEquip(Enums.EquipmentPart.Shield); break; case EHeroEditorItemPart.Melee1H: Character4D.UnEquip(Enums.EquipmentPart.MeleeWeapon1H); break; case EHeroEditorItemPart.Melee2H: Character4D.UnEquip(Enums.EquipmentPart.MeleeWeapon2H); break; case EHeroEditorItemPart.Bow: Character4D.UnEquip(Enums.EquipmentPart.Bow); break; case EHeroEditorItemPart.Crossbow: Character4D.UnEquip(Enums.EquipmentPart.Crossbow); break; case EHeroEditorItemPart.Firearm1H: Character4D.UnEquip(Enums.EquipmentPart.SecondaryFirearm1H); break; case EHeroEditorItemPart.Supplies: break; case EHeroEditorItemPart.Body: Character4D.SetBody(null, Enums.BodyPart.Body); break; case EHeroEditorItemPart.Ears: Character4D.SetBody(null, Enums.BodyPart.Ears); break; case EHeroEditorItemPart.Eyebrows: Character4D.SetBody(null, Enums.BodyPart.Eyebrows); break; case EHeroEditorItemPart.Eyes: Character4D.SetBody(null, Enums.BodyPart.Eyes); break; case EHeroEditorItemPart.Hair: Character4D.SetBody(null, Enums.BodyPart.Hair); break; case EHeroEditorItemPart.Beard: Character4D.SetBody(null, Enums.BodyPart.Beard); break; case EHeroEditorItemPart.Mouth: Character4D.SetBody(null, Enums.BodyPart.Mouth); break; case EHeroEditorItemPart.Makeup: Character4D.SetBody(null, Enums.BodyPart.Makeup); break; case EHeroEditorItemPart.Mask: Character4D.UnEquip(Enums.EquipmentPart.Mask); break; case EHeroEditorItemPart.Earrings: Character4D.UnEquip(Enums.EquipmentPart.Earrings); break; case EHeroEditorItemPart.Vest: Character4D.UnEquip(Enums.EquipmentPart.Vest); break; case EHeroEditorItemPart.Bracers: Character4D.UnEquip(Enums.EquipmentPart.Bracers); break; case EHeroEditorItemPart.Leggings: Character4D.UnEquip(Enums.EquipmentPart.Leggings); break; case EHeroEditorItemPart.Cape: break; case EHeroEditorItemPart.Back: break; } } // Set default part Dictionary <EHeroEditorItemPart, HeroEditorSpriteData> sprites = new Dictionary <EHeroEditorItemPart, HeroEditorSpriteData>(); foreach (HeroEditorSpriteData defaultSprite in defaultSprites) { sprites[defaultSprite.part] = defaultSprite; } // Set equipping items IHeroEditorItem itemData; foreach (CharacterItem item in items) { if (item.IsEmptySlot() || !(item.GetItem() is IHeroEditorItem)) { continue; } itemData = item.GetItem() as IHeroEditorItem; sprites[itemData.SpriteData.part] = itemData.SpriteData; } foreach (HeroEditorSpriteData sprite in sprites.Values) { switch (sprite.part) { case EHeroEditorItemPart.Armor: Character4D.Equip(spriteCollection.Armor.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Armor, sprite.color); break; case EHeroEditorItemPart.Helmet: Character4D.Equip(spriteCollection.Armor.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Helmet, sprite.color); break; case EHeroEditorItemPart.Shield: Character4D.Equip(spriteCollection.Shield.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Shield, sprite.color); break; case EHeroEditorItemPart.Melee1H: Character4D.Equip(spriteCollection.MeleeWeapon1H.Single(i => i.Name == sprite.id), Enums.EquipmentPart.MeleeWeapon1H, sprite.color); break; case EHeroEditorItemPart.Melee2H: Character4D.Equip(spriteCollection.MeleeWeapon2H.Single(i => i.Name == sprite.id), Enums.EquipmentPart.MeleeWeapon2H, sprite.color); break; case EHeroEditorItemPart.Bow: Character4D.Equip(spriteCollection.Bow.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Bow, sprite.color); break; case EHeroEditorItemPart.Crossbow: Character4D.Equip(spriteCollection.Crossbow.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Crossbow, sprite.color); break; case EHeroEditorItemPart.Firearm1H: Character4D.Equip(spriteCollection.Firearm1H.Single(i => i.Name == sprite.id), Enums.EquipmentPart.SecondaryFirearm1H, sprite.color); break; case EHeroEditorItemPart.Supplies: break; case EHeroEditorItemPart.Body: Character4D.SetBody(spriteCollection.Body.Single(i => i.Name == sprite.id), Enums.BodyPart.Body, sprite.color); break; case EHeroEditorItemPart.Ears: Character4D.SetBody(spriteCollection.Ears.Single(i => i.Name == sprite.id), Enums.BodyPart.Ears, sprite.color); break; case EHeroEditorItemPart.Eyebrows: Character4D.SetBody(spriteCollection.Eyebrows.Single(i => i.Name == sprite.id), Enums.BodyPart.Eyebrows, sprite.color); break; case EHeroEditorItemPart.Eyes: Character4D.SetBody(spriteCollection.Eyes.Single(i => i.Name == sprite.id), Enums.BodyPart.Eyes, sprite.color); break; case EHeroEditorItemPart.Hair: Character4D.SetBody(spriteCollection.Hair.Single(i => i.Name == sprite.id), Enums.BodyPart.Hair, sprite.color); break; case EHeroEditorItemPart.Beard: Character4D.SetBody(spriteCollection.Beard.Single(i => i.Name == sprite.id), Enums.BodyPart.Beard, sprite.color); break; case EHeroEditorItemPart.Mouth: Character4D.SetBody(spriteCollection.Mouth.Single(i => i.Name == sprite.id), Enums.BodyPart.Mouth, sprite.color); break; case EHeroEditorItemPart.Makeup: Character4D.SetBody(spriteCollection.Makeup.Single(i => i.Name == sprite.id), Enums.BodyPart.Makeup, sprite.color); break; case EHeroEditorItemPart.Mask: Character4D.Equip(spriteCollection.Mask.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Mask, sprite.color); break; case EHeroEditorItemPart.Earrings: Character4D.Equip(spriteCollection.Earrings.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Earrings, sprite.color); break; case EHeroEditorItemPart.Vest: Character4D.Equip(spriteCollection.Armor.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Vest, sprite.color); break; case EHeroEditorItemPart.Bracers: Character4D.Equip(spriteCollection.Armor.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Bracers, sprite.color); break; case EHeroEditorItemPart.Leggings: Character4D.Equip(spriteCollection.Armor.Single(i => i.Name == sprite.id), Enums.EquipmentPart.Leggings, sprite.color); break; case EHeroEditorItemPart.Cape: break; case EHeroEditorItemPart.Back: break; } } }