public override void Attack(Direction direction, VisualCharacter visualCharacter) { Debug.Log("Healing..."); if (visualCharacter.m_Character.ApplyManapoints(-m_ManaConsumption)) { //Calculate the range based on the size of the character Vector2 range = new Vector2(visualCharacter.GetComponent <BoxCollider2D>().size.x + m_Range, visualCharacter.GetComponent <BoxCollider2D>().size.y + m_Range); Collider2D[] colliders = Physics2D.OverlapCapsuleAll(visualCharacter.transform.position, range, CapsuleDirection2D.Vertical, 0f); foreach (var collider in colliders) { if (collider != visualCharacter.GetComponent <Collider2D>() && collider.tag == "Character" && collider.gameObject.layer == GameManager.m_PlayerLayer) { //Get character VisualCharacter character = collider.GetComponent <VisualCharacter>(); if (character) { character.m_Character.ApplyHealthpoints(m_HealAmount); } } } } }
private void InstantiateCharacter() { var characterPrefab = Resources.Load <VisualCharacter>(_prefabPath); VisualCharacter = Object.Instantiate(characterPrefab); VisualCharacter.gameObject.name = Name; }
void OnCollisionEnter(Collision tCollider) { VisualCharacter tHitCharPRES = tCollider.gameObject.GetComponent <VisualCharacter>(); Character tVisualChar = tHitCharPRES != null ? tHitCharPRES.CharacterBUS : null; m_pArrowBUS.OnCollisionEnter(tVisualChar); }
public override void Think() { allyDistance = Vector3.Distance(target.transform.position, Character.transform.position); if (attackTarget != null && attackTarget.isDead) attackTarget = null; //Debug.Log(Character.name + " " + target.name); if (attackTarget == null) { attackTarget = Character.Search(Character.transform.position, 7f, "Enemy"); } if (target != null && attackTarget == null) { enemyDistance = Vector3.Distance(Character.transform.position, target.transform.position); if (enemyDistance > maxRange) Character.Follow(target.transform.position, 0.5f); } // Close combat else if (attackTarget != null && Character.Link.Weapon.GetType() != typeof(Weapon_Bow)) { Chase(); } //Attack with a bow else if (attackTarget != null && Character.Link.Weapon.GetType() == typeof(Weapon_Bow) ) { Character.Look((attackTarget.transform.position - Character.transform.position).normalized); Character.Attack(); } }
public override void Behaviour(VisualCharacter character) { var speed = 45.0f; var dist = 0.0f; Vector3 pos = Vector3.zero; // Shooting plane Plane plane = new Plane(Vector3.up, new Vector3(0, 1.5f, 0)); Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (plane.Raycast(ray, out dist)) { pos = ray.GetPoint(dist); } Vector3 shootDirection = pos - character.transform.position; // Spawn arrow var arrow = GameObject.Instantiate(_arrowPrefab, character.transform.position + (shootDirection.normalized * 1.75f), Quaternion.identity) as GameObject; if (arrow != null) { arrow.transform.SetParent(_arrowsCirculating); // Fire arrow arrow.GetComponent <Rigidbody>().velocity = shootDirection * (speed / shootDirection.magnitude); } }
private void CreateCharacterPrefabs() { //Make Enemies foreach (var enemy in m_CharacterManager.m_Enemies) { if (enemy.m_VisualCharacter) { VisualCharacter character = Instantiate(enemy.m_VisualCharacter, enemy.m_LastSavedPosition, Quaternion.identity); enemy.m_VisualCharacter = character; character.m_Character = enemy; enemy.InitCharacter(); } } //HUD chunk float chunkWidth = (m_UIManager.m_Canvas.offsetMax.x - m_UIManager.m_Canvas.offsetMin.x) / (m_CharacterManager.m_Players.Count + 2); //Create players / link their HUD for (int i = 0; i < m_CharacterManager.m_Players.Count; i++) { var player = m_CharacterManager.m_Players[i]; if (player.m_VisualCharacter) { VisualCharacter character = Instantiate(player.m_VisualCharacter, player.m_LastSavedPosition, Quaternion.identity); //Add character controller, but disable it var controller = character.gameObject.GetComponent <CharacterController2D>(); if (!controller) { controller = character.gameObject.AddComponent <CharacterController2D>(); controller.m_Speed = player.m_CharacterStats.m_Speed; } player.m_VisualCharacter = character; character.m_Character = player; var HUDObject = Instantiate(m_UIManager.m_HUDPrefab, m_UIManager.m_Canvas.transform); //Calculate position float index = (i - ((m_CharacterManager.m_Players.Count - 1) / 2f)) * (m_CharacterManager.m_Players.Count / 2f); Vector2 pos = new Vector2(index * chunkWidth, m_UIManager.m_HUDYPos); var HUDRect = HUDObject.GetComponent <RectTransform>(); float width = HUDRect.offsetMax.x - HUDRect.offsetMin.x; float height = HUDRect.offsetMax.y - HUDRect.offsetMin.y; HUDRect.offsetMin = new Vector2(pos.x - width / 2f, pos.y - height / 2f); HUDRect.offsetMax = new Vector2(pos.x + width / 2f, pos.y + height / 2f); player.m_HUD = HUDObject.GetComponent <HUD>(); player.m_HUD.m_Character = player; player.InitCharacter(); } } m_UIManager.Refresh(); m_CharacterManager.SetCurrentPlayer(0); }
public void Initialize(float timer, Vector2 velocity, VisualCharacter owner, Bow owningBow) { _MaxTimer = timer; var rigidBody = GetComponent <Rigidbody2D>(); if (rigidBody) { rigidBody.velocity = velocity; } _OwningCharacter = owner; _OwningBow = owningBow; }
public override void Think() { // Search for a target 'til seen if (m_target == null) m_target = Character.Search(Character.transform.position, chaseRange, "Player"); // Chase the target! if (m_target != null) { distance = Vector3.Distance(Character.transform.position, m_target.transform.position); Chase(); } }
public override void Use() { RaycastHit Hit; if (Physics.Raycast(m_pUser.Position + Vector3.up, m_pUser.Forward, out Hit, m_fRange, m_iTargetsLayer, QueryTriggerInteraction.Ignore)) { VisualCharacter tChar = Hit.collider.transform.parent.gameObject.GetComponent <VisualCharacter>(); if (tChar != null) { tChar.CharacterBUS.Heal(m_iHeal); } } }
public override GameObject UseWeapon(VisualCharacter staffOwner) { RaycastHit hit; Vector3 rayDirection = staffOwner.transform.TransformDirection(Vector3.forward); Debug.DrawRay(staffOwner.transform.position, rayDirection * AttackRange, Color.red); if ((Physics.Raycast(staffOwner.transform.position, rayDirection, out hit, AttackRange) && (hit.collider.CompareTag("Player")))) { return(hit.collider.gameObject); } return(null); }
private void Update() { if (!_Character) { _Character = GetComponent <VisualCharacter>(); } if (_CurrentTargetIndex >= m_PatrolPoints.Count) { return; } //Get direction if (Vector3.Distance(m_PatrolPoints[_CurrentTargetIndex], transform.position) > m_Distance) { var direction = m_PatrolPoints[_CurrentTargetIndex] - this.transform.position; direction.Normalize(); direction *= _Speed; _RigidBody2D.velocity = direction; } else { _CurrentTargetIndex++; if (_CurrentTargetIndex >= GameManager.m_Instance.m_CharacterManager.m_Enemies.Count) { _CurrentTargetIndex = 0; } } _Character.m_Character.m_CurrentWeaponTimer += Time.deltaTime; if (_Character.m_Character.m_CurrentWeaponTimer >= _Character.m_Character.m_CharacterStats.m_UnarmedRateOfAttack) { //Check if something is ine attack range Vector2 range = new Vector2(_Character.GetComponent <BoxCollider2D>().size.x + _Character.m_Character.m_CharacterStats.m_UnarmedRange, _Character.GetComponent <BoxCollider2D>().size.y + _Character.m_Character.m_CharacterStats.m_UnarmedRange); Collider2D[] colliders = Physics2D.OverlapCapsuleAll(this.transform.position, range, CapsuleDirection2D.Vertical, 0); foreach (var collider in colliders) { if (collider.tag == "Character" && collider.gameObject.layer == GameManager.m_PlayerLayer) { _Character.m_Character.Attack(Direction.Left); _Character.m_Character.m_CurrentWeaponTimer = 0; return; } } } }
public override void Attack(Direction direction, VisualCharacter visualCharacter) { Debug.Log("Shooting arrow..."); //Find out velocity vector and rotation float angle = 0f; Vector2 velocity = new Vector2(0f, 0f); switch (direction) { case Direction.Left: angle = 0f; velocity.x = -m_ArrowSpeed; break; case Direction.Up: angle = -90f; velocity.y = m_ArrowSpeed; break; case Direction.Right: angle = -180f; velocity.x = m_ArrowSpeed; break; case Direction.Down: angle = -270f; velocity.y = -m_ArrowSpeed; break; } GameObject arrowObject = Instantiate(m_ArrowPrefab, visualCharacter.transform.position, Quaternion.Euler(0, 0, angle)); Arrow arrowScript = arrowObject.GetComponent <Arrow>(); if (!arrowScript) { Destroy(arrowObject); Debug.LogError("No Arrow Script on the arrow object."); } //Calculate how long the arrow will exist float time = m_Range / m_ArrowSpeed; arrowScript.Initialize(time, velocity, visualCharacter, this); }
public override void Attack(Direction direction) { Vector2 range = new Vector2(m_VisualCharacter.GetComponent <BoxCollider2D>().size.x + m_VisualCharacter.m_Character.m_CharacterStats.m_UnarmedRange, m_VisualCharacter.GetComponent <BoxCollider2D>().size.y + m_VisualCharacter.m_Character.m_CharacterStats.m_UnarmedRange); Collider2D[] colliders = Physics2D.OverlapCapsuleAll(m_VisualCharacter.transform.position, range, CapsuleDirection2D.Vertical, 0); foreach (var collider in colliders) { if (collider.tag == "Character" && collider.gameObject.layer == GameManager.m_PlayerLayer) { //Get character VisualCharacter character = collider.GetComponent <VisualCharacter>(); if (character) { character.m_Character.ApplyHealthpoints(-m_VisualCharacter.m_Character.m_CharacterStats.m_Attack); } } } }
public override void Use() { Collider[] tHitColliders = Physics.OverlapSphere(m_pUser.Position + Vector3.up, m_fRange, m_iTargetsLayer, QueryTriggerInteraction.Ignore); for (int i = 0; i < tHitColliders.Length; i++) { VisualCharacter tHitChar = tHitColliders[i].transform.parent.GetComponent <VisualCharacter>(); if (tHitChar != null) { Vector3 tSelfToHit = tHitColliders[i].transform.position - m_pUser.Position; if (tHitChar.CharacterBUS != m_pUser && tHitChar.CharacterBUS.CharSide != m_pUser.CharSide && Vector3.Dot(tSelfToHit, m_pUser.Forward) > 0.0f) { tHitChar.CharacterBUS.Damage(m_pUser.Atk + m_iAtk); } } } }
public CharacterManager() { VisualCharacter.S_Initialize(); Item.S_Initialize(); pCharactersContainer = GameObject.Find("Heroes").transform; m_pHeroesBUS = new List <Hero>(3); m_pHeroesBUS.Add(new Hero("Lucia", Vector3.zero, Character.Side.GoodGuys)); m_pHeroesBUS.Add(new Hero("Richard", Vector3.one, Character.Side.GoodGuys)); m_pHeroesBUS.Add(new Hero("Nataly", -Vector3.one, Character.Side.GoodGuys)); int i = 0; for (i = 0; i < m_pHeroesBUS.Count; i++) { m_pHeroesBUS[i].OnDeath += DeadHeroHandle; } m_pHeroesPRES = new List <VisualHero>(3); GameObject pRes = Resources.Load("Heroes/Hero") as GameObject; CreateHero(pRes, m_pHeroesBUS[0], Weapon.WeaponType.Sword, Armor.ArmorType.Heavy); CreateHero(pRes, m_pHeroesBUS[1], Weapon.WeaponType.Bow, Armor.ArmorType.Medium); CreateHero(pRes, m_pHeroesBUS[2], Weapon.WeaponType.Staff, Armor.ArmorType.Light); SelectHero(0); pEnemiesContainer = GameObject.Find("Enemies").transform; pEnemiesPRES = pEnemiesContainer.GetComponentsInChildren <VisualEnemy>(); for (i = 0; i < pEnemiesPRES.Length; i++) { VisualEnemy pVisualEnemy = pEnemiesPRES[i]; GameObject pGameObject = pVisualEnemy.gameObject; pVisualEnemy.Initialize(new Enemy(pGameObject.name, pGameObject.transform.position, Character.Side.BadGuys)); } }
public virtual void Behaviour(VisualCharacter character) { // empty implementation }
//Vector3 m_direction; //void Search(Vector3 position, float radius, string tag) //{ // foreach (Collider target in Physics.OverlapSphere(Character.transform.position, chaseRange)) // { // if (target.tag == tag) // { // m_target = target.GetComponent<VisualCharacter>(); // break; // } // } //} void Chase() { Character.Follow(m_target.transform.position, 0f); //float distance = Vector3.Distance(Character.transform.position, m_target.transform.position); //m_direction = m_target.transform.position - Character.transform.position; //m_direction.y = 0; //Character.Move(m_direction.normalized); if (distance > chaseRange || m_target.isDead) m_target = null; else if (distance <= attackRange && !m_target.isDead) { Character.Attack(); } }
public AIStateCompanion(VisualCharacter character) : base(character) { }
public AIStateZombie(VisualCharacter character) : base(character) { }
void Chase() { Character.Follow(attackTarget.transform.position, 0f); if (enemyDistance > chaseRange || attackTarget.isDead) attackTarget = null; else if (enemyDistance <= attackRange && !attackTarget.isDead) { Character.Attack(); } }
public abstract GameObject UseWeapon(VisualCharacter owner);
public abstract void Attack(Direction direction, VisualCharacter visualCharacter);
void SetupCharacter(Character character, VisualCharacter vcharacter) { // Setup function for characters // Setup stats //character.Attack = vcharacter.attack; // Based off from equipped weapon //character.Defence = vcharacter.defence; // Based off from equpped armor character.Agility = vcharacter.agility; character.Level = vcharacter.level; character.Health = vcharacter.health; character.Mana = vcharacter.mana; character.Name = vcharacter.charName == "" ? vcharacter.name : vcharacter.charName; character.Link = vcharacter; //if (vcharacter.weapon != null) //{ //GameManager.Instance.Inventory.Give(vcharacter.weapon); character.Weapon = (Weapon)GameManager.Instance.Inventory.Give(vcharacter.weapon); //} if (vcharacter.armor != null) { GameManager.Instance.Inventory.Give(vcharacter.armor); character.Armor = (Armor)vcharacter.armor.Link; } }