public override void Act(EnemyStateController controller)
    {
        //simple cast
        SkeletonEnemy skeleton = (SkeletonEnemy)controller.enemy;

        //move
        Attack(skeleton);
    }
    public override bool Decide(EnemyStateController controller)
    {
        SkeletonEnemy skeleton = (SkeletonEnemy)controller.enemy;

        bool targetDetected = Scan(skeleton);

        return(targetDetected);
    }
    private void Attack(SkeletonEnemy skeleton)
    {
        skeleton.isAttacking = true;

        //careful with null refence
        if (skeleton.target == null)
        {
            return;
        }

        //narrow down distance to target
        if (!skeleton.isCloseEnoughToTarget(skeleton.target.position, skeleton.distanceMeleeAttack))
        {
            bool succeed = skeleton.StartRunningAnimation();
            if (succeed)
            {
                //running is faster than walking
                float runningSpeed = skeleton.movementSpeed * 2;
                skeleton.MoveToward(skeleton.target.position, runningSpeed);
            }

            //if target get outside zone, skeleton is allowed to attack
            skeleton.isAllowedToAttack = true;
        }

        //if close enough,
        else
        {
            //attack him/her
            if (skeleton.isAllowedToAttack)
            {
                Hittable h;
                if (skeleton.health > 0 && (h = skeleton.target.GetComponent <Hittable>()))
                {
                    //Debug.Log("Skeleton attack");
                    h.Hit(skeleton.attackDamage, skeleton.attackType);
                }
                //play attack animation
                skeleton.animator.SetTrigger(skeleton.HASH_TRIGGER_ATTACK_RUN);
                skeleton.isAllowedToAttack = false;

                //if target still stay in zone, reset count down
                skeleton.stateTimeElapsed = 0;
            }

            //stop skeleton if it is running
            if (skeleton.isRunning)
            {
                skeleton.StopRunningAnimation();
            }

            //give it some time before attack
            if (skeleton.CheckIfCountDownElapsed(skeleton.timeBetweenAttacks))
            {
                skeleton.isAllowedToAttack = true;
            }
        }
    }
Beispiel #4
0
 void Awake()
 {
     attackComponent      = this.gameObject.GetComponentInChildren <SkeletonEnemy_Attacking>();
     pathfindingComponent = this.gameObject.GetComponent <SkeletonEnemy_Pathfinding>();
     basicEnemy1Script    = this.gameObject.GetComponent <SkeletonEnemy>();
     animationComponent   = this.gameObject.transform.GetComponentInChildren <SkeletonEnemy_Animation>();
     quirkManager         = FindObjectOfType <QuirkManager>();
     soundManager         = FindObjectOfType <SoundManager>();
 }
    private void Dance(SkeletonEnemy skeleton)
    {
        //if skeleton is already dancing, don't do anything
        if (skeleton.isDancing)
        {
            return;
        }

        skeleton.StartDancingAnimation();
    }
Beispiel #6
0
    public override bool Decide(EnemyStateController controller)
    {
        SkeletonEnemy skeleton = (SkeletonEnemy)controller.enemy;

        if (skeleton.isCloseEnoughToTarget(skeleton.startTransform.position, 1))
        {
            return(true);
        }

        return(false);
    }
    public override void Act(EnemyStateController controller)
    {
        SkeletonEnemy skeleton = (SkeletonEnemy)controller.enemy;

        //simple check
        if (skeleton.patrolPositions.Length == 0)
        {
            return;
        }

        //move
        Patrol(skeleton);
    }
    private void Awake()
    {
        soundManager = FindObjectOfType <SoundManager>();
        animator     = this.GetComponent <Animator>();

        if (this.gameObject.transform.GetComponentInParent <SkeletonEnemy>() == null)
        {
            return;
        }

        baseSkeletonClass    = this.gameObject.transform.GetComponentInParent <SkeletonEnemy>();
        attackComponent      = this.gameObject.transform.parent.GetComponentInChildren <SkeletonEnemy_Attacking>();
        pathfindingComponent = this.gameObject.transform.GetComponentInParent <SkeletonEnemy_Pathfinding>();
    }
    private void WalkBack(SkeletonEnemy skeleton)
    {
        bool succeed = skeleton.StartWalkingAnimation();

        if (succeed)
        {
            skeleton.MoveToward(skeleton.startTransform.position, skeleton.movementSpeed);
        }


        //if close enough, snap darkling to target
        if (skeleton.isCloseEnoughToTarget(skeleton.startTransform.position, 3))
        {
            skeleton.transform.position = skeleton.startTransform.position;
            skeleton.transform.rotation = skeleton.startTransform.rotation;
        }
    }
    private void Patrol(SkeletonEnemy skeleton)
    {
        Vector3 destination = skeleton.patrolPositions[skeleton.curPatrolIndex].position;

        if (skeleton.isNearDestination(destination))
        {
            int nextPatrolIndex = (skeleton.curPatrolIndex + 1) % skeleton.patrolPositions.Length;
            skeleton.curPatrolIndex = nextPatrolIndex;
            destination             = skeleton.patrolPositions[nextPatrolIndex].position;
        }

        skeleton.isPatrolling = true;
        bool succeed = skeleton.StartWalkingAnimation();

        if (succeed)
        {
            skeleton.MoveToward(destination, skeleton.movementSpeed);
        }
    }
    /*
     * Scan(), use OnTriggerEnter to set target
     * return true if (target is detected && target is alive)
     * return false if not
     */
    private bool Scan(SkeletonEnemy skeleton)
    {
        //if there is no target
        if (skeleton.target == null)
        {
            return(false);
        }

        //see if target is alive
        StatsController stats;

        if (stats = skeleton.target.GetComponent <StatsController>())
        {
            if (stats.GetHealth() <= 0)
            {
                return(false);
            }
        }

        return(true);
    }
    public override void Act(EnemyStateController controller)
    {
        SkeletonEnemy skeleton = (SkeletonEnemy)controller.enemy;

        WalkBack(skeleton);
    }
Beispiel #13
0
 /*
  * Simple
  */
 private void StopDance(SkeletonEnemy skeleton)
 {
     skeleton.StopDancingAnimation();
 }
        public void BuildBlocks(string input)
        {
            if (Room.Id == 13)
            {
                buildblocks13(input); return;
            }
            switch (input)
            {
            //BLOCKS

            case "TILE":
                IBlock tile = new FloorBlock(Position);
                Room.blocks.Add(tile);
                break;

            case "BLOK":
                IBlock blok = new RegularBlock(Position);
                Room.blocks.Add(blok);
                break;

            case "RFSH":
                IBlock rfsh = new Face1Block(Position);
                Room.blocks.Add(rfsh);
                break;

            case "LFSH":
                IBlock lfsh = new Face2Block(Position);
                Room.blocks.Add(lfsh);
                break;

            case "SPOT":
                IBlock spot = new SpottedBlock(Position);
                Room.blocks.Add(spot);
                break;

            case "BLCK":
                IBlock blck = new BlackBlock(Position);
                Room.blocks.Add(blck);
                break;

            case "BRIK":
                IBlock brik = new BrickBlock(Position);
                Room.blocks.Add(brik);
                break;

            case "DARK":
                IBlock dark = new DarkBlueBlock(Position);
                Room.blocks.Add(dark);
                break;

            case "STAR":
                IBlock star = new StairsBlock(Position);
                Room.blocks.Add(star);
                break;

            case "STIP":
                IBlock stip = new StripeBlock(Position);
                Room.blocks.Add(stip);
                break;

            case "MVBK":
                IBlock mvbk = new MovingVertBlock(Position);
                Room.blocks.Add(mvbk);
                break;

            case "MLBK":
                IBlock mlbk = new MovingLeftBlock(Position);
                Room.blocks.Add(mlbk);
                break;

            //ENEMIES
            case "BBAT":
                IEntity bat = new BlueBatEnemy(Position);
                Room.enemies.Add(enemyID, bat);
                enemyID++;
                break;

            case "SKLN":
                IEntity skel = new SkeletonEnemy(Position);
                Room.enemies.Add(enemyID, skel);
                enemyID++;
                break;

            case "BOSS":
                IAttack up     = new FireAttack(1);
                IAttack center = new FireAttack(0);
                IAttack down   = new FireAttack(2);
                Room.enemies.Add(enemyID, up);
                enemyID++;
                Room.enemies.Add(enemyID, down);
                enemyID++;
                Room.enemies.Add(enemyID, center);
                enemyID++;
                Room.enemies.Add(enemyID, new FinalBossEnemy(Position, up, center, down));
                enemyID++;
                break;

            case "FIRE":
                IEntity fire = new FireEnemy(Position);
                Room.enemies.Add(enemyID, fire);
                enemyID++;
                break;

            case "GELY":
                IEntity gel = new GelEnemy(Position);
                gel.X = gel.Position.X + FOUR * Global.Var.SCALE;
                gel.Y = gel.Position.Y + FOUR * Global.Var.SCALE;
                Room.enemies.Add(enemyID, gel);
                enemyID++;
                break;

            case "GORY":
                IBoomerang goriyaBoomerang = new BoomerangItem();
                IEntity    goriya          = new GoriyaEnemy(goriyaBoomerang, Position);
                Room.enemyProj.Add(goriyaBoomerang);
                Room.enemies.Add(enemyID, goriya);
                enemyID++;
                break;

            case "HAND":
                IEntity hand = new HandEnemy(Position);
                Room.enemies.Add(enemyID, hand);
                enemyID++;
                break;

            case "OLDM":
                IEntity man = new OldManNPC(Position);
                man.X = man.Position.X + EIGHT * Global.Var.SCALE;
                Room.enemies.Add(enemyID, man);
                enemyID++;
                break;

            case "MNFR":
                IEntity fire1 = new FireEnemy(Position);
                IEntity fire2 = new FireEnemy(Position);
                Room.enemies.Add(enemyID, fire1);
                enemyID++;
                Room.enemies.Add(enemyID, fire2);
                enemyID++;

                IEntity manAndFire = new OldMan_FireEnemy(Position, fire1, fire2);
                manAndFire.X = manAndFire.Position.X + EIGHT * Global.Var.SCALE;
                Room.enemies.Add(enemyID, manAndFire);
                enemyID++;
                break;

            case "SPKE":
                IEntity spike = new SpikeEnemy(Position, spikeNum);
                Room.enemies.Add(enemyID, spike);
                enemyID++;
                spikeNum++;
                if (spikeNum > 4)
                {
                    spikeNum = 1;
                }
                break;


            //ITEMS
            // Probably could use a static bomb and boomerang object now that I think of it.
            case "KEYI":
                IItem key = new KeyItem(Position);
                key.X = key.Position.X + FOUR * Global.Var.SCALE;
                Room.items.Add(key);
                break;

            case "BOWI":
                IItem bow = new BowItem(Position);
                Room.items.Add(bow);
                break;

            case "CLCK":
                IItem clock = new ClockItem(Position);
                Room.items.Add(clock);
                break;

            case "CMPS":
                IItem compass = new CompassItem(Position);
                compass.X = compass.Position.X + TWO * Global.Var.SCALE;
                compass.Y = compass.Position.Y + TWO * Global.Var.SCALE;
                Room.items.Add(compass);
                break;

            case "FARY":
                IItem fairy = new FairyItem(Position);
                Room.items.Add(fairy);
                break;

            case "HCON":
                IItem hcont = new HeartContainerItem(Position);
                hcont.X = hcont.Position.X + ONE * Global.Var.SCALE;
                hcont.Y = hcont.Position.Y + ONE * Global.Var.SCALE;
                Room.items.Add(hcont);
                break;

            case "HART":
                IItem heart = new HeartItem(Position);
                Room.items.Add(heart);
                break;

            case "MAPI":
                IItem map = new MapItem(Position);
                map.X = map.Position.X + FOUR * Global.Var.SCALE;
                Room.items.Add(map);
                break;

            case "RUPE":
                IItem rupee = new RupeeItem(Position);
                Room.items.Add(rupee);
                break;

            case "BOMB":
                IItem bomb = new BombStaticItem(Position);
                Room.items.Add(bomb);
                break;

            case "BMRG":
                IItem boom = new BoomerangStaticItem(Position);
                boom.X = boom.Position.X + BMRG_X_OFFSET * Global.Var.SCALE;
                boom.Y = boom.Position.Y + BMRG_Y_OFFSET * Global.Var.SCALE;
                Room.items.Add(boom);
                break;

            case "BRUP":
                IItem brup = new BlueRupeeItem(Position);
                Room.items.Add(brup);
                break;

            case "TRIF":
                IItem triforce = new TriforceItem(Position);
                triforce.X = triforce.Position.X + ELEVEN * Global.Var.SCALE;
                triforce.Y = triforce.Position.Y + ELEVEN * Global.Var.SCALE;
                Room.items.Add(triforce);
                break;
            }
        }
 private void StopPatrol(SkeletonEnemy skeleton)
 {
     skeleton.isPatrolling = false;
     skeleton.StopWalkingAnimation();
 }
    public override void Act(EnemyStateController controller)
    {
        SkeletonEnemy skeleton = (SkeletonEnemy)controller.enemy;

        StopPatrol(skeleton);
    }
 private void StopAttack(SkeletonEnemy skeleton)
 {
     skeleton.StopRunningAnimation();
     skeleton.isAttacking = false;
 }