Inheritance: MonoBehaviour
 void Damage(AttackArea.AttackInfo attackInfo)
 {
     transform.root.SendMessage ("Damage",attackInfo);
     if (transform.root.tag == "Boss") {
         transform.root.gameObject.SendMessage ("Damage", attackInfo);
     }
 }
Exemple #2
0
    public Combat(string characterName, GameObject character, string characterWeapon)
    {
        this.characterName   = characterName;
        this.character       = character;
        this.characterWeapon = characterWeapon;

        health      = GameObject.Find("Databases").GetComponent <StatDB> ().getValue(this.characterName, "Health");
        maxHealth   = health;
        mana        = GameObject.Find("Databases").GetComponent <StatDB> ().getValue(this.characterName, "Mana");
        maxMana     = mana;
        defense     = GameObject.Find("Databases").GetComponent <StatDB> ().getValue(this.characterName, "Defense");
        damage      = (int)(GameObject.Find("Databases").GetComponent <WeaponDB> ().getValue(this.characterWeapon, "Damage"));
        attackDelay = (int)(GameObject.Find("Databases").GetComponent <WeaponDB> ().getValue(this.characterWeapon, "Speed"));

        float attackWidth = GameObject.Find("Databases").GetComponent <WeaponDB> ().getValue(characterWeapon, "Width");
        float attackRange = GameObject.Find("Databases").GetComponent <WeaponDB> ().getValue(characterWeapon, "Length");

        attackArea = new AttackArea(this.character, characterName, attackWidth, attackRange);

        characterWidth  = this.character.GetComponent <BoxCollider2D> ().bounds.extents.x * 2;
        characterHeight = this.character.GetComponent <BoxCollider2D> ().bounds.extents.y * 2;

        attackTimer         = new UtilTimer(1.5f, 1.5f);
        attackDelayTimer    = new UtilTimer(1.5f, 1.5f);        // use attackDelay = (int)(GameObject.Find ("Databases").GetComponent<WeaponDB> ().getValue (this.characterWeapon, "Speed"));
        combatCooldownTimer = new UtilTimer(1.5f, 1.5f);
        regenerationTimer   = new UtilTimer(1.5f, 1.5f);
    }
Exemple #3
0
    private bool ShouldStunPlayer(AttackArea attackArea)
    {
        bool chanceToRandomlyHurtPlayer = attackArea.GetComponentInParent <Transform>().tag == "Boss" || random.Next() > 0.5;
        bool isAttackKnife = attackArea && attackArea.GetAttackType() == Weapon.AttackType.Knife;

        return(chanceToRandomlyHurtPlayer && !isAttackKnife);
    }
    protected virtual void StandardAttack(int damageToDeal)
    {
        AttackArea attack = Instantiate(attackArea, attackPoint.position, Quaternion.identity, transform).GetComponent <AttackArea>();

        attack.Damage             = damageToDeal;
        attack.KnockbackDirection = xMovementDirection;
        attack.KnockbackPower     = knockbackPower;
        attack.KnockbackDuration  = knockbackDuration;
        attack.layerToIgnore      = gameObject.layer;
        Invoke("ToggleAttackAnimation", 0);
        Invoke("ToggleAttackAnimation", 0.25f);

        //Debug.DrawRay(transform.position, xMovementDirection * attackRange, Color.blue, 0.5f);
        //RaycastHit2D[] newHits = Physics2D.RaycastAll(transform.position, xMovementDirection, attackRange, enemyLayer);
        //List<RaycastHit2D> beenHits = new List<RaycastHit2D>();

        //foreach (RaycastHit2D newHit in newHits)
        //{
        //    foreach (RaycastHit2D beenHit in beenHits)
        //    {
        //        if (newHit == beenHit)
        //        {
        //            break;
        //        }
        //    }
        //    beenHits.Add(newHit);
        //    newHit.collider.GetComponent<Character2D>().TakeDamage(damage);
        //    newHit.collider.GetComponent<Character2D>().Knockback(new Vector2(xMovementDirection.x, 0.5f), knockbackPower, knockbackDuration);
        //    Debug.Log(damage + " damage dealt to " + newHit.collider.gameObject.name + "!");
        //}
    }
Exemple #5
0
    private void OnTriggerEnter(Collider other)
    {
        //AttackAreaのついている攻撃が来たら属性を調べる
        if (other.gameObject.GetComponent <AttackArea>())
        {
            AttackMagic = other.gameObject.GetComponent <AttackArea>();

            //プレイヤーの攻撃でしか壊せない
            if (AttackMagic.aligment == aligment.player)
            {
                Attackele = AttackMagic.element.type;
                //全ての攻撃で壊れるbool
                if (ALL || Attackele == Weakele)
                {
                    GetDamage(AttackMagic.Damage);
                    if (_HP <= 0)
                    {
                        SEManager.SetSE(destSE);
                        //HPを減らす攻撃であれば壊れる
                        Destroy(gameObject);
                    }
                }
            }
        }
    }
Exemple #6
0
    public override IEnumerator DoTurn()
    {
        List <Cell> cells = new List <Cell>();

        foreach (Cell c in MoveArea)
        {
            cells.Add(c);
        }
        foreach (Cell c in AttackArea)
        {
            cells.Add(c);
        }

        FindTarget(cells.ToArray());

        if (Target != null)
        {
            ChooseWeapon();

            yield return(Fighter.ApplyPath(FindPath(), GameSettings.DoMoveAnimation));

            TargetData();

            if (Target != null && AttackArea.Contains(Map.UnitTile(Target)))
            {
                yield return(new UnityEngine.WaitForSeconds(1));

                Attack();
            }
        }
    }
    element Weakele;  //壁の弱点属性


    private void OnTriggerEnter(Collider other)
    {
        Debug.Log("gethit");
        //AttackAreaのついている攻撃が来た
        if (other.gameObject.GetComponent <AttackArea>())
        {
            AttackMagic = other.gameObject.GetComponent <AttackArea>();
            //プレイヤーの攻撃でしか壊せない
            if (AttackMagic.aligment == aligment.player)
            {
                //全ての攻撃で壊れるbool
                if (All)
                {
                    HP -= AttackMagic.Damage;
                    if (HP <= 0)
                    {
                        //HPを減らす攻撃であれば壊れる
                        Destroy(gameObject);
                    }
                }
                //壁の弱点と攻撃の属性があっていれば
                else if (AttackMagic.element.type == Weakele)
                {
                    HP -= AttackMagic.Damage;
                    if (HP <= 0)
                    {
                        //HPを減らす攻撃であれば壊れる
                        Destroy(gameObject);
                    }
                }
            }
        }
    }
 void Start()
 {
     anim         = GetComponent <Animator>();
     agent        = GetComponent <NavMeshAgent>();
     Range        = attackArea.GetComponent <AttackArea>();
     Range.Damage = Damage;
     attackArea.SetActive(false);
 }
Exemple #9
0
    public override IEnumerator DoTurn()
    {
        FindTarget(AttackArea.ToArray());
        ChooseWeapon();
        Attack();

        yield return(null);
    }
Exemple #10
0
        public void Attack()
        {
            if (this.targetEnemy != null)
            {
                //Attack Reach. If a nearby enemy game unit is within attack range, engage and attack.
                AttackArea area = this.GetComponentInChildren <AttackArea>();
                if (area != null)
                {
                    if (area.enemiesInAttackRange.Contains(this.targetEnemy))
                    {
                        if (this.attackCooldownCounter <= 0f)
                        {
                            CmdAttack(this.targetEnemy.gameObject, this.unitAttributes.attackCooldownPrefabList[this.level]);

                            GameMetricLogger.Increment(GameMetricOptions.Attacks);
                            GameMetricLogger.Increment(GameMetricOptions.AttackTime);
                        }
                    }
                    else if (area.enemiesInAttackRange.Count > 0)
                    {
                        this.targetEnemy = area.enemiesInAttackRange[0];
                    }

                    GameMetricLogger.Increment(GameMetricOptions.BattleEngagementTime);
                }
            }
            else if (this.targetAIEnemy != null)
            {
                AttackArea area = this.GetComponentInChildren <AttackArea>();
                if (area != null)
                {
                    if (area.otherEnemies.Contains(this.targetAIEnemy))
                    {
                        if (this.attackCooldownCounter <= 0f)
                        {
                            if (this.unitAttributes.attackCooldownPrefabList.Count > 0)
                            {
                                AttackAI(this.targetAIEnemy.gameObject, this.unitAttributes.attackCooldownPrefabList[this.level]);
                            }
                            else
                            {
                                AttackAI(this.targetAIEnemy.gameObject, 1f);
                            }

                            GameMetricLogger.Increment(GameMetricOptions.Attacks);
                            GameMetricLogger.Increment(GameMetricOptions.AttackTime);
                        }
                    }
                    else if (area.otherEnemies.Count > 0)
                    {
                        this.targetAIEnemy = area.otherEnemies[0];
                    }

                    GameMetricLogger.Increment(GameMetricOptions.BattleEngagementTime);
                }
            }
        }
Exemple #11
0
 private void Start()
 {
     rb             = GetComponent <Rigidbody>();
     Range          = attackArea.GetComponent <AttackArea>();
     Range.aligment = aligment.enemy;
     Range.element  = null;
     Range.Damage   = Damage;
     attackArea.SetActive(false);
 }
Exemple #12
0
 private void Start()
 {
     anim           = GetComponent <Animator>();
     Range          = attackArea.GetComponent <AttackArea>();
     Range.aligment = aligment.enemy;
     Range.element  = null;
     Range.Damage   = Damage;
     attackArea.SetActive(false);
 }
Exemple #13
0
 void Damage(AttackArea.AttackInfo attackInfo)
 {
     status.HP -= attackInfo.attackPower;
     if (status.HP <= 0) {
         status.HP = 0;
         // 체력이 0이므로 사망 스테이트로 전환한다.
         ChangeState(State.Died);
     }
 }
    protected virtual void HeavyAttack(int damageToDeal)
    {
        AttackArea attack = Instantiate(attackArea, attackPoint.position, Quaternion.identity, transform).GetComponent <AttackArea>();

        attack.Damage             = damageToDeal * 2;
        attack.KnockbackDirection = xMovementDirection;
        attack.KnockbackPower     = knockbackPower * 2;
        attack.KnockbackDuration  = knockbackDuration * 1.5f;
        attack.gameObject.GetComponent <SpriteRenderer>().color = Color.red;
    }
Exemple #15
0
    // Use this for initialization
    protected void Start()
    {
        className  = this.GetType().ToString();
        rb         = GetComponent <Rigidbody2D> ();
        sr         = GetComponent <SpriteRenderer> ();
        colli      = GetComponent <Collider2D> ();
        halfWidth  = colli.bounds.extents.x;
        halfHeight = colli.bounds.extents.y;

        // build animations
        anim = GetComponent <Animator> ();
        AnimationClip[] clips = anim.runtimeAnimatorController.animationClips;
        foreach (AnimationClip clip in clips)
        {
            animationClipTable [clip.name] = clip;
        }

        // build actions
        //actionTable [Action.Type.Attack] = new AttackAction (this);
        actionTable [Action.Type.Attack] = new AttackShootAction(this);
        ((AttackShootAction)actionTable [Action.Type.Attack]).SetSprite("Graphic/arrow");
        //actionTable [Action.Type.JumpAttack] = new JumpAttackAction (this);
        actionTable [Action.Type.JumpAttack] = new JumpShootAttackAction(this);
        ((JumpShootAttackAction)actionTable [Action.Type.JumpAttack]).SetSprite("Graphic/arrow");
        //actionTable [Action.Type.Defend] = new RushAction (this);
        //actionTable [Action.Type.Defend].SetNextAction (Action.Type.Attack);
        actionTable [Action.Type.Damage] = new DamageAction(this);
        actionTable [Action.Type.Climb]  = new ClimbAction(this);
        actionTable [Action.Type.Dead]   = new DeadAction(this);
        //actionTable [Action.Type.Rush] = new RushAction (this);
        // wall jump
        // edge + jump -> climb up
        // combo
        // pick up

        //actionTable [Action.Type.Attack].SetPlaySpeedByDuration (1f);

        // default attack
        AttackArea aa = GetComponentInChildren <AttackArea> ();

        aa.SetAttacker(this);
        aa.SetAttack(new SimpleAttack(10));

        info       = GetComponent <CharacterInfo> ();
        info.owner = this;
        info.HPBar = transform.Find("HP/Cur HP").gameObject;


        SimpleAIController simpleAI = gameObject.AddComponent <SimpleAIController>();

        simpleAI.SetReceiver(this);
        simpleAI.transform.parent = transform;
        AI = simpleAI;
    }
 private void Start()
 {
     agent          = GetComponent <NavMeshAgent>();
     anim           = GetComponent <Animator>();
     Range          = attackArea.GetComponent <AttackArea>();
     Range.aligment = aligment.enemy;
     Range.element  = null;
     Range.Damage   = Damage;
     attackArea.SetActive(false);
     agent.speed = WalkSpeed;
 }
Exemple #17
0
 void Start()
 {
     anim  = GetComponent <Animator>();
     agent = GetComponent <NavMeshAgent>();
     //CapsuleColl = GetComponent<CapsuleCollider>();
     //EneCon = GetComponent<EnemyController>();
     Range        = attackArea.GetComponent <AttackArea>();
     Range.Damage = Damage.GetValue();
     agent.speed  = speed;
     attackArea.SetActive(false);
 }
Exemple #18
0
    void Damage(AttackArea.AttackInfo attackInfo)
    {
        // 효과 발생.
        GameObject effect = Instantiate ( hitEffect, transform.position,Quaternion.identity ) as GameObject;
        effect.transform.localPosition = transform.position + new Vector3(0.0f, 0.5f, 0.0f);
        Destroy(effect, 0.3f);

        if (networkView.isMine)
            DamageMine(attackInfo.attackPower);
        else
            networkView.RPC("DamageMine",networkView.owner,attackInfo.attackPower);
    }
Exemple #19
0
    protected void Start()
    {
        base.Start();
        actionTable [Action.Type.Attack]     = new AttackAction(this);
        actionTable [Action.Type.JumpAttack] = new JumpAttackAction(this);
        actionTable [Action.Type.Defend]     = new DefendAction(this);

        AttackArea aa = GetComponentInChildren <AttackArea> ();

        aa.SetAttacker(this);
        aa.SetAttack(new SimpleAttack(20));
    }
Exemple #20
0
    void GetAtkData()
    {
        AtkData = Fighter.Unit.inventory.GetAttackData(Fighter);

        if (AtkData != null)
        {
            foreach (Cell c in Map.GetExtendedArea(MoveArea.ToArray(), AtkData))
            {
                AttackArea.Add(c);
            }
        }
    }
Exemple #21
0
    private void OnCollision(Collider2D collider)
    {
        if (!_characterState.CanBeStunned())         // || _knockdown.state != KnockDown.State.Null || (tag == "Player" && _jump.state != Jump.State.Null))
        {
            return;
        }

        AttackArea attackArea = collider.GetComponent <AttackArea>();

        if (attackArea && attackArea.IsShootType())
        {
            return;
        }

        if (collider.tag == "Damage")
        {
            if (tag != "Player" || ShouldStunPlayer(attackArea))
            { // only 50% chance to stun if it's Abe
                Attack attack       = collider.GetComponentInParent <Attack>();
                float  directionMod = (collider.GetComponentInParent <Movement>().direction == Movement.Direction.Right ? 1f : -1f);

                if (attack.attackState == Attack.State.Heavy)
                {
                    if (attack.getAttackHand() == Attack.Hand.Right)
                    {
                        GetStunned(attack.GetStunAmount(), attack.GetKnockbackAmount(), directionMod, Direction.Right, Power.Heavy);
                    }
                    else
                    {
                        GetStunned(attack.GetStunAmount(), attack.GetKnockbackAmount(), directionMod, Direction.Left, Power.Heavy);
                    }
                }
                else // if (attack.attackState == Attack.State.Light)
                {
                    if (attack.getAttackHand() == Attack.Hand.Right)
                    {
                        GetStunned(attack.GetStunAmount(), attack.GetKnockbackAmount(), directionMod, Direction.Right, Power.Light);
                    }
                    else
                    {
                        GetStunned(attack.GetStunAmount(), attack.GetKnockbackAmount(), directionMod, Direction.Left, Power.Light);
                    }
                }
            }

            if (tag == "Player")
            {
                GetComponent <Attack>().SetState(Attack.State.Null);
            }
        }
    }
Exemple #22
0
    void Damage(AttackArea.AttackInfo attackInfo)
    {
        GameObject effect = Instantiate(hitEffect, transform.position, Quaternion.identity) as GameObject;
        effect.transform.localPosition = transform.position + new Vector3(0.0f, 0.5f, 0.0f);
        Destroy(effect, 0.3f);

        status.HP -= attackInfo.attackPower;
        if (status.HP <= 0)
        {
            status.HP = 0;
            // 체력이 0이므로 사망 스테이트로 전환한다.
            ChangeState(State.Died);
        }
    }
    private SaveController saveController;  // Сохраненные параметры

    void Start()
    {
        thisSpriteRender = GetComponent <SpriteRenderer>();
        thisRigidbody    = GetComponent <Rigidbody2D>();
        thisTransform    = transform;
        thisAnimator     = GetComponent <Animator>();
        playerHp         = GetComponent <CharacterHp>();
        attackArea       = FindObjectOfType <AttackArea>();
        saveController   = FindObjectOfType <SaveController>();

        maxSpeed     = saveController.sv.speedPlayer;
        jumpForce    = saveController.sv.jumpForcePlayer;
        attackDamage = saveController.sv.attackDamagePlayer;
    }
Exemple #24
0
    public void Damage(AttackArea.AttackInfo attackInfo)
    {
        if (gameRuleCtrl.gameClear) {
            return;
        }
        SetAttackTarget(attackInfo.attacker);
        GameObject effect = Instantiate(hitEffect, transform.position, Quaternion.identity) as GameObject;
        effect.transform.localPosition = transform.position + new Vector3(0.0f, 0.5f, 0.0f);
        Destroy(effect, 0.3f);

        status.HP -= attackInfo.attackPower;
        if (status.HP <= 0)
        {
            status.HP = 0;
            // 体力0なので死亡ステートへ.
            ChangeState(State.Died);
        }
    }
Exemple #25
0
    void Start()
    {
        assetsManager    = FindObjectOfType <AssetsManager>();
        stageManager     = FindObjectOfType <StageManager>();
        cameraController = FindObjectOfType <CameraController>();
        rigid2D          = GetComponent <Rigidbody2D>();
        animator         = GetComponent <Animator>();
        attackArea       = FindObjectOfType <AttackArea>();
        moveLeft         = false;
        moveRight        = false;

        // 攻撃コライダを無効化
        attackArea.GetComponent <BoxCollider2D>().enabled = false;
        // 開始位置を保持
        initPosition = transform.position;
        // 死亡フラグを初期値に戻す
        died = false;
    }
        public override void _Ready()
        {
            base._Ready();
            // Initialize and mount the state machine.
            this._stateMachine = new StateMachine <Player>(this, StatesIndex.Idle);
            this._stateMachine
            .AddState(new PlayerAttackState())
            .AddState(new PlayerMovingState())
            .AddState(new PlayerIdleState());


            this._attackArea = GetNode <AttackArea>("./AttackArea");
            this._attackArea.SetWeapon(new Sword(10, 10));
            // Get Animation components (nodos).
            this._animationTree        = GetNode <AnimationTree>("./AnimationTree");
            this._animationTree.Active = true;
            this._animationNodeStateMachinePlayback =
                (AnimationNodeStateMachinePlayback)this._animationTree.Get("parameters/playback");
        }
Exemple #27
0
    private void Start()
    {
        coll     = GetComponent <Collider2D>();
        rb       = GetComponent <Rigidbody2D>();
        animator = GetComponent <Animator>();
        sr       = GetComponent <SpriteRenderer>();

        enemyBase = GameManager.Instance.enemyBase;

        currentHealth = GetComponent <Health>().HealthCount;

        attackArea = GetComponent <AttackArea>();

        EventManager.Instance.AddListener(EVENT_TYPE.HEALTH_CHANGE, OnEvent);
        GameManager.Instance.enemyDangerContainer.Add(gameObject, dangerClass);



        startPosition       = transform.position;
        leftBorderPosition  = leftBorder.transform.position;
        rightBorderPosition = rightBorder.transform.position;
        isDamaged           = false;
        //isRised = false;
    }
Exemple #28
0
    private void OnTriggerEnter(Collider other)
    {
        //AttackAreaのついている攻撃が来たら
        if (other.gameObject.GetComponent <AttackArea>())
        {
            AttackMagic = other.gameObject.GetComponent <AttackArea>();
            //プレイヤーの攻撃でしか壊せない
            if (AttackMagic.aligment == aligment.player)
            {
                GetDamage(AttackMagic.Damage);

                if (HP <= 0)
                {
                    foreach (GameObject obj in WallList)
                    {
                        Destroy(obj);
                    }
                    //HPを減らす攻撃であれば壊れる
                    SEManager.SetSE(SE);
                    Destroy(gameObject);
                }
            }
        }
    }
    void Damage(AttackArea.AttackInfo attackInfo)
    {
        if( this.hitEffect != null ) {
            // Effect.
            GameObject effect = Instantiate (this.hitEffect, transform.position, Quaternion.identity) as GameObject;
            effect.transform.localPosition = transform.position + new Vector3 (0.0f, 0.5f, 0.0f);
            Destroy (effect, 0.3f);
        }
        // Calculate HP.
        status.HP -= attackInfo.attackPower;

        if (status.HP <= 0) {
            status.HP = 0;
            ChangeState(EnemyState.Died);
        }
    }
Exemple #30
0
 private void Awake()
 {
     _rigidbody  = GetComponent <Rigidbody2D>();
     _attackArea = GetComponentInChildren <AttackArea>();
     SetAnimator(GetComponent <Animator>());
 }
    // Calculate a Damage.
    void Damage( AttackArea.AttackInfo attackInfo )
    {
        this.status.HP -= attackInfo.attackPower;

        if (this.status.HP <= 0) {
            this.status.HP = 0;
        }
        this.gameRuleCtrl.UpdatePlayerHP (this.status.HP);

        if( this.status.HP == 0 ) {
            this.ChangePlayerState( PlayerState.PlayerDied );
        }
    }
Exemple #32
0
 void Damage(AttackArea.AttackInfo attackInfo)
 {
     transform.root.SendMessage ("Damage",attackInfo);
 }
Exemple #33
0
    private void OnCollision(Collider2D collider)
    {
        AttackArea attackArea = collider.GetComponent <AttackArea>();

        if (attackArea && attackArea.IsShootType())
        {
            return;
        }

        if (collider.tag == "Damage")
        {
            damageAmount = collider.transform.GetComponentInParent <Attack>().GetDamageAmount();
            ExecuteDamage(damageAmount, collider);

            if (name.Contains("Bear"))
            {
                if (UnityEngine.Random.value < 0.33f)
                {
                    SoundPlayer.Play("Damage React Bear");
                }
            }
            else if (name.Contains("Officer-Boss"))
            {
                SoundPlayer.Play("Battlefield Boss Hit");
            }
            else if (name.Contains("RobertELee"))
            {
                SoundPlayer.Play("Lee Hit");
            }
            //else if (name.Contains("Officer"))
            //    SoundPlayer.Play("Officer Hit");
            else if (name.Contains("Rifleman"))
            {
                SoundPlayer.Play("Rifleman Hit");
            }
            else if (name.Contains("Bushwhacker"))
            {
                SoundPlayer.Play("BushWhacker Hit");
            }
            else if (name.Contains("Officer"))
            {
                SoundPlayer.Play("Officer Hit");
            }
            else if (name.Contains("Woman"))
            {
                SoundPlayer.Play("Woman Hit");
            }
            else if (tag != "Player")
            {
                SoundPlayer.Play("Damage React Light");
            }

            if (attackArea)
            {
                if (attackArea.GetAttackState() == Attack.State.Heavy)
                {
                    if (attackArea.GetAttackType() == Weapon.AttackType.Swing)
                    {
                        SoundPlayer.Play("Heavy Axe Impact 1");
                        SoundPlayer.Play("Heavy Axe Impact 1.1");
                    }
                    else if (attackArea.GetAttackType() == Weapon.AttackType.Melee)
                    {
                        SoundPlayer.Play("Heavy Punch Impact 1");
                        SoundPlayer.Play("Heavy Punch Impact 1.2");
                        SoundPlayer.Play("Heavy Punch Impact 1.3");
                    }
                    else if (attackArea.GetAttackType() == Weapon.AttackType.Slash)
                    {
                        SoundPlayer.Play("Saber Impact");
                    }

                    else if (attackArea.GetAttackType() == Weapon.AttackType.Knife)
                    {
                        SoundPlayer.Play("Knife Impact");
                    }
                }
                else
                {
                    if (attackArea.GetAttackType() == Weapon.AttackType.Swing)
                    {
                        if (attackArea.GetAttackChainNumber() >= 2)
                        {
                            SoundPlayer.Play("Light Axe Impact 3");
                        }
                        else if (attackArea.GetAttackChainNumber() >= 1)
                        {
                            SoundPlayer.Play("Light Axe Impact 2");
                        }
                        else
                        {
                            SoundPlayer.Play("Light Axe Impact 1");
                        }
                    }
                    else if (attackArea.GetAttackType() == Weapon.AttackType.Melee)
                    {
                        SoundPlayer.Play("Light Punch Impact");
                    }

                    else if (attackArea.GetAttackType() == Weapon.AttackType.Slash)
                    {
                        SoundPlayer.Play("Saber Impact");
                    }

                    else if (attackArea.GetAttackType() == Weapon.AttackType.Knife)
                    {
                        SoundPlayer.Play("Knife Impact");
                    }
                }
            }
        }
    }
Exemple #34
0
        public void Update()
        {
            //Because the game is now spawning objects from the player-owned objects (spawning from NetworkManager-spawned objects), don't check for
            //isLocalPlayer, but instead check to see if the clients have authority over the non-player owned objects spawned from the NetworkManager-spawned objects.
            //Wordy, I know...
            if (!this.hasAuthority)
            {
                return;
            }

            if (this.isSplitting || this.isMerging)
            {
                return;
            }


            //Simple, "quick," MOBA-style controls. Hence, the class name.
            if (this.isSelected)
            {
                this.selectionRing.SetActive(true);
                Vector3 screenPoint = Camera.main.ScreenToViewportPoint(Input.mousePosition);
                if (!MinimapStuffs.Instance.minimapCamera.rect.Contains(screenPoint))
                {
                    if (Input.GetMouseButtonDown(1))
                    {
                        CastRay(false, Input.mousePosition, null);
                    }
                }
            }
            else
            {
                this.selectionRing.SetActive(false);
            }

            //Obtaining the nav mesh agent here for future uses.
            NavMeshAgent agent = this.GetComponent <NavMeshAgent>();

            //Non-directed, self-defense
            LineOfSight sight = this.GetComponentInChildren <LineOfSight>();
            AttackArea  area  = this.GetComponentInChildren <AttackArea>();

            if (!this.isDirected || agent.remainingDistance < 0.5f)
            {
                //Line of Sight. Detects if there are nearby enemy game units, and if so, follow them to engage in battle.
                if (sight != null && area != null)
                {
                    //There are 4 cases when detecting an enemy in both areas, line of sight and attack range. I had to consider each of the cases
                    //in order to ease the Console error gods...
                    // (12/5/2015) Now there are 8 cases in total. Consider AI players.
                    GameUnit sightGameUnit = null;
                    if (sight.enemiesInRange.Count > 0)
                    {
                        foreach (GameUnit temp in sight.enemiesInRange)
                        {
                            if (temp != null)
                            {
                                sightGameUnit = temp;
                                break;
                            }
                        }
                    }
                    GameUnit attackGameUnit = null;
                    if (sight.enemiesInRange.Count > 0)
                    {
                        foreach (GameUnit temp in sight.enemiesInRange)
                        {
                            if (temp != null)
                            {
                                attackGameUnit = temp;
                                break;
                            }
                        }
                    }
                    AIUnit sightAiUnit = null;
                    if (sight.otherEnemies.Count > 0)
                    {
                        foreach (AIUnit temp in sight.otherEnemies)
                        {
                            if (temp != null)
                            {
                                sightAiUnit = temp;
                                break;
                            }
                        }
                    }
                    AIUnit attackAiUnit = null;
                    if (sight.otherEnemies.Count > 0)
                    {
                        foreach (AIUnit temp in sight.otherEnemies)
                        {
                            if (temp != null)
                            {
                                attackAiUnit = temp;
                                break;
                            }
                        }
                    }

                    if (sightGameUnit != null && attackGameUnit != null)
                    {
                        SetTargetEnemy(this.gameObject, sightGameUnit.gameObject, attackGameUnit.gameObject);
                        CmdSetTargetEnemy(this.gameObject, sightGameUnit.gameObject, attackGameUnit.gameObject);
                    }
                    else if (sightGameUnit != null && attackGameUnit == null)
                    {
                        SetTargetEnemy(this.gameObject, sightGameUnit.gameObject, sightGameUnit.gameObject);
                        CmdSetTargetEnemy(this.gameObject, sightGameUnit.gameObject, sightGameUnit.gameObject);
                    }
                    else if (sightGameUnit == null && attackGameUnit != null)
                    {
                        SetTargetEnemy(this.gameObject, attackGameUnit.gameObject, attackGameUnit.gameObject);
                        CmdSetTargetEnemy(this.gameObject, attackGameUnit.gameObject, attackGameUnit.gameObject);
                    }
                    else
                    {
                        SetTargetEnemy(this.gameObject, this.gameObject, this.gameObject);
                        CmdSetTargetEnemy(this.gameObject, this.gameObject, this.gameObject);
                    }

                    if (sightAiUnit != null && attackAiUnit != null)
                    {
                        SetTargetAIEnemy(this.gameObject, sightAiUnit.gameObject, attackAiUnit.gameObject);
                    }
                    else if (sightAiUnit != null && attackAiUnit == null)
                    {
                        SetTargetAIEnemy(this.gameObject, sightAiUnit.gameObject, sightAiUnit.gameObject);
                    }
                    else if (sightAiUnit == null && attackAiUnit != null)
                    {
                        SetTargetAIEnemy(this.gameObject, attackAiUnit.gameObject, attackAiUnit.gameObject);
                    }
                    else
                    {
                        SetTargetAIEnemy(this.gameObject, this.gameObject, this.gameObject);
                    }
                }
            }

            //Start attacking.
            Attack();
            //Updating status.
            UpdateStatus();

            //Keeping track of whether the game unit is carrying out a player's command, or is carrying out self-defense.
            if (agent != null && agent.ReachedDestination())
            {
                this.isDirected = false;
            }
        }