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; } } }
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(); }
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); }
/* * 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; }