/// <summary> /// Konstruktor. /// </summary> /// <param name="enemyType">Typ wroga.</param> /// <param name="assetName">Nazwa zasobu grafiki wroga.</param> /// <param name="life">Liczba życia wroga.</param> /// <param name="strenght">Siła ataku.</param> /// <param name="speed">Prędkość będąca dzielnikiem liczby 42.</param> /// <param name="direction">Kierunek początkowego porusznia się.</param> /// <param name="isFreeze">Czy jest zatrzymany w miejscu.</param> /// <param name="evolve">Delegatura do funkcji ewolucji.</param> /// <param name="testMove">Delegatura do funkcji testowania ruchu.</param> /// <param name="webShoot">Delegatura do funkcji strzelania.</param> /// <param name="observe">Delegatura do funkcji obserwowania w poszukiwaniu robaczka.</param> /// <param name="attack">Delegatura do funckji ataku na robaczka.</param> public Enemy(EnemyType enemyType, string assetName, int?life, int strenght, int speed, Direction direction, bool isFreeze, EvolveDelegate evolve, TestMoveDelegate testMove, WebShootDelegate webShoot, ObserveDelegate observe, AttackDelegate attack) { _enemyType = enemyType; _life = life; _strenght = strenght; _speed = _startSpeed = speed; _slowEffectTime = 0; _elapsedSlowTime = 0; _direction = direction; _isFreeze = isFreeze; _freezeEffectTime = 0; _elapsedFreezeTime = 0; _enemyGraphic = new AnimatedGraphic(); _evolve = evolve; _testMove = testMove; _webShoot = webShoot; _observe = observe; _attack = attack; LoadContent(Window.Context.Content, assetName); _isKilled = false; _sawWorm = false; }
private void Awake() { onAttack = null; onFail = null; onGameplayEnd = null; sfxSource = GetComponent <AudioSource>(); }
public Skill(AttackDelegate d, int level, int en, string name, string desc) { skill = d; reqLevel = level; reqEn = en; this.name = name; this.desc = desc; }
public Skill(AttackDelegate d, int level, int en, string name, string desc, bool targ) { skill = d; reqLevel = level; reqEn = en; this.name = name; this.desc = desc; targetsEnemy = targ; }
// public void SubscribeMethod(string AchieveType, int Id) { switch (AchieveType) { case "Jump": if (playData.achievements[Id].State == false) { JumpEvent += new JumpDelegate(JumpMethod); JumpBool = true; JumpId = Id; JumpTarget = playData.achievements[Id].Target; } break; case "Level": if (playData.achievements[Id].State == false) { LevelEvent += new LevelDelegate(LevelMethod); LevelBool = true; LevelId = Id; playData.achievements[LevelId].Done = playData.level; LevelTarget = playData.achievements[Id].Target; } break; case "Attack": if (playData.achievements[Id].State == false) { AttackEvent += new AttackDelegate(AttackMethod); AttackBool = true; AttackId = Id; AttackTarget = playData.achievements[Id].Target; } break; case "Die": if (playData.achievements[Id].State == false) { DieEvent += new DieDelegate(DieMethod); DieBool = true; DieId = Id; DieTarget = playData.achievements[Id].Target; } break; case "Kill": if (playData.achievements[Id].State == false) { KillEvent += new KillDelegate(KillMethod); KillBool = true; KillId = Id; KillTarget = playData.achievements[Id].Target; } break; } }
void Start() { //Save typing enemyManager = EnemyManager.instance; onAttack += MeleeAttack; onAttack += MeleeAttack; onAttack += ShootAttack; //Will call MeleeAttack twice and ShootAttack once. onAttack(); }
/// <summary> /// Konstruktor kopiujący /// </summary> /// <param name="enemy">Obiekt wzorcowy</param> public Enemy(Enemy enemy) { _enemyGraphic = enemy._enemyGraphic.Clone(); _enemyType = enemy._enemyType; _life = enemy._life; _strenght = enemy._strenght; _speed = enemy._speed; _startSpeed = enemy._startSpeed; _direction = enemy._direction; _isFreeze = enemy._isFreeze; _isKilled = false; _evolve = enemy._evolve; _testMove = enemy._testMove; _webShoot = enemy._webShoot; _observe = enemy._observe; _attack = enemy._attack; _sawWorm = enemy._sawWorm; }
public static IEnumerable <Wait> Spark(Creature user, Random random, AttackDelegate attack) { var lightning = SpriteLoader.Instance.AddSprite("content/lightning"); IEnumerable <Tile> targetTiles = GetFrontierTiles(user); HashSet <Creature> targets = new HashSet <Creature>(); yield return(user.WaitSome(10)); foreach (Tile tile in targetTiles) { targets.AddRange(tile.Creatures.Where(creature => creature != user)); } List <Wait> waitForDamage = new List <Wait>(); foreach (var target in targets) { new LightningSpark(user.World, lightning, user.VisualPosition() + user.Mask.GetRandomPixel(random), target.VisualPosition() + target.Mask.GetRandomPixel(random), 5); var wait = user.Attack(target, SkillUtil.SafeNormalize(target.VisualTarget - user.VisualTarget), attack); waitForDamage.Add(wait); } yield return(new WaitAll(waitForDamage)); }
private void Start() { if (GameObject.FindWithTag("Enemy")) { GameObject enemy = GameObject.FindWithTag("Enemy"); Debug.Log(enemy.name); //find out which enemy it is...set methods according to spefic model if (enemy.name == "Skeleton") { attackMethod = SkeletonAttackButtonAction; //test in Button Handler by calling the variable strikeMethod = SkeletonStrikeButtonAction; chargeMethod = SkeletonChargeButtonAction; atkMagMethod = SkeletonAtkMagicButtonAction; //Defense defenseMethod = SkeletonDefendButtonAction; counterMethod = SkeletonCounterButtonAction; giveUpMethod = SkeletonGiveUpButtonAction; defMagMethod = SkeletonDefMagicButtonAction; } } }
private void Start() { if (GameObject.FindWithTag("Player")) { GameObject enemy = GameObject.FindWithTag("Player"); Debug.Log(enemy.name); //find out which enemy it is...set methods according to spefic model if (enemy.name == "ToonKnight") { //Offsense attackMethod = ToonAttackButtonAction; //test in Button Handler by calling the variable strikeMethod = ToonStrikeButtonAction; chargeMethod = ToonChargeButtonAction; atkMagMethod = ToonAtkMagicButtonAction; //Defense defenseMethod = ToonDefendButtonAction; counterMethod = ToonCounterButtonAction; giveUpMethod = ToonGiveUpButtonAction; defMagMethod = ToonDefMagicButtonAction; } //else if(enemy.name == "other"){ set different/ same methods depending on class} } }
/// <summary> /// Konstruktor tworzący nowy obiekt szczura. /// </summary> /// <param name="enemyType">Typ wroga.</param> /// <param name="assetName">Nazwa zasobu grafiki wroga.</param> /// <param name="life">Liczba życia wroga.</param> /// <param name="strenght">Siła ataku.</param> /// <param name="speed">Prędkość będąca dzielnikiem liczby 42.</param> /// <param name="direction">Kierunek początkowego porusznia się.</param> /// <param name="isFreeze">Czy jest zatrzymany w miejscu.</param> /// <param name="evolve">Delegatura do funkcji ewolucji.</param> /// <param name="testMove">Delegatura do funkcji testowania ruchu.</param> /// <param name="webShoot">Delegatura do funkcji strzelania.</param> /// <param name="observe">Delegatura do funkcji obserwowania w poszukiwaniu robaczka.</param> /// <param name="attack">Delegatura do funckji ataku na robaczka.</param> public Rat(EnemyType enemyType, string assetName, int?life, int strenght, int speed, Direction direction, bool isFreeze, EvolveDelegate evolve, TestMoveDelegate testMove, WebShootDelegate webShoot, ObserveDelegate observe, AttackDelegate attack) : base(enemyType, assetName, life, strenght, speed, direction, isFreeze, evolve, testMove, webShoot, observe, attack) { _testMove = TestMove; _attack = Attack; _observe = Observe; _visitedGrounds = new bool[20, 20]; _prevGrounds = new Ground[20, 20]; x = 19; y = 0; // A* _distance = new double[20, 20]; for (int i = 0; i < _distance.GetLength(0); i++) { for (int j = 0; j < _distance.GetLength(1); j++) { _distance[i, j] = double.MaxValue; } } _t = new List <Tuple <Ground, int, int> >(); _aIsEnabled = false; _aStarGrounds = new Tuple <Ground, int, int> [20, 20]; _aNextPositions = new Stack <Point>(); //_aStarGrounds = new List<Ground>(); }
// Update is called once per frame void Update() { movement.x = Input.GetAxisRaw("Horizontal"); movement.y = Input.GetAxisRaw("Vertical"); float speed = 720.0f; if (depth == 0) { optionSelector.SetActive(true); if (!rotating) { switch (currindex) { case (int)RadialOptions.attack: if (Input.GetKeyDown("space")) { at = null; audio.PlayOneShot((AudioClip)Resources.Load("Sounds/SecondaryMenuOpen")); Debug.Log("opening enemy selector"); enemySelector.SetActive(true); depth++; enemySelectorOpen = true; enemySelectorIndex = 0; directionPanel.SetActive(true); directionText.text = "Attack which enemy?"; directionShadowText.text = "Attack which enemy?"; optionSelector.SetActive(false); } break; case (int)RadialOptions.items: if (Input.GetKeyDown("space")) { audio.PlayOneShot((AudioClip)Resources.Load("Sounds/SecondaryMenuOpen")); Debug.Log("opening item list"); itemList.SetActive(true); depth++; itemMenu = true; directionPanel.SetActive(true); directionText.text = "Pick an item to use."; directionShadowText.text = "Pick an item to use."; optionSelector.SetActive(false); } break; case (int)RadialOptions.tactics: break; case (int)RadialOptions.skills: if (Input.GetKeyDown("space")) { audio.PlayOneShot((AudioClip)Resources.Load("Sounds/SecondaryMenuOpen")); Debug.Log("opening skill list"); skillList.SetActive(true); depth++; skillMenu = true; directionPanel.SetActive(true); directionText.text = "No skills, embarassing..."; directionShadowText.text = "No skills, embarassing..."; optionSelector.SetActive(false); } break; } if (movement.x <= -.8f) { rotating = true; angleinc = 90; currindex += 1; if (currindex >= numindices) { currindex = 0; } direction = 1; click.Play(); } else if (movement.x >= .8f) { rotating = true; angleinc = -90; currindex -= 1; if (currindex < 0) { currindex = numindices - 1; } direction = -1; click.Play(); } } else { if (direction < 0) { angle -= Time.deltaTime * speed; angleinc += Time.deltaTime * speed; if (angleinc >= 0) { rotating = false; angle = currindex * 90.0f; } } if (direction > 0) { angle += Time.deltaTime * speed; angleinc -= Time.deltaTime * speed; if (angleinc <= 0) { rotating = false; angle = currindex * 90.0f; } } } } else if (depth == 1 && itemMenu) { int topItemIndex = itemSelectorIndex - (itemSelectorIndex % 4); //the magic number 4 here is the number of items shown at a time int itemNameTextIndex = 0; for (int i = topItemIndex; i < useableItems.Count && i < topItemIndex + 4; i++) //same here with the 4 { itemTexts[itemNameTextIndex].text = pd.masterItemDirectory.dir[(int)useableItems[i]].name; itemNameTextIndex++; } while (itemNameTextIndex < 4) { itemTexts[itemNameTextIndex].text = ""; itemNameTextIndex++; } if (useableItems.Count == 0) { itemTexts[0].text = "No items!"; hpTextNum.text = "N/A"; enTextNum.text = "N/A"; } else { hpTextNum.text = pd.masterItemDirectory.dir[(int)useableItems[itemSelectorIndex]].hp.ToString(); enTextNum.text = pd.masterItemDirectory.dir[(int)useableItems[itemSelectorIndex]].en.ToString(); } if (Input.GetKeyDown(KeyCode.LeftShift)) { audio.PlayOneShot((AudioClip)Resources.Load("Sounds/SecondaryMenuClose")); Debug.Log("exiting item menu"); itemMenu = false; depth--; itemList.SetActive(false); directionPanel.SetActive(false); return; } if (currMoveTimer >= 0.0f) { currMoveTimer -= Time.deltaTime; } if (movement.y >= .8f && currMoveTimer <= 0.0f) { audio.PlayOneShot((AudioClip)Resources.Load("Sounds/ItemSelectorMove")); itemSelectorIndex--; if (itemSelectorIndex < 0) { if (useableItems.Count == 0) { itemSelectorIndex = 0; } else { itemSelectorIndex = useableItems.Count - 1; } } if (!held) { held = true; currMoveTimer = firstMoveTimer; } else { currMoveTimer = heldMoveTimer; } } else if (movement.y <= -.8f && currMoveTimer <= 0.0) { audio.PlayOneShot((AudioClip)Resources.Load("Sounds/ItemSelectorMove")); itemSelectorIndex++; if (itemSelectorIndex > useableItems.Count - 1) { itemSelectorIndex = 0; } if (!held) { held = true; currMoveTimer = firstMoveTimer; } else { currMoveTimer = heldMoveTimer; } } else if (movement.y > -0.8f && movement.y < 0.8f) { held = false; currMoveTimer = -1.0f; } if (Input.GetKeyDown(KeyCode.Space)) { if (useableItems.Count > 0) //use the currently selected item { Battler player = bm.GetCurrentBattler(); int hpheal = pd.masterItemDirectory.dir[(int)useableItems[itemSelectorIndex]].hp; int enheal = pd.masterItemDirectory.dir[(int)useableItems[itemSelectorIndex]].en; bm.HealBattler(hpheal, enheal, player); pd.RemoveItem(useableItems[itemSelectorIndex]); useableItems.RemoveAt(itemSelectorIndex); itemSelectorIndex = 0; depth = 0; itemMenu = false; itemList.SetActive(false); bm.YieldTurn(); gameObject.SetActive(false); directionPanel.SetActive(false); } } itemSelectorTransform.anchoredPosition = new Vector3(4, -(itemSelectorIndex % 4) * 24 - 12, 0); } else if (depth == 1 && enemySelectorOpen) { List <Battler> enemyList = bm.GetEnemies(); //handle movement of the enemy selector cursor //the if below just lets me collapse all of the cursor movement related code super easy if (true) { if (Input.GetKeyDown(KeyCode.LeftShift)) { audio.PlayOneShot((AudioClip)Resources.Load("Sounds/SecondaryMenuClose")); Debug.Log("exiting enemy selector menu"); enemySelectorOpen = false; depth--; enemySelector.SetActive(false); directionPanel.SetActive(false); return; } if (currMoveTimer >= 0.0f) { currMoveTimer -= Time.deltaTime; } if ((movement.y >= .8f || movement.x >= .8f) && currMoveTimer <= 0.0f) { audio.PlayOneShot((AudioClip)Resources.Load("Sounds/ItemSelectorMove")); enemySelectorIndex--; if (enemySelectorIndex < 0) { enemySelectorIndex = enemyList.Count - 1; } if (!held) { held = true; currMoveTimer = firstMoveTimer; } else { currMoveTimer = heldMoveTimer; } } else if ((movement.y <= -.8f || movement.x <= -.8f) && currMoveTimer <= 0.0) { audio.PlayOneShot((AudioClip)Resources.Load("Sounds/ItemSelectorMove")); enemySelectorIndex++; if (enemySelectorIndex > enemyList.Count - 1) { enemySelectorIndex = 0; } if (!held) { held = true; currMoveTimer = firstMoveTimer; } else { currMoveTimer = heldMoveTimer; } } else if (movement.y > -0.8f && movement.y < 0.8f && movement.x < 0.8f && movement.x > -0.8f) { held = false; currMoveTimer = -1.0f; } } Battler currEnemy = enemyList[enemySelectorIndex]; Vector3 distFromCenterBattle = currEnemy.sprite.transform.position - bm.gameObject.transform.position; enemySelectorTransform.anchoredPosition = (distFromCenterBattle * 32) + new Vector3(-16, 0, 0); //32 is the pixels per unit and 16 just offsets the selector above the enemy enemySelectorNameplateText.text = currEnemy.name; enemySelectorHPPlateText.text = currEnemy.hp.ToString(); if (Input.GetKeyDown(KeyCode.Space)) { if (at == null) { bm.PlayerAttack(currEnemy); gameObject.SetActive(false); enemySelector.SetActive(false); directionPanel.SetActive(false); depth = 0; enemySelectorOpen = false; } else { Battler player = bm.GetCurrentBattler(); player.en -= spDeduction; bm.BattlerAttack(at, player, currEnemy); gameObject.SetActive(false); enemySelector.SetActive(false); directionPanel.SetActive(false); depth = 0; enemySelectorOpen = false; } } } else if (depth == 1 && skillMenu) { useableSkills = pd.GetUseableSkills(); int topSkillIndex = skillSelectorIndex - (skillSelectorIndex % 4); //the magic number 4 here is the number of items shown at a time int skillNameTextIndex = 0; for (int i = topSkillIndex; i < useableSkills.Count && i < topSkillIndex + 4; i++) //same here with the 4 { skillTexts[skillNameTextIndex].text = useableSkills[i].name; skillNameTextIndex++; } while (skillNameTextIndex < 4) { skillTexts[skillNameTextIndex].text = ""; skillNameTextIndex++; } if (useableSkills.Count == 0) { skillTexts[0].text = "No skills!"; skillEnTextNum.text = "N/A"; } else { skillEnTextNum.text = useableSkills[skillSelectorIndex].reqEn.ToString(); } if (Input.GetKeyDown(KeyCode.LeftShift)) { audio.PlayOneShot((AudioClip)Resources.Load("Sounds/SecondaryMenuClose")); Debug.Log("exiting skill menu"); skillMenu = false; depth--; skillList.SetActive(false); directionPanel.SetActive(false); return; } if (currMoveTimer >= 0.0f) { currMoveTimer -= Time.deltaTime; } if (movement.y >= .8f && currMoveTimer <= 0.0f) { audio.PlayOneShot((AudioClip)Resources.Load("Sounds/ItemSelectorMove")); skillSelectorIndex--; if (skillSelectorIndex < 0) { if (useableSkills.Count == 0) { skillSelectorIndex = 0; } else { skillSelectorIndex = useableSkills.Count - 1; } } if (!held) { held = true; currMoveTimer = firstMoveTimer; } else { currMoveTimer = heldMoveTimer; } } else if (movement.y <= -.8f && currMoveTimer <= 0.0) { audio.PlayOneShot((AudioClip)Resources.Load("Sounds/ItemSelectorMove")); skillSelectorIndex++; if (skillSelectorIndex > useableSkills.Count - 1) { skillSelectorIndex = 0; } if (!held) { held = true; currMoveTimer = firstMoveTimer; } else { currMoveTimer = heldMoveTimer; } } else if (movement.y > -0.8f && movement.y < 0.8f) { held = false; currMoveTimer = -1.0f; } if (useableSkills.Count > 0) { directionText.text = useableSkills[skillSelectorIndex].desc; directionShadowText.text = useableSkills[skillSelectorIndex].desc; } if (Input.GetKeyDown(KeyCode.Space)) { Battler player = bm.GetCurrentBattler(); if (useableSkills.Count > 0 && useableSkills[skillSelectorIndex].reqEn <= player.en) //use the currently selected item { if (useableSkills[skillSelectorIndex].targetsEnemy) { spDeduction = useableSkills[skillSelectorIndex].reqEn; at = useableSkills[skillSelectorIndex].skill; skillSelectorIndex = 0; skillMenu = false; skillList.SetActive(false); audio.PlayOneShot((AudioClip)Resources.Load("Sounds/SecondaryMenuOpen")); Debug.Log("opening enemy selector"); enemySelector.SetActive(true); depth = 1; enemySelectorOpen = true; enemySelectorIndex = 0; directionPanel.SetActive(true); directionText.text = "Attack which enemy?"; directionShadowText.text = "Attack which enemy?"; optionSelector.SetActive(false); } else { player.en -= useableSkills[skillSelectorIndex].reqEn; bm.BattlerAttack(useableSkills[skillSelectorIndex].skill, player, null); skillSelectorIndex = 0; depth = 0; skillMenu = false; skillList.SetActive(false); gameObject.SetActive(false); directionPanel.SetActive(false); } } } skillSelectorTransform.anchoredPosition = new Vector3(4, -(skillSelectorIndex % 4) * 24 - 12, 0); } rt.transform.eulerAngles = new Vector3(0, 0, angle); }
public ProjectileArc(AttackDelegate attackGenerator, int radius) { AttackGenerator = attackGenerator; Radius = radius; }
public ProjectileImpactAttack(AttackDelegate attackGenerator) { AttackGenerator = attackGenerator; }
public ProjectileImpactExplosion(AttackDelegate attackGenerator, int radius) { AttackGenerator = attackGenerator; Radius = radius; }
public AttackInfo(AttackDelegate v_attack, float v_delay_after_attack, float v_next_attack_chance = 1.0f) { attack = v_attack; delay_after_attack = v_delay_after_attack; next_attack_chance = v_next_attack_chance; }
private void Awake() { onAttack = null; }
public AttackRequest(AttackDelegate attackDelegate, int attackPower) { this.attackDelegate = attackDelegate; this.attackPower = attackPower; }
public void BattlerAttack(AttackDelegate ad, Battler aggressor, Battler target) { currstate = states.turnattack; StartCoroutine(ad(aggressor, target, this)); }
// Update is called once per frame void Update() { switch (currstate) { case states.dead: break; case states.battlewon: generalTimer += Time.deltaTime; if (generalTimer >= 3.0f) { generalTimer = 0.0f; currstate = states.dead; if (cbbattleend == null) { cs.StartWipe(EndBattle, movscript.UnlockMovement); } else { cs.StartWipe(EndBattle, cbbattleend); } } break; case states.turnstart: { currbattler = battlerQueue[0]; battlerQueue.RemoveAt(0); battlerQueue.Add(currbattler); currbattler.StartFlashing(1.5f); if (!currbattler.isPlayerControlled) { //generalTimer += Time.deltaTime; //if (generalTimer >= 2.0f) //{ generalTimer = 0.0f; currstate = states.turnattack; AttackDelegate ad = currbattler.GetAttack(player, this); StartCoroutine(ad(currbattler, player, this)); //} } else { choiceRadial.SetActive(true); } currstate = states.turnattack; break; } case states.turnattack: { break; } case states.turnend: { generalTimer += Time.deltaTime; if (generalTimer >= 1.0f) { generalTimer = 0.0f; currstate = states.turnstart; } break; } default: currstate = states.dead; break; } //player.UpdateBattler(); //enemy.UpdateBattler(); for (int i = 0; i < registeredBattlers.Count; i++) { registeredBattlers[i].UpdateBattler(); } playerhp.text = player.hp.ToString(); playermaxhp.text = player.maxhp.ToString(); playeren.text = player.en.ToString(); playermaxen.text = player.maxen.ToString(); }