Exemplo n.º 1
0
    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);
                    }
                }
            }
        }
    }
Exemplo n.º 2
0
    private void InstantiateCharacter()
    {
        var characterPrefab = Resources.Load <VisualCharacter>(_prefabPath);

        VisualCharacter = Object.Instantiate(characterPrefab);
        VisualCharacter.gameObject.name = Name;
    }
Exemplo n.º 3
0
    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();
            }
        }
Exemplo n.º 5
0
    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);
        }
    }
Exemplo n.º 6
0
    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);
    }
Exemplo n.º 7
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();
            }
        }
Exemplo n.º 9
0
    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);
            }
        }
    }
Exemplo n.º 10
0
    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);
    }
Exemplo n.º 11
0
    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;
                }
            }
        }
    }
Exemplo n.º 12
0
    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);
    }
Exemplo n.º 13
0
    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);
                }
            }
        }
    }
Exemplo n.º 14
0
    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));
        }
    }
Exemplo n.º 16
0
 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();
            }
        }
Exemplo n.º 21
0
 public abstract GameObject UseWeapon(VisualCharacter owner);
Exemplo n.º 22
0
 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;
        }
    }