This commit is contained in:
Nim XD
2024-08-27 21:01:33 +05:30
parent 99eaf514fd
commit 121a1b7c73
31803 changed files with 623461 additions and 623399 deletions

View File

@@ -1,84 +1,84 @@
using System.Linq;
using Assets.HeroEditor4D.Common.Scripts.CharacterScripts;
using Assets.HeroEditor4D.Common.Scripts.Enums;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.ExampleScripts
{
/// <summary>
/// An example of how to change character's appearance.
/// </summary>
public class AppearanceExample : MonoBehaviour
{
public CharacterAppearance Appearance = new CharacterAppearance();
public Character4D Character;
public AvatarSetup AvatarSetup;
public void Start()
{
Refresh();
}
public void Refresh()
{
Appearance.Setup(Character);
var helmetId = Character.SpriteCollection.Armor.SingleOrDefault(i => i.Sprites.Contains(Character.Front.Helmet))?.Id;
AvatarSetup.Initialize(Appearance, helmetId);
}
public void SetRandomAppearance()
{
Appearance.Hair = Random.Range(0, 3) == 0 ? null : Character.SpriteCollection.Hair[Random.Range(0, Character.SpriteCollection.Hair.Count)].Id;
Appearance.HairColor = new Color(Random.Range(0, 1f), Random.Range(0, 1f), Random.Range(0, 1f));
Appearance.Eyebrows = Character.SpriteCollection.Eyebrows[Random.Range(0, Character.SpriteCollection.Eyebrows.Count)].Id;
Appearance.Eyes = Character.SpriteCollection.Eyes[Random.Range(0, Character.SpriteCollection.Eyes.Count)].Id;
Appearance.EyesColor = new Color(Random.Range(0, 1f), Random.Range(0, 1f), Random.Range(0, 1f));
Appearance.Mouth = Character.SpriteCollection.Mouth[Random.Range(0, Character.SpriteCollection.Mouth.Count)].Id;
Appearance.Beard = Random.Range(0, 3) == 0 ? Character.SpriteCollection.Beard[Random.Range(0, Character.SpriteCollection.Beard.Count)].Id : null;
Refresh();
}
public void ResetAppearance()
{
Appearance = new CharacterAppearance();
Refresh();
}
public void SetRandomHair()
{
var randomIndex = Random.Range(0, Character.SpriteCollection.Hair.Count);
var randomItem = Character.SpriteCollection.Hair[randomIndex];
var randomColor = new Color(Random.Range(0, 1f), Random.Range(0, 1f), Random.Range(0, 1f));
Character.SetBody(randomItem, BodyPart.Hair, randomColor);
}
public void SetRandomEyebrows()
{
var randomIndex = Random.Range(0, Character.SpriteCollection.Eyebrows.Count);
var randomItem = Character.SpriteCollection.Eyebrows[randomIndex];
Character.SetBody(randomItem, BodyPart.Eyebrows);
}
public void SetRandomEyes()
{
var randomIndex = Random.Range(0, Character.SpriteCollection.Eyes.Count);
var randomItem = Character.SpriteCollection.Eyes[randomIndex];
var randomColor = new Color(Random.Range(0, 1f), Random.Range(0, 1f), Random.Range(0, 1f));
Character.SetBody(randomItem, BodyPart.Eyes, randomColor);
}
public void SetRandomMouth()
{
var randomIndex = Random.Range(0, Character.SpriteCollection.Mouth.Count);
var randomItem = Character.SpriteCollection.Mouth[randomIndex];
Character.SetBody(randomItem, BodyPart.Mouth);
}
}
using System.Linq;
using Assets.HeroEditor4D.Common.Scripts.CharacterScripts;
using Assets.HeroEditor4D.Common.Scripts.Enums;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.ExampleScripts
{
/// <summary>
/// An example of how to change character's appearance.
/// </summary>
public class AppearanceExample : MonoBehaviour
{
public CharacterAppearance Appearance = new CharacterAppearance();
public Character4D Character;
public AvatarSetup AvatarSetup;
public void Start()
{
Refresh();
}
public void Refresh()
{
Appearance.Setup(Character);
var helmetId = Character.SpriteCollection.Armor.SingleOrDefault(i => i.Sprites.Contains(Character.Front.Helmet))?.Id;
AvatarSetup.Initialize(Appearance, helmetId);
}
public void SetRandomAppearance()
{
Appearance.Hair = Random.Range(0, 3) == 0 ? null : Character.SpriteCollection.Hair[Random.Range(0, Character.SpriteCollection.Hair.Count)].Id;
Appearance.HairColor = new Color(Random.Range(0, 1f), Random.Range(0, 1f), Random.Range(0, 1f));
Appearance.Eyebrows = Character.SpriteCollection.Eyebrows[Random.Range(0, Character.SpriteCollection.Eyebrows.Count)].Id;
Appearance.Eyes = Character.SpriteCollection.Eyes[Random.Range(0, Character.SpriteCollection.Eyes.Count)].Id;
Appearance.EyesColor = new Color(Random.Range(0, 1f), Random.Range(0, 1f), Random.Range(0, 1f));
Appearance.Mouth = Character.SpriteCollection.Mouth[Random.Range(0, Character.SpriteCollection.Mouth.Count)].Id;
Appearance.Beard = Random.Range(0, 3) == 0 ? Character.SpriteCollection.Beard[Random.Range(0, Character.SpriteCollection.Beard.Count)].Id : null;
Refresh();
}
public void ResetAppearance()
{
Appearance = new CharacterAppearance();
Refresh();
}
public void SetRandomHair()
{
var randomIndex = Random.Range(0, Character.SpriteCollection.Hair.Count);
var randomItem = Character.SpriteCollection.Hair[randomIndex];
var randomColor = new Color(Random.Range(0, 1f), Random.Range(0, 1f), Random.Range(0, 1f));
Character.SetBody(randomItem, BodyPart.Hair, randomColor);
}
public void SetRandomEyebrows()
{
var randomIndex = Random.Range(0, Character.SpriteCollection.Eyebrows.Count);
var randomItem = Character.SpriteCollection.Eyebrows[randomIndex];
Character.SetBody(randomItem, BodyPart.Eyebrows);
}
public void SetRandomEyes()
{
var randomIndex = Random.Range(0, Character.SpriteCollection.Eyes.Count);
var randomItem = Character.SpriteCollection.Eyes[randomIndex];
var randomColor = new Color(Random.Range(0, 1f), Random.Range(0, 1f), Random.Range(0, 1f));
Character.SetBody(randomItem, BodyPart.Eyes, randomColor);
}
public void SetRandomMouth()
{
var randomIndex = Random.Range(0, Character.SpriteCollection.Mouth.Count);
var randomItem = Character.SpriteCollection.Mouth[randomIndex];
Character.SetBody(randomItem, BodyPart.Mouth);
}
}
}

View File

@@ -1,11 +1,11 @@
fileFormatVersion: 2
guid: fb8fda16c0939a04b925f09ccaf1fcf5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: fb8fda16c0939a04b925f09ccaf1fcf5
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,281 +1,281 @@
using System.Linq;
using Assets.HeroEditor4D.Common.Scripts.CharacterScripts;
using Assets.HeroEditor4D.Common.Scripts.Enums;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.ExampleScripts
{
/// <summary>
/// An example of how to handle user input, play animations and move a character.
/// </summary>
public class ControlsExample : MonoBehaviour
{
public Character4D Character;
public FirearmFxExample FirearmFx;
public bool InitDirection;
public int MovementSpeed;
public playerNetwork playerNetwork;
[SerializeField]private bool _moving;
public void Start()
{
Character.AnimationManager.SetState(CharacterState.Idle);
if (InitDirection)
{
Character.SetDirection(Vector2.down);
}
}
public void Update()
{
if(!playerNetwork.isLocalPlayer){return;}
if (playerNetwork.isDead) {
return;
}
SetDirection();
Move();
ChangeState();
Actions();
}
private void SetDirection()
{
Vector2 direction;
if(joystick.Input == Vector2.zero){
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
direction = Vector2.left;
}
else if (Input.GetKeyDown(KeyCode.RightArrow))
{
direction = Vector2.right;
}
else if (Input.GetKeyDown(KeyCode.UpArrow))
{
direction = Vector2.up;
}
else if (Input.GetKeyDown(KeyCode.DownArrow))
{
direction = Vector2.down;
}
else return;
}else{
direction = JoyToDir();
// direction= joystick.Input;
}
Debug.Log(direction);
Character.SetDirection(direction);
}
Vector2 JoyToDir(){
if(joystick.Input == Vector2.zero){return Vector2.zero;}
Vector2 direction;
if(Mathf.Abs(joystick.Input.x) > Mathf.Abs(joystick.Input.y)){
if(joystick.Input.x > 0){
direction = Vector2.right;
}else{
direction = Vector2.left;
}
}else{
if(joystick.Input.y > 0){
direction = Vector2.up;
}else{
direction = Vector2.down;
}
}
return direction;
}
private void Move()
{
if (MovementSpeed == 0) return;
var direction = Vector2.zero;
if (Input.GetKey(KeyCode.LeftArrow))
{
direction += Vector2.left;
}
if (Input.GetKey(KeyCode.RightArrow))
{
direction += Vector2.right;
}
if (Input.GetKey(KeyCode.UpArrow))
{
direction += Vector2.up;
}
if (Input.GetKey(KeyCode.DownArrow))
{
direction += Vector2.down;
}
if(joystick.Input != Vector2.zero){
direction = joystick.Input;
}
if (direction == Vector2.zero)
{
if (_moving)
{
Character.AnimationManager.SetState(CharacterState.Idle);
_moving = false;
}
}
else
{
Character.AnimationManager.SetState(CharacterState.Run);
Character.transform.position += (Vector3) direction.normalized * MovementSpeed * Time.deltaTime;
_moving = true;
}
}
private void Actions()
{
if (Input.GetKeyDown(KeyCode.S))
{
switch (Character.WeaponType)
{
case WeaponType.Melee1H:
Character.AnimationManager.Slash(twoHanded: false);
break;
case WeaponType.Melee2H:
case WeaponType.Paired:
Character.AnimationManager.Slash(twoHanded: true);
break;
case WeaponType.Bow:
Character.AnimationManager.ShotBow();
break;
case WeaponType.Crossbow:
Character.AnimationManager.CrossbowShot();
break;
}
}
else if (Input.GetKeyDown(KeyCode.J))
{
Character.AnimationManager.Jab();
}
else if (Input.GetKey(KeyCode.F))
{
if (Character.AnimationManager.IsAction) return;
switch (Character.WeaponType)
{
case WeaponType.Crossbow:
Character.AnimationManager.CrossbowShot();
break;
case WeaponType.Firearm1H:
case WeaponType.Firearm2H:
{
Character.AnimationManager.Fire();
if (Character.Parts[0].PrimaryWeapon != null)
{
var firearm = Character.SpriteCollection.Firearm1H.SingleOrDefault(i => i.Sprites.Contains(Character.Parts[0].PrimaryWeapon))
?? Character.SpriteCollection.Firearm2H.SingleOrDefault(i => i.Sprites.Contains(Character.Parts[0].PrimaryWeapon));
if (firearm != null)
{
FirearmFx.CreateFireMuzzle(firearm.Name, firearm.Collection);
}
}
break;
}
case WeaponType.Paired:
Character.AnimationManager.SecondaryShot();
break;
}
}
}
private void ChangeState()
{
if (Input.GetKeyDown(KeyCode.I))
{
Character.AnimationManager.SetState(CharacterState.Idle);
}
if (Input.GetKeyDown(KeyCode.E))
{
Character.AnimationManager.SetState(CharacterState.Ready);
}
if (Input.GetKeyDown(KeyCode.W))
{
Character.AnimationManager.SetState(CharacterState.Walk);
}
if (Input.GetKeyDown(KeyCode.R))
{
Character.AnimationManager.SetState(CharacterState.Run);
}
if (Input.GetKeyDown(KeyCode.U))
{
Character.AnimationManager.SetState(CharacterState.Jump);
}
if (Input.GetKeyDown(KeyCode.C))
{
Character.AnimationManager.SetState(CharacterState.Climb);
}
if (Input.GetKeyDown(KeyCode.D))
{
Character.AnimationManager.Die();
}
if (Input.GetKeyDown(KeyCode.H))
{
Character.AnimationManager.Hit();
}
if (Input.GetKeyDown(KeyCode.B))
{
Character.AnimationManager.SetState(CharacterState.ShieldBlock);
}
else if (Input.GetKeyUp(KeyCode.B))
{
Character.AnimationManager.SetState(CharacterState.Idle);
}
}
public void TurnLeft()
{
Character.SetDirection(Vector2.left);
}
public void TurnRight()
{
Character.SetDirection(Vector2.right);
}
public void TurnUp()
{
Character.SetDirection(Vector2.up);
}
public void TurnDown()
{
Character.SetDirection(Vector2.down);
}
public void Show4Directions()
{
Character.SetDirection(Vector2.zero);
}
public void OpenLink(string url)
{
Application.OpenURL(url);
}
}
using System.Linq;
using Assets.HeroEditor4D.Common.Scripts.CharacterScripts;
using Assets.HeroEditor4D.Common.Scripts.Enums;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.ExampleScripts
{
/// <summary>
/// An example of how to handle user input, play animations and move a character.
/// </summary>
public class ControlsExample : MonoBehaviour
{
public Character4D Character;
public FirearmFxExample FirearmFx;
public bool InitDirection;
public int MovementSpeed;
public playerNetwork playerNetwork;
[SerializeField]private bool _moving;
public void Start()
{
Character.AnimationManager.SetState(CharacterState.Idle);
if (InitDirection)
{
Character.SetDirection(Vector2.down);
}
}
public void Update()
{
if(!playerNetwork.isLocalPlayer){return;}
if (playerNetwork.isDead) {
return;
}
SetDirection();
Move();
ChangeState();
Actions();
}
private void SetDirection()
{
Vector2 direction;
if(joystick.Input == Vector2.zero){
if (Input.GetKeyDown(KeyCode.LeftArrow))
{
direction = Vector2.left;
}
else if (Input.GetKeyDown(KeyCode.RightArrow))
{
direction = Vector2.right;
}
else if (Input.GetKeyDown(KeyCode.UpArrow))
{
direction = Vector2.up;
}
else if (Input.GetKeyDown(KeyCode.DownArrow))
{
direction = Vector2.down;
}
else return;
}else{
direction = JoyToDir();
// direction= joystick.Input;
}
Debug.Log(direction);
Character.SetDirection(direction);
}
Vector2 JoyToDir(){
if(joystick.Input == Vector2.zero){return Vector2.zero;}
Vector2 direction;
if(Mathf.Abs(joystick.Input.x) > Mathf.Abs(joystick.Input.y)){
if(joystick.Input.x > 0){
direction = Vector2.right;
}else{
direction = Vector2.left;
}
}else{
if(joystick.Input.y > 0){
direction = Vector2.up;
}else{
direction = Vector2.down;
}
}
return direction;
}
private void Move()
{
if (MovementSpeed == 0) return;
var direction = Vector2.zero;
if (Input.GetKey(KeyCode.LeftArrow))
{
direction += Vector2.left;
}
if (Input.GetKey(KeyCode.RightArrow))
{
direction += Vector2.right;
}
if (Input.GetKey(KeyCode.UpArrow))
{
direction += Vector2.up;
}
if (Input.GetKey(KeyCode.DownArrow))
{
direction += Vector2.down;
}
if(joystick.Input != Vector2.zero){
direction = joystick.Input;
}
if (direction == Vector2.zero)
{
if (_moving)
{
Character.AnimationManager.SetState(CharacterState.Idle);
_moving = false;
}
}
else
{
Character.AnimationManager.SetState(CharacterState.Run);
Character.transform.position += (Vector3) direction.normalized * MovementSpeed * Time.deltaTime;
_moving = true;
}
}
private void Actions()
{
if (Input.GetKeyDown(KeyCode.S))
{
switch (Character.WeaponType)
{
case WeaponType.Melee1H:
Character.AnimationManager.Slash(twoHanded: false);
break;
case WeaponType.Melee2H:
case WeaponType.Paired:
Character.AnimationManager.Slash(twoHanded: true);
break;
case WeaponType.Bow:
Character.AnimationManager.ShotBow();
break;
case WeaponType.Crossbow:
Character.AnimationManager.CrossbowShot();
break;
}
}
else if (Input.GetKeyDown(KeyCode.J))
{
Character.AnimationManager.Jab();
}
else if (Input.GetKey(KeyCode.F))
{
if (Character.AnimationManager.IsAction) return;
switch (Character.WeaponType)
{
case WeaponType.Crossbow:
Character.AnimationManager.CrossbowShot();
break;
case WeaponType.Firearm1H:
case WeaponType.Firearm2H:
{
Character.AnimationManager.Fire();
if (Character.Parts[0].PrimaryWeapon != null)
{
var firearm = Character.SpriteCollection.Firearm1H.SingleOrDefault(i => i.Sprites.Contains(Character.Parts[0].PrimaryWeapon))
?? Character.SpriteCollection.Firearm2H.SingleOrDefault(i => i.Sprites.Contains(Character.Parts[0].PrimaryWeapon));
if (firearm != null)
{
FirearmFx.CreateFireMuzzle(firearm.Name, firearm.Collection);
}
}
break;
}
case WeaponType.Paired:
Character.AnimationManager.SecondaryShot();
break;
}
}
}
private void ChangeState()
{
if (Input.GetKeyDown(KeyCode.I))
{
Character.AnimationManager.SetState(CharacterState.Idle);
}
if (Input.GetKeyDown(KeyCode.E))
{
Character.AnimationManager.SetState(CharacterState.Ready);
}
if (Input.GetKeyDown(KeyCode.W))
{
Character.AnimationManager.SetState(CharacterState.Walk);
}
if (Input.GetKeyDown(KeyCode.R))
{
Character.AnimationManager.SetState(CharacterState.Run);
}
if (Input.GetKeyDown(KeyCode.U))
{
Character.AnimationManager.SetState(CharacterState.Jump);
}
if (Input.GetKeyDown(KeyCode.C))
{
Character.AnimationManager.SetState(CharacterState.Climb);
}
if (Input.GetKeyDown(KeyCode.D))
{
Character.AnimationManager.Die();
}
if (Input.GetKeyDown(KeyCode.H))
{
Character.AnimationManager.Hit();
}
if (Input.GetKeyDown(KeyCode.B))
{
Character.AnimationManager.SetState(CharacterState.ShieldBlock);
}
else if (Input.GetKeyUp(KeyCode.B))
{
Character.AnimationManager.SetState(CharacterState.Idle);
}
}
public void TurnLeft()
{
Character.SetDirection(Vector2.left);
}
public void TurnRight()
{
Character.SetDirection(Vector2.right);
}
public void TurnUp()
{
Character.SetDirection(Vector2.up);
}
public void TurnDown()
{
Character.SetDirection(Vector2.down);
}
public void Show4Directions()
{
Character.SetDirection(Vector2.zero);
}
public void OpenLink(string url)
{
Application.OpenURL(url);
}
}
}

View File

@@ -1,11 +1,11 @@
fileFormatVersion: 2
guid: 25868e9adbb55514bab7bd9755b7c690
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 25868e9adbb55514bab7bd9755b7c690
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,70 +1,70 @@
using Assets.HeroEditor4D.Common.Scripts.CharacterScripts;
using Assets.HeroEditor4D.Common.Scripts.Enums;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.ExampleScripts
{
/// <summary>
/// An example of how to change character's equipment.
/// </summary>
public class EquipmentExample : MonoBehaviour
{
public Character4D Character;
public AppearanceExample AppearanceExample;
public void EquipRandomArmor()
{
var randomIndex = Random.Range(0, Character.SpriteCollection.Armor.Count);
var randomItem = Character.SpriteCollection.Armor[randomIndex];
Character.Equip(randomItem, EquipmentPart.Armor); AppearanceExample.Refresh();
}
public void RemoveArmor()
{
Character.UnEquip(EquipmentPart.Armor);
AppearanceExample.Refresh();
}
public void EquipRandomHelmet()
{
var randomIndex = Random.Range(0, Character.SpriteCollection.Armor.Count);
var randomItem = Character.SpriteCollection.Armor[randomIndex];
Character.Equip(randomItem, EquipmentPart.Helmet);
AppearanceExample.Refresh();
}
public void RemoveHelmet()
{
Character.UnEquip(EquipmentPart.Helmet);
AppearanceExample.Refresh();
}
public void EquipRandomShield()
{
var randomIndex = Random.Range(0, Character.SpriteCollection.Shield.Count);
var randomItem = Character.SpriteCollection.Shield[randomIndex];
Character.Equip(randomItem, EquipmentPart.Shield);
}
public void RemoveShield()
{
Character.UnEquip(EquipmentPart.Shield);
}
public void EquipRandomWeapon()
{
var randomIndex = Random.Range(0, Character.SpriteCollection.MeleeWeapon1H.Count);
var randomItem = Character.SpriteCollection.MeleeWeapon1H[randomIndex];
Character.Equip(randomItem, EquipmentPart.MeleeWeapon1H);
}
public void RemoveWeapon()
{
Character.UnEquip(EquipmentPart.MeleeWeapon1H);
}
}
using Assets.HeroEditor4D.Common.Scripts.CharacterScripts;
using Assets.HeroEditor4D.Common.Scripts.Enums;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.ExampleScripts
{
/// <summary>
/// An example of how to change character's equipment.
/// </summary>
public class EquipmentExample : MonoBehaviour
{
public Character4D Character;
public AppearanceExample AppearanceExample;
public void EquipRandomArmor()
{
var randomIndex = Random.Range(0, Character.SpriteCollection.Armor.Count);
var randomItem = Character.SpriteCollection.Armor[randomIndex];
Character.Equip(randomItem, EquipmentPart.Armor); AppearanceExample.Refresh();
}
public void RemoveArmor()
{
Character.UnEquip(EquipmentPart.Armor);
AppearanceExample.Refresh();
}
public void EquipRandomHelmet()
{
var randomIndex = Random.Range(0, Character.SpriteCollection.Armor.Count);
var randomItem = Character.SpriteCollection.Armor[randomIndex];
Character.Equip(randomItem, EquipmentPart.Helmet);
AppearanceExample.Refresh();
}
public void RemoveHelmet()
{
Character.UnEquip(EquipmentPart.Helmet);
AppearanceExample.Refresh();
}
public void EquipRandomShield()
{
var randomIndex = Random.Range(0, Character.SpriteCollection.Shield.Count);
var randomItem = Character.SpriteCollection.Shield[randomIndex];
Character.Equip(randomItem, EquipmentPart.Shield);
}
public void RemoveShield()
{
Character.UnEquip(EquipmentPart.Shield);
}
public void EquipRandomWeapon()
{
var randomIndex = Random.Range(0, Character.SpriteCollection.MeleeWeapon1H.Count);
var randomItem = Character.SpriteCollection.MeleeWeapon1H[randomIndex];
Character.Equip(randomItem, EquipmentPart.MeleeWeapon1H);
}
public void RemoveWeapon()
{
Character.UnEquip(EquipmentPart.MeleeWeapon1H);
}
}
}

View File

@@ -1,11 +1,11 @@
fileFormatVersion: 2
guid: 1fc4994ee519994419620d94ff554cde
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 1fc4994ee519994419620d94ff554cde
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,59 +1,59 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Assets.HeroEditor4D.Common.Scripts.CharacterScripts;
using Assets.HeroEditor4D.Common.Scripts.Collections;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.ExampleScripts
{
public class FirearmFxExample : MonoBehaviour
{
public Character4D Character4D;
public AudioSource AudioSource;
public FirearmCollection FirearmCollection;
private readonly List<ParticleSystem> _instances = new List<ParticleSystem>();
private string _muzzleId;
public void CreateFireMuzzle(string firearmName, string fallback = null)
{
var firearmParams = FirearmCollection.FirearmParams.SingleOrDefault(i => i.Name == firearmName)
?? FirearmCollection.FirearmParams.SingleOrDefault(i => i.Name == fallback)
?? FirearmCollection.FirearmParams.SingleOrDefault(i => i.Name == "Basic");
if (firearmParams == null) throw new Exception($"Firearm params not found for {firearmName}. Please check FirearmCollection.");
if (_muzzleId != firearmParams.Name)
{
Initialize(firearmParams);
}
foreach (var muzzle in _instances.Where(i => i.gameObject.activeInHierarchy))
{
muzzle.Play(true);
}
AudioSource.PlayOneShot(firearmParams.ShotSound);
}
private void Initialize(FirearmParams firearmParams)
{
if (_instances.Count > 0)
{
_instances.ForEach(i => Destroy(i.gameObject));
_instances.Clear();
}
for (var i = 0; i < 4; i++)
{
var anchor = Character4D.Parts[i].AnchorFireMuzzle;
var muzzle = Instantiate(firearmParams.FireMuzzlePrefab, anchor);
_instances.Add(muzzle);
}
_muzzleId = firearmParams.Name;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using Assets.HeroEditor4D.Common.Scripts.CharacterScripts;
using Assets.HeroEditor4D.Common.Scripts.Collections;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.ExampleScripts
{
public class FirearmFxExample : MonoBehaviour
{
public Character4D Character4D;
public AudioSource AudioSource;
public FirearmCollection FirearmCollection;
private readonly List<ParticleSystem> _instances = new List<ParticleSystem>();
private string _muzzleId;
public void CreateFireMuzzle(string firearmName, string fallback = null)
{
var firearmParams = FirearmCollection.FirearmParams.SingleOrDefault(i => i.Name == firearmName)
?? FirearmCollection.FirearmParams.SingleOrDefault(i => i.Name == fallback)
?? FirearmCollection.FirearmParams.SingleOrDefault(i => i.Name == "Basic");
if (firearmParams == null) throw new Exception($"Firearm params not found for {firearmName}. Please check FirearmCollection.");
if (_muzzleId != firearmParams.Name)
{
Initialize(firearmParams);
}
foreach (var muzzle in _instances.Where(i => i.gameObject.activeInHierarchy))
{
muzzle.Play(true);
}
AudioSource.PlayOneShot(firearmParams.ShotSound);
}
private void Initialize(FirearmParams firearmParams)
{
if (_instances.Count > 0)
{
_instances.ForEach(i => Destroy(i.gameObject));
_instances.Clear();
}
for (var i = 0; i < 4; i++)
{
var anchor = Character4D.Parts[i].AnchorFireMuzzle;
var muzzle = Instantiate(firearmParams.FireMuzzlePrefab, anchor);
_instances.Add(muzzle);
}
_muzzleId = firearmParams.Name;
}
}
}

View File

@@ -1,11 +1,11 @@
fileFormatVersion: 2
guid: 275bb744f292b0e43b967c9a2683d5fa
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 275bb744f292b0e43b967c9a2683d5fa
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,35 +1,35 @@
using System.Linq;
using Assets.HeroEditor4D.Common.Scripts.CharacterScripts;
using Assets.HeroEditor4D.InventorySystem.Scripts;
using Assets.HeroEditor4D.InventorySystem.Scripts.Data;
using Assets.HeroEditor4D.InventorySystem.Scripts.Elements;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.ExampleScripts
{
public class InventoryExample : MonoBehaviour
{
public ItemCollection ItemCollection;
public ScrollInventory Inventory;
public Character4D Character;
public AppearanceExample AppearanceExample;
public void Awake()
{
// You must to set an active collection (as there may be several different collections in Resources).
ItemCollection.Active = ItemCollection;
}
public void Start()
{
var items = ItemCollection.Items.Select(i => new Item(i.Id)).ToList();
InventoryItem.OnLeftClick = item =>
{
Character.Equip(item);
AppearanceExample.Refresh();
};
Inventory.Initialize(ref items);
}
}
using System.Linq;
using Assets.HeroEditor4D.Common.Scripts.CharacterScripts;
using Assets.HeroEditor4D.InventorySystem.Scripts;
using Assets.HeroEditor4D.InventorySystem.Scripts.Data;
using Assets.HeroEditor4D.InventorySystem.Scripts.Elements;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.ExampleScripts
{
public class InventoryExample : MonoBehaviour
{
public ItemCollection ItemCollection;
public ScrollInventory Inventory;
public Character4D Character;
public AppearanceExample AppearanceExample;
public void Awake()
{
// You must to set an active collection (as there may be several different collections in Resources).
ItemCollection.Active = ItemCollection;
}
public void Start()
{
var items = ItemCollection.Items.Select(i => new Item(i.Id)).ToList();
InventoryItem.OnLeftClick = item =>
{
Character.Equip(item);
AppearanceExample.Refresh();
};
Inventory.Initialize(ref items);
}
}
}

View File

@@ -1,11 +1,11 @@
fileFormatVersion: 2
guid: 6b928fdd1a4b70a4fb3519759d6f8629
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 6b928fdd1a4b70a4fb3519759d6f8629
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,65 +1,65 @@
using System.Linq;
using Assets.HeroEditor4D.Common.Scripts.CharacterScripts;
using Assets.HeroEditor4D.Common.Scripts.Enums;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.ExampleScripts
{
public class MouseInteractionExample : MonoBehaviour
{
public Character4D Character;
public void Start()
{
var firearm = Character.SpriteCollection.Firearm2H.Single(i => i.Name == "MP5L");
Character.Equip(firearm, EquipmentPart.Firearm2H);
Character.AnimationManager.SetState(CharacterState.Ready);
Character.SetDirection(Vector2.down);
}
// We need LateUpdate() to override Animation transitions.
public void LateUpdate()
{
SetDirection();
RotateFirearm();
}
private void SetDirection()
{
var position = (Vector2) Camera.main.WorldToScreenPoint(Character.Active.AnchorBody.position);
var angle = Vector2.SignedAngle((Vector2) Input.mousePosition - position, Vector2.up);
var direction = Vector2.down;
if (angle > -45 && angle <= 45) direction = Vector2.up;
else if (angle > 45 && angle <= 135) direction = Vector2.right;
else if (angle > -135 && angle <= 45) direction = Vector2.left;
Character.SetDirection(direction);
}
private void RotateFirearm()
{
var armL = Character.Active.BodyRenderers.Single(i => i.name == "ArmL").transform;
var armR = Character.Active.BodyRenderers.Single(i => i.name == "ArmR").transform;
var weapon = Character.Active.PrimaryWeaponRenderer.transform;
var rotation = GetArmRotation(armR);
weapon.Rotate(0, 0, rotation * 2 / 4);
rotation = GetArmRotation(armR);
armL.Rotate(0, 0, rotation);
armR.Rotate(0, 0, rotation);
}
private float GetArmRotation(Transform armR) // You should be a geometry ninja to understand this.
{
var muzzle = Character.Active.AnchorFireMuzzle;
var alpha = Vector2.SignedAngle(armR.position - muzzle.position, muzzle.up);
var magnitude = muzzle.InverseTransformPoint(armR.position).magnitude;
var elbow = (Vector2) muzzle.TransformPoint(0, magnitude * Mathf.Cos(alpha * Mathf.Deg2Rad), 0);
var angle = Vector2.SignedAngle((Vector2) muzzle.position - elbow, (Vector2) Camera.main.ScreenToWorldPoint(Input.mousePosition) - elbow);
return angle;
}
}
using System.Linq;
using Assets.HeroEditor4D.Common.Scripts.CharacterScripts;
using Assets.HeroEditor4D.Common.Scripts.Enums;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.ExampleScripts
{
public class MouseInteractionExample : MonoBehaviour
{
public Character4D Character;
public void Start()
{
var firearm = Character.SpriteCollection.Firearm2H.Single(i => i.Name == "MP5L");
Character.Equip(firearm, EquipmentPart.Firearm2H);
Character.AnimationManager.SetState(CharacterState.Ready);
Character.SetDirection(Vector2.down);
}
// We need LateUpdate() to override Animation transitions.
public void LateUpdate()
{
SetDirection();
RotateFirearm();
}
private void SetDirection()
{
var position = (Vector2) Camera.main.WorldToScreenPoint(Character.Active.AnchorBody.position);
var angle = Vector2.SignedAngle((Vector2) Input.mousePosition - position, Vector2.up);
var direction = Vector2.down;
if (angle > -45 && angle <= 45) direction = Vector2.up;
else if (angle > 45 && angle <= 135) direction = Vector2.right;
else if (angle > -135 && angle <= 45) direction = Vector2.left;
Character.SetDirection(direction);
}
private void RotateFirearm()
{
var armL = Character.Active.BodyRenderers.Single(i => i.name == "ArmL").transform;
var armR = Character.Active.BodyRenderers.Single(i => i.name == "ArmR").transform;
var weapon = Character.Active.PrimaryWeaponRenderer.transform;
var rotation = GetArmRotation(armR);
weapon.Rotate(0, 0, rotation * 2 / 4);
rotation = GetArmRotation(armR);
armL.Rotate(0, 0, rotation);
armR.Rotate(0, 0, rotation);
}
private float GetArmRotation(Transform armR) // You should be a geometry ninja to understand this.
{
var muzzle = Character.Active.AnchorFireMuzzle;
var alpha = Vector2.SignedAngle(armR.position - muzzle.position, muzzle.up);
var magnitude = muzzle.InverseTransformPoint(armR.position).magnitude;
var elbow = (Vector2) muzzle.TransformPoint(0, magnitude * Mathf.Cos(alpha * Mathf.Deg2Rad), 0);
var angle = Vector2.SignedAngle((Vector2) muzzle.position - elbow, (Vector2) Camera.main.ScreenToWorldPoint(Input.mousePosition) - elbow);
return angle;
}
}
}

View File

@@ -1,11 +1,11 @@
fileFormatVersion: 2
guid: 2242debf0f83d5049bad0935b580cc60
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 2242debf0f83d5049bad0935b580cc60
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,69 +1,69 @@
using System.Collections.Generic;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.ExampleScripts
{
/// <summary>
/// General behaviour for projectiles: bullets, rockets and other.
/// </summary>
public class Projectile : MonoBehaviour
{
public List<Renderer> Renderers;
public GameObject Trail;
public GameObject Impact;
public Rigidbody Rigidbody;
public void Start()
{
Destroy(gameObject, 5);
}
public void Update()
{
if (Rigidbody != null && Rigidbody.useGravity)
{
transform.right = Rigidbody.velocity.normalized;
}
}
public void OnTriggerEnter2D(Collider2D other)
{
Bang(other.gameObject);
}
public void OnCollisionEnter2D(Collision2D other)
{
Bang(other.gameObject);
}
private void Bang(GameObject other)
{
ReplaceImpactSound(other);
Impact.SetActive(true);
Destroy(GetComponent<SpriteRenderer>());
Destroy(GetComponent<Rigidbody>());
Destroy(GetComponent<Collider>());
Destroy(gameObject, 1);
foreach (var ps in Trail.GetComponentsInChildren<ParticleSystem>())
{
ps.Stop();
}
foreach (var tr in Trail.GetComponentsInChildren<TrailRenderer>())
{
tr.enabled = false;
}
}
private void ReplaceImpactSound(GameObject other)
{
var sound = other.GetComponent<AudioSource>();
if (sound != null && sound.clip != null)
{
Impact.GetComponent<AudioSource>().clip = sound.clip;
}
}
}
using System.Collections.Generic;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.ExampleScripts
{
/// <summary>
/// General behaviour for projectiles: bullets, rockets and other.
/// </summary>
public class Projectile : MonoBehaviour
{
public List<Renderer> Renderers;
public GameObject Trail;
public GameObject Impact;
public Rigidbody Rigidbody;
public void Start()
{
Destroy(gameObject, 5);
}
public void Update()
{
if (Rigidbody != null && Rigidbody.useGravity)
{
transform.right = Rigidbody.velocity.normalized;
}
}
public void OnTriggerEnter2D(Collider2D other)
{
Bang(other.gameObject);
}
public void OnCollisionEnter2D(Collision2D other)
{
Bang(other.gameObject);
}
private void Bang(GameObject other)
{
ReplaceImpactSound(other);
Impact.SetActive(true);
Destroy(GetComponent<SpriteRenderer>());
Destroy(GetComponent<Rigidbody>());
Destroy(GetComponent<Collider>());
Destroy(gameObject, 1);
foreach (var ps in Trail.GetComponentsInChildren<ParticleSystem>())
{
ps.Stop();
}
foreach (var tr in Trail.GetComponentsInChildren<TrailRenderer>())
{
tr.enabled = false;
}
}
private void ReplaceImpactSound(GameObject other)
{
var sound = other.GetComponent<AudioSource>();
if (sound != null && sound.clip != null)
{
Impact.GetComponent<AudioSource>().clip = sound.clip;
}
}
}
}

View File

@@ -1,11 +1,11 @@
fileFormatVersion: 2
guid: bff3cc7e866703c4b88449d6d2cb4851
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: bff3cc7e866703c4b88449d6d2cb4851
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@@ -1,42 +1,42 @@
using System.Collections.Generic;
using System.Linq;
using Assets.HeroEditor4D.Common.Scripts.CharacterScripts;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace Assets.HeroEditor4D.Common.Scripts.ExampleScripts
{
/// <summary>
/// A small helper used in Quick Start scene.
/// </summary>
public class QuickStart : MonoBehaviour
{
public List<Character4D> CharacterPrefabs;
public ControlsExample ControlsExample;
public EquipmentExample EquipmentExample;
public AppearanceExample AppearanceExample;
public InventoryExample InventoryExample;
public static string ReturnSceneName;
public void Awake()
{
var character = Instantiate(CharacterPrefabs.First(i => i != null));
character.transform.position = Vector2.zero;
ControlsExample.Character = character;
EquipmentExample.Character = character;
AppearanceExample.Character = character;
InventoryExample.Character = character;
}
public void Update()
{
if (Input.GetKeyDown(KeyCode.Escape) && ReturnSceneName != null)
{
SceneManager.LoadScene(ReturnSceneName);
}
}
}
using System.Collections.Generic;
using System.Linq;
using Assets.HeroEditor4D.Common.Scripts.CharacterScripts;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace Assets.HeroEditor4D.Common.Scripts.ExampleScripts
{
/// <summary>
/// A small helper used in Quick Start scene.
/// </summary>
public class QuickStart : MonoBehaviour
{
public List<Character4D> CharacterPrefabs;
public ControlsExample ControlsExample;
public EquipmentExample EquipmentExample;
public AppearanceExample AppearanceExample;
public InventoryExample InventoryExample;
public static string ReturnSceneName;
public void Awake()
{
var character = Instantiate(CharacterPrefabs.First(i => i != null));
character.transform.position = Vector2.zero;
ControlsExample.Character = character;
EquipmentExample.Character = character;
AppearanceExample.Character = character;
InventoryExample.Character = character;
}
public void Update()
{
if (Input.GetKeyDown(KeyCode.Escape) && ReturnSceneName != null)
{
SceneManager.LoadScene(ReturnSceneName);
}
}
}
}

View File

@@ -1,11 +1,11 @@
fileFormatVersion: 2
guid: 8e6421c02d1181d4795f9fe4e0320c5c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:
fileFormatVersion: 2
guid: 8e6421c02d1181d4795f9fe4e0320c5c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant: