/// <summary> /// Causa dano a um personagem. /// </summary> /// <param name="state">O estado do personagem alvo.</param> /// <param name="ownState">O estado do provedor deste ataque.</param> /// <param name="damage">O dano a ser causado.</param> /// <param name="effect">O efeito de status causado.</param> public static void TakeDamage(CharacterState state, CharacterState ownState, int damage, CharacterStatus effect = CharacterStatus.NONE) { //Dano dobrado quando vulnerável. if (state.Status == CharacterStatus.VUNERABLE) { damage = (int)(CharacterStatusValues.VULNERABLE_DAMAGE_FACTOR * damage); } //Dano reduzido quando com buff de defesa. if (state.Buff == CharacterBuff.DEFENSE) { damage = (int)(damage * CharacterBuffValues.DEFENSE_FACTOR); } state.Health -= damage; if (effect != CharacterStatus.NONE) { state.Status = effect; } if (ownState != null && ownState.Buff == CharacterBuff.LIFE_DRAIN) { //Cura uma porcentagem do dano causado. CombatLogic.Heal(ownState, (int)(CharacterBuffValues.LIFE_DRAIN_FACTOR * damage)); } }
public static bool IsTargetOfAbilityValid(LivingEntity caster, LivingEntity target, Ability abilityUsed) { if (caster == target && (abilityUsed.ValidTargets == Ability.TargettingOptions.Self || abilityUsed.ValidTargets == Ability.TargettingOptions.AlliesAndSelf) ) { return(true); } else if (caster != target && CombatLogic.IsTargetFriendly(caster, target) && (abilityUsed.ValidTargets == Ability.TargettingOptions.Allies || abilityUsed.ValidTargets == Ability.TargettingOptions.AlliesAndSelf)) { return(true); } else if (CombatLogic.IsTargetHostile(caster, target) && abilityUsed.ValidTargets == Ability.TargettingOptions.Enemies) { return(true); } else { return(false); } }
public static void PerformShoot(LivingEntity caster, LivingEntity target, Ability abilityUsed) { // Calculate the damage int damageValue = CombatLogic.CalculateDamageValue(caster, target, abilityUsed.PrimaryValue); // Create damage event CombatLogic.HandleDamage(target, damageValue); }
private IEnumerator ContinuosDamage(int damage) { var delay = new WaitForSeconds(CharacterStatusValues.DAMAGE_PERIOD); int iterations = (int)(CharacterStatusValues.STATUS_DURATION / CharacterStatusValues.DAMAGE_PERIOD); for (int i = 0; i < iterations; i++) { yield return(delay); CombatLogic.TakeDamage(state, null, damage); } continuosDamage = null; }
protected override IEnumerator ActivateInner() { int x, y; Move.DirectionToAdventurerAdjacent(input.Value, out x, out y); if (Level.currentLevel.WithinBounds(x, y)) { Tile toTheRight = Level.currentLevel.GetTile(x, y); if (toTheRight.MonsterHere != null) { CombatLogic.ProcessAttack(Adventurer.instance, toTheRight.MonsterHere); } } yield break; }
private void FixedUpdate() { for (int i = 0; i < count; i++) { var cds = Physics.OverlapSphere(projectiles[i].position, projectiles[i].info.size); foreach (var cd in cds) { if (cd.CompareTag(projectiles[i].target)) { var state = cd.GetComponent <CharacterState>(); CombatLogic.TakeDamage(state, projectiles[i].own, projectiles[i].info.damage, projectiles[i].info.effect); Delete(i); i--; break; } } } }
public override void End() { SparxHub.Instance.PushManager.OnScheduleLocalNotification -= ScheduleLocalNotification; SparxHub.Instance.ChatManager.OnConnected -= RegisterChatChannels; DestroyFlowControlObject(); HudLoadManager.DestroyAllHud(); SceneLoadManager.DestroyAllLevel(); PlayerManagerForFilter.Dispose(); NpcManager.Dispose(); MainLandLogic.Dispose(); CombatLogic.Dispose(); InputBlockerManager.Instance.ForceUnlockAll(); LoadingSpinner.Destroy(); FusionAudio.StopMusic(); FusionAudio.StopAmbience(); ChatController.instance.Clean(); }
private void OnTriggerEnter(Collider other) { if (!ValidateCollect(item.itemType)) { return; } if (other.CompareTag("Player")) { if (item.itemType == ItemType.BUFF) { playerState.Buff = item.buff; } else//Heal { CombatLogic.Heal(playerState, item.healAmount); } Destroy(gameObject); } }
protected override void Awake() { base.Awake(); this.LogErrorIfComponentIsNull(CombatLogic); Inventory.AddItem(Instantiate(weapon)); Equipment.EquipWeapon(Inventory.GetItemListAsReadOnly(x => x is Item_Weapon)[0] as Item_Weapon); var status = Resources.Load <Unit_Status_Information>("DummyStatus"); Status.Initialize(Instantiate(status)); Resources.UnloadAsset(status); if (brain != null) { var brain = Instantiate(this.brain); brain.Initialize(this); CombatLogic.InstallBrain(brain); } }
public virtual void apply_status_attack(PlayerUnit self, Enemy[] targets, CombatLogic cLog, bool all_ooa) { }
//TODO: a function that highlights the tiles a move would pass over. will be called when a move is passed over. // e.g. the player expected a move to be usable and mouses over to see where the move bumps or whatever. //tilegrid[4, 3].GetComponent<SpriteRenderer>().color = new Color(35f / 255f, 222f / 255f, 0f / 255f); //^this highlights a tile. use for testing. public virtual void apply_status_heal(PlayerUnit self, PlayerUnit[] targets, CombatLogic cLog) { }
public static void Main(string[] args) { // Get initial game state GameInfo.ProcessTurn(new Game()); GameInfo.IsDebug = GameInfo.IsLocal && args.Count() > 0 && args[0] == "debug"; if (GameInfo.IsDebug) { Stopwatch s = new Stopwatch(); s.Start(); while (!Debugger.IsAttached && s.ElapsedMilliseconds < 60000) { ; // max 30 seconds to attach, prevents memory leaks; } s.Stop(); } // Do Genetic Algorithm Specimen implementation Specimen specimen; if (GameInfo.IsDebug || (GameInfo.IsLocal && args.Count() > 0 && args[0] == "test")) { specimen = new FakeSpecimen(); HParams = specimen.GetHyperParameters(); Log.LogMessage("testing..."); } else { specimen = GeneticSpecimen.RandomSpecimen(); HParams = specimen.GetHyperParameters(); } // Handle Logic Logic.Logic CombatLogic = new CombatLogic(); Logic.Logic EarlyCollectLogic = new EarlyCollectLogic(); Logic.Logic DropoffLogic = new DropoffLogic(); Logic.Logic EndOfGameLogic = new EndOfGameLogic(); Logic.Logic LateCollectLogic = new LateCollectLogic(); SiteSelection.Initialize(); string BotName = GameInfo.BOT_NAME + specimen.Name(); GameInfo.Game.Ready(BotName); Log.LogMessage("Successfully created bot! My Player ID is " + GameInfo.Game.myId); Stopwatch combatWatch = new Stopwatch(); Stopwatch dropoffWatch = new Stopwatch(); Stopwatch proximityWatch = new Stopwatch(); Stopwatch collectWatch = new Stopwatch(); for (; ;) { // Basic processing for the turn start GameInfo.Game.UpdateFrame(); GameInfo.ProcessTurn(GameInfo.Game); Fleet.UpdateFleet(GameInfo.MyShips); EnemyFleet.UpdateFleet(); Log.LogMessage("value mapping..."); ValueMapping.ProcessTurn(); SiteSelection.ProcessTurn(); // logic turn processing EarlyCollectLogic.ProcessTurn(); DropoffLogic.ProcessTurn(); EndOfGameLogic.ProcessTurn(); CombatLogic.ProcessTurn(); // Score the ships first Safety.InitializeNewTurn(); // Specimen spawn logic for GeneticTuner if (GameInfo.TurnsRemaining == 0) { var players = GameInfo.Opponents; players.Add(GameInfo.Me); players = players.OrderByDescending(x => x.halite).ToList(); int numChildren = players.Count - ((players.Count / 2) + players.IndexOf(GameInfo.Me)); if (numChildren > 0) { specimen.SpawnChildren(numChildren); } else { specimen.Kill(); } if (GameInfo.MyId == 1 && GameInfo.IsLocal) { string content = $"\n{BotName},{GameInfo.Me.halite}"; foreach (var o in GameInfo.Opponents) { content += $",{o.id.id},{o.halite}"; } using (StreamWriter sw = File.AppendText("ResultsHistory.txt")) { sw.Write(content); } } Log.LogMessage("total time in combat logic = " + (combatWatch.ElapsedMilliseconds)); Log.LogMessage("total time in dropoff logic = " + (dropoffWatch.ElapsedMilliseconds)); Log.LogMessage("total time in proximity logic = " + (proximityWatch.ElapsedMilliseconds)); } bool doFirst = GameInfo.MyShipyardCell.Neighbors.Where(n => n.IsOccupiedByMe).Any(n => n.ship.CellHalite > 10); if (doFirst && ShouldSpawnShip()) { Fleet.SpawnShip(); } // Combat Logic!!! Log.LogMessage($"*** Combat Logic ***"); combatWatch.Start(); CombatLogic.CommandShips(); combatWatch.Stop(); // End game, return all ships to nearest dropoff Log.LogMessage($"*** EndGame Logic ***"); EndOfGameLogic.CommandShips(); // Move ships to dropoffs Log.LogMessage($"*** Dropoff Logic ***"); dropoffWatch.Start(); DropoffLogic.CommandShips(); dropoffWatch.Stop(); // collect halite (move or stay) using Logic interface Log.LogMessage($"*** Collect Logic ***"); collectWatch.Reset(); collectWatch.Start(); if (GameInfo.Map.AverageHalitePerCell > HParams[Parameters.HALITE_TO_SWITCH_COLLECT] || GameInfo.Map.PercentHaliteCollected < .5) { EarlyCollectLogic.CommandShips(); } LateCollectLogic.CommandShips(); collectWatch.Stop(); Log.LogMessage("collect time was " + collectWatch.ElapsedMilliseconds); if (!doFirst && ShouldSpawnShip()) { Fleet.SpawnShip(); } // spawn ships GameInfo.Game.EndTurn(Fleet.GenerateCommandQueue()); } }
private void Awake() { Instance = this; }
// Coroutine CRRef; void Awake() { if (instance == null) { instance = this; } bgTween.AssignBackgroundsForRegion(region); bgTween.changeBackground(level); for (int i = 0; i < allCharacters.Count; i++) { if (i != CharectorStats.SetCurrentHero(CharectorStats.GetCurrentHero())[0]) { allCharacters[i].SetActive(false); } else { SelectedHero = allCharacters[i]; } } SelectedEnemy = allEnemies[0]; characterAnimator = characterHolder.GetComponentInChildren <Animator>(); heroParticles = SelectedHero.transform.Find("HeroAttackParticles").gameObject; characterAnimator.SetBool("inCombat", true); bubbles = GetComponentsInChildren <Image>(); foreach (Image bubble in bubbles) { bubble.gameObject.SetActive(false); } int[] heroStats = CharectorStats.SetCurrentHero(CharectorStats.GetCurrentHero()); SetXPText(); pDmg = heroStats[4]; pHealth = heroStats[5]; pCrit = heroStats[6]; pAgi = heroStats[7]; pDef = heroStats[8]; lengthMultiplier = 0; stagedGold = 0; stagedShard1 = 0; stagedShard2 = 0; //event subs CombatWordManager.onMaxLengthFound += generateBubble; CombatWordManager.onCorrectWord += spelledWord; CombatWordManager.onIncorrectWord += wrongWord; CharectorStats.leveledUp += onLeveledUp; onDamageEnemy += enemyTakeDamage; //onDamageEnemy += enemyGotHitAnim; onDamagePlayer += playerTakeDamage; onDamagePlayer += enemyAttackAnim; onEnemyKilled += nextWord; onEnemyKilled += stageLoot; //onEnemyKilled += enemyIsDeadAnim; onLevelComplete += levelFinished; onLevelComplete += heroCelebrateAnim; onPlayerKilled += gameOverSequence; onPlayerKilled += removeBubble; onLevelComplete += enableContinueButton; onPlayerKilled += disableContinueButton; InitializePlayer(); InitializeEnemy(); displayNewEnemyPrefab(); InitializeTimer(); isGameplay = true; //StartCoroutine("enemyWalk"); CombatWordManager.StartLevel(); wordsLeft = CombatWordManager.Words.Count; }
public virtual void apply_status_heal(Enemy self, Enemy[] targets, CombatLogic cLog) { }