private string GetRecruiterDescription(PlayerSoldier soldier) { if (soldier.RangedRating > 105) { if (soldier.MeleeRating > 90) { if (soldier.MeleeRating > 100 && soldier.RangedRating > 105) { return(soldier.Name + " is ready to accept the Black Carapace and join a Devastator Squad; I think he will rise through the ranks quickly.\n"); } else { return(soldier.Name + " is ready to be promoted to a Devastator Squad, but I would prefer he earn more seasoning first.\n"); } } else { return(soldier.Name + " could be promoted in an emergency, but is not ready to face hand-to-hand combat.\n"); } } else if (soldier.MeleeRating > 90) { return(soldier.Name + " has a good grasp of the sword, but his mastery of the bolter leaves something to be desired.\n"); } else { return(soldier.Name + " is not ready to become a Battle Brother, and should acquire more seasoning before taking the Black Carapace.\n"); } }
private void ApplyBionics(HitLocation hitLocation, PlayerSoldier soldier) { // NOTE: We don't heal the wound here. // The wound will heal automatically in the next turn. // This represents the marine learning how to use the new body part. hitLocation.IsCybernetic = true; soldier.AddEntryToHistory($"Received bioic {hitLocation.Template.Name} replacement"); if (hitLocation.Template.Name.Contains("Arm")) { hitLocation.Armor = 2; string otherName = hitLocation.Template.Name.Replace("Arm", "Hand"); var otherHitLocation = soldier.Body.HitLocations .First(hl => hl.Template.Name == otherName); otherHitLocation.Armor = 2; otherHitLocation.IsCybernetic = true; } else if (hitLocation.Template.Name.Contains("Leg")) { hitLocation.Armor = 3; string otherName = hitLocation.Template.Name.Replace("Leg", "Foot"); var otherHitLocation = soldier.Body.HitLocations .First(hl => hl.Template.Name == otherName); otherHitLocation.Armor = 3; otherHitLocation.IsCybernetic = true; } }
private static void ApplySoldierTypeTraining(PlayerSoldier soldier) { foreach (Tuple <BaseSkill, float> tuple in soldier.Template.MosTraining) { soldier.AddSkillPoints(tuple.Item1, tuple.Item2); } }
public void GetCloser(PlayerSoldier enemy) { UnMarkAvailableTilesToStep(); CoverSoldier(); enemy.CoverSoldier(); if (CurrentSide == GameSide.LeftSide && enemy.CurrentTile.Column < CurrentTile.Column || CurrentSide == GameSide.RightSide && enemy.CurrentTile.Column > CurrentTile.Column) { isFlipped = true; if (enemy is Zombie) { (enemy as Zombie).isFlipped = true; enemy.FlipSide(false); enemy.transform.position = new Vector2(enemy.CurrentTile.transform.position.x + OffsetX, enemy.CurrentTile.transform.position.y + OffsetY); } FlipSide(false); transform.position = new Vector2(CurrentTile.transform.position.x + OffsetX, CurrentTile.transform.position.y + OffsetY); } anim.Play("Walk"); SoundManager.Instance.SFX.PlayOneShot(SoundManager.Instance.ZombieWalkShort); playerCollider.isTrigger = enemy.PlayerCollider.isTrigger = true; enemy.SetWarTag(); CurrentTile.Soldier = null; CurrentTile = enemy.CurrentTile; //CurrentTile.Soldier = this; destination = new Vector2(CurrentTile.transform.position.x + OffsetX, CurrentTile.transform.position.y + OffsetY); isWalking = isInWar = true; }
public bool ChangeSoldierPosition(PlayerSoldier soldier) { soldier.gameObject.SetActive(false); Vector2 worldPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition); RaycastHit2D hit = Physics2D.Raycast(worldPoint, Vector2.zero); soldier.gameObject.SetActive(true); if (hit.collider != null && hit.collider.tag == "BuildTile") //Check if user clicked on build site { Tile tile = hit.transform.gameObject.GetComponent <Tile>(); soldier.GetComponent <SpriteRenderer>().sortingOrder = tile.Row + 1; soldier.CurrentTile.UnmarkTileInUse(); soldier.CurrentTile.Soldier = null; soldier.CurrentTile = tile; soldier.CurrentTile.Soldier = soldier; soldier.transform.position = new Vector2(tile.transform.position.x + soldier.OffsetX, tile.transform.position.y + soldier.OffsetY); tile.MarkTileInUse(); return(true); } else if (hit.collider != null && (hit.collider.tag == "Zombie" || hit.collider.tag == "Bomb" || hit.collider.tag == "Flag")) { PlayerSoldier otherSoldier = hit.transform.gameObject.GetComponent <PlayerSoldier>(); soldier.GetComponent <SpriteRenderer>().sortingOrder = otherSoldier.CurrentTile.Row + 1; otherSoldier.GetComponent <SpriteRenderer>().sortingOrder = soldier.CurrentTile.Row + 1; soldier.CurrentTile.Soldier = otherSoldier; otherSoldier.CurrentTile.Soldier = soldier; var tmpTile = soldier.CurrentTile; soldier.CurrentTile = otherSoldier.CurrentTile; otherSoldier.CurrentTile = tmpTile; var tmpPos = soldier.OriginPosition; soldier.transform.position = new Vector2(soldier.CurrentTile.transform.position.x + soldier.OffsetX, soldier.CurrentTile.transform.position.y + soldier.OffsetY); otherSoldier.transform.position = new Vector2(otherSoldier.CurrentTile.transform.position.x + otherSoldier.OffsetX, otherSoldier.CurrentTile.transform.position.y + otherSoldier.OffsetY);; return(true); } else if (hit.collider != null && hit.collider.tag == "Trash" && !(soldier is Flag)) { soldier.CurrentTile.UnmarkTileInUse(); SoldierManager.Instance.LocalPlayerList.Remove(soldier); MenuLogic.Instance.SellSoldier(soldier.Price); if (soldier is Bomb) { NumOfBombs--; GameView.EnableButton("Btn_Bomb"); } else if (soldier.Rank == Globals.RANK_OF_SAPPER) { NumOfSappers--; GameView.EnableButton("Btn_Zombie9"); } SoundManager.Instance.SFX.PlayOneShot(SoundManager.Instance.SoldierSold); Destroy(soldier.gameObject); } return(false); }
public void RemoveSoldierFromList(PlayerSoldier soldier) { if (Globals.IS_SINGLE_PLAYER && soldier.CurrentSide == GameManager.Instance.PcSide || !Globals.IS_SINGLE_PLAYER && MultiPlayerManager.Instance.PlayerSide != soldier.CurrentSide) { EnemyList.Remove(soldier); } else { LocalPlayerList.Remove(soldier); } }
public void UnReadyToStep(PlayerSoldier zombie, bool isPc = false) { isReadyToStep = false; if (!isPc) { UnColorTile(); } if (soldier != null && zombie == soldier) { soldier = null; } attackingZombie = null; }
protected Color DetermineDisplayColor(ISoldier soldier) { PlayerSoldier playerSoldier = GameSettings.Chapter.PlayerSoldierMap[soldier.Id]; if (!playerSoldier.IsDeployable) { return(Color.red); } if (playerSoldier.IsWounded) { return(Color.yellow); } return(Color.white); }
public IEnumerator DisplayInfo(PlayerSoldier soldier) { GameView.SetImage("SoldierImg", soldier.Sprite); GameView.SetText("RankInfoTxt", soldier.Rank.ToString()); GameView.SetText("InfoTitleTxt", soldier.SoldierName); GameView.SetText("DescriptionInfoTxt", soldier.Description); GameView.SetText("SpecialAbilityTxt", soldier.SpecialAbilityDescription); //cloudInfo.transform.position = soldier.transform.position; cloudInfo.transform.position = new Vector2(Input.mousePosition.x + (soldier.CurrentSide == GameSide.LeftSide ? 70 : -70), Input.mousePosition.y); SoundManager.Instance.SFX.PlayOneShot(SoundManager.Instance.Description); isDescriptionOpen = true; cloudInfo.SetActive(true); yield return(new WaitForSeconds(3f)); CloseInfo(); }
public void ResetTile() { if (Column < 4) { tag = "BuildTile"; } else if (Column > 7) { tag = "EnemyTile"; } else { tag = "Tile"; } isReadyToStep = false; Soldier = attackingZombie = null; UnColorTile(); }
private string GetGeneseedStatusDescription(PlayerSoldier soldier) { if (soldier.Body.HitLocations.First(hl => hl.Template.Name == "Face").IsSevered) { return("Destroyed"); } else if (soldier.Body.HitLocations.First(hl => hl.Template.Name == "Torso").IsSevered) { return("Destroyed"); } else if (GameSettings.Date.GetWeeksDifference(soldier.ProgenoidImplantDate) < 260) { return("Immature, Unrecoverable"); } else { GameSettings.Chapter.GeneseedStockpile++; return("Recovered"); } }
public void PlaceSoldier(Tile tile, PlayerSoldier soldier, bool isEnemy = false) { PlayerSoldier newSoldier = Instantiate(soldier, transform); if (isEnemy) { newSoldier.FlipSide(); EnemyList.Add(newSoldier); } else { LocalPlayerList.Add(newSoldier); } newSoldier.transform.position = new Vector3(tile.transform.position.x + newSoldier.OffsetX, tile.transform.position.y + newSoldier.OffsetY); newSoldier.GetComponent <SpriteRenderer>().sortingOrder = tile.Row + 1; newSoldier.CurrentTile = tile; newSoldier.CurrentTile.Soldier = newSoldier; tile.MarkTileInUse(); }
public void SquadMemberView_OnSoldierSelected(int soldierId) { string newText = ""; _selectedSoldier = GameSettings.Chapter.PlayerSoldierMap[soldierId]; foreach (string historyLine in _selectedSoldier.SoldierHistory) { newText += historyLine + "\n"; } SquadMemberView.ReplaceSelectedUnitText(newText); var openings = GetOpeningsInUnit(GameSettings.Chapter.OrderOfBattle, _selectedSoldier.AssignedSquad, _selectedSoldier.Template); // insert current assignment at top openings.Insert(0, new Tuple <int, SoldierTemplate, string>( _selectedSoldier.AssignedSquad.Id, _selectedSoldier.Template, $"{_selectedSoldier.Template.Name}, {_selectedSoldier.AssignedSquad.Name}, {_selectedSoldier.AssignedSquad.ParentUnit.Name}")); SquadMemberView.PopulateTransferDropdown(openings); }
public void UpdateRatings(PlayerSoldier soldier) { // Melee score = (Speed * STR * Melee) // Expected score = 16 * 16 * 15.5/8 = 1000 // low-end = 15 * 15 * 14/8 = 850 // high-end = 17 * 17 * 16/8 = 578 soldier.MeleeRating = soldier.Strength * soldier.GetTotalSkillValue(_skillsByName["Sword"]) / (UnityEngine.Random.Range(1.44f, 1.76f) * UnityEngine.Random.Range(1.44f, 1.76f)); // marksman, sharpshooter, sniper // Ranged Score = PER * Ranged Skill bestRanged = soldier.GetBestSkillInCategory(SkillCategory.Ranged); soldier.RangedRating = (soldier.Dexterity + bestRanged.SkillBonus) / UnityEngine.Random.Range(0.144f, 0.176f); // Leadership Score = CHA * Leadership * Tactics soldier.LeadershipRating = soldier.Ego * soldier.GetTotalSkillValue(_skillsByName["Leadership"]) * soldier.GetTotalSkillValue(_skillsByName["Tactics"]) / (UnityEngine.Random.Range(12.6f, 15.4f) * UnityEngine.Random.Range(1.26f, 1.54f) * UnityEngine.Random.Range(1.26f, 1.54f)); // Ancient Score = EGO * BOD soldier.AncientRating = soldier.Ego * soldier.Constitution / (UnityEngine.Random.Range(1.26f, 1.54f) * UnityEngine.Random.Range(2.88f, 3.52f)); // Medical Score = INT * Medicine soldier.MedicalRating = soldier.GetTotalSkillValue(_skillsByName["Diagnosis"]) * soldier.GetTotalSkillValue(_skillsByName["First Aid"]) / (UnityEngine.Random.Range(0.99f, 1.21f) * UnityEngine.Random.Range(1.17f, 1.43f)); // Tech Score = INT * TechRapair soldier.TechRating = soldier.GetTotalSkillValue(_skillsByName["Armory (Small Arms)"]) * soldier.GetTotalSkillValue(_skillsByName["Armory (Vehicle)"]) / (UnityEngine.Random.Range(1.17f, 1.43f) * UnityEngine.Random.Range(1.17f, 1.43f)); // Piety Score = Piety * Ritual * Persuade soldier.PietyRating = soldier.GetTotalSkillValue(_skillsByName["Theology (Emperor of Man)"]) / UnityEngine.Random.Range(0.108f, 0.132f); }
public void ReadyToStep(PlayerSoldier zombie, bool isPc = false) { isReadyToStep = true; if (!isPc) { ColorTile(); } //if(soldier == null || !soldier.IsEnemy(zombie)) { // soldier = zombie; //} //else { // attackingZombie = zombie as Zombie; //} if (soldier != null && soldier.IsEnemy(zombie)) { attackingZombie = zombie as Zombie; } else if (soldier == null) { soldier = zombie; } }
public void SavePlayerSoldier(IDbTransaction transaction, PlayerSoldier playerSoldier) { string insert = $@"INSERT INTO PlayerSoldier VALUES ({playerSoldier.Id}, {playerSoldier.MeleeRating}, {playerSoldier.RangedRating}, {playerSoldier.LeadershipRating}, {playerSoldier.MedicalRating}, {playerSoldier.TechRating}, {playerSoldier.PietyRating}, {playerSoldier.AncientRating},{playerSoldier.ProgenoidImplantDate.Millenium}, {playerSoldier.ProgenoidImplantDate.Year},{playerSoldier.ProgenoidImplantDate.Week});"; IDbCommand command = transaction.Connection.CreateCommand(); command.CommandText = insert; command.ExecuteNonQuery(); foreach (KeyValuePair <int, ushort> weaponCasualtyCount in playerSoldier.WeaponCasualtyCountMap) { insert = $@"INSERT INTO PlayerSoldierWeaponCasualtyCount VALUES ({playerSoldier.Id}, {weaponCasualtyCount.Key}, {weaponCasualtyCount.Value});"; command = transaction.Connection.CreateCommand(); command.CommandText = insert; command.ExecuteNonQuery(); } foreach (KeyValuePair <int, ushort> factionCasualtyCount in playerSoldier.FactionCasualtyCountMap) { insert = $@"INSERT INTO PlayerSoldierFactionCasualtyCount VALUES ({playerSoldier.Id}, {factionCasualtyCount.Key}, {factionCasualtyCount.Value});"; command = transaction.Connection.CreateCommand(); command.CommandText = insert; command.ExecuteNonQuery(); } foreach (string entry in playerSoldier.SoldierHistory) { string safeEntry = entry.Replace("\'", "\'\'"); insert = $@"INSERT INTO PlayerSoldierHistory VALUES ({playerSoldier.Id}, '{safeEntry}');"; command = transaction.Connection.CreateCommand(); command.CommandText = insert; command.ExecuteNonQuery(); } }
public void MakeStep() { if (isReadyToStep) { isReadyToStep = false; if (attackingZombie != null && attackingZombie is Zombie) { (attackingZombie as Zombie).GetCloser(soldier); attackingZombie = null; } else if (soldier is Zombie) { (soldier as Zombie).Walk(this); } if (Globals.IS_SINGLE_PLAYER && !(soldier is Flag)) { GameManager.Instance.PassTurn(); } } }
private List <PlayerSoldier> RemoveSoldiersKilledInBattle() { List <PlayerSoldier> dead = new List <PlayerSoldier>(); foreach (BattleSoldier soldier in _startingPlayerBattleSoldiers) { foreach (HitLocation hl in soldier.Soldier.Body.HitLocations) { if (hl.Template.IsVital && hl.IsSevered) { // if a vital part is severed, they're dead PlayerSoldier playerSoldier = GameSettings.Chapter.PlayerSoldierMap[soldier.Soldier.Id]; dead.Add(playerSoldier); Squad squad = playerSoldier.AssignedSquad; playerSoldier.AssignedSquad = null; squad.RemoveSquadMember(playerSoldier); GameSettings.Chapter.PlayerSoldierMap.Remove(soldier.Soldier.Id); break; } } } return(dead); }
private Dictionary <int, PlayerSoldier> GetPlayerSoldiers(IDbConnection connection, IReadOnlyDictionary <int, Soldier> baseSoldierMap, IReadOnlyDictionary <int, Dictionary <int, ushort> > factionCasualtyMap, IReadOnlyDictionary <int, Dictionary <int, ushort> > weaponCasualtyMap, IReadOnlyDictionary <int, List <string> > historyMap) { Dictionary <int, PlayerSoldier> playerSoldierMap = new Dictionary <int, PlayerSoldier>(); IDbCommand command = connection.CreateCommand(); command.CommandText = "SELECT * FROM PlayerSoldier"; var reader = command.ExecuteReader(); while (reader.Read()) { int soldierId = reader.GetInt32(0); float melee = (float)reader[1]; float ranged = (float)reader[2]; float leadership = (float)reader[3]; float medical = (float)reader[4]; float tech = (float)reader[5]; float piety = (float)reader[6]; float ancient = (float)reader[7]; int implantMillenium = reader.GetInt32(8); int implantYear = reader.GetInt32(9); int implantWeek = reader.GetInt32(10); Date implantDate = new Date(implantMillenium, implantYear, implantWeek); List <string> history; if (historyMap.ContainsKey(soldierId)) { history = historyMap[soldierId]; } else { history = new List <string>(); } Dictionary <int, ushort> weaponCasualties; if (weaponCasualtyMap.ContainsKey(soldierId)) { weaponCasualties = weaponCasualtyMap[soldierId]; } else { weaponCasualties = new Dictionary <int, ushort>(); } Dictionary <int, ushort> factionCasualties; if (factionCasualtyMap.ContainsKey(soldierId)) { factionCasualties = factionCasualtyMap[soldierId]; } else { factionCasualties = new Dictionary <int, ushort>(); } PlayerSoldier playerSoldier = new PlayerSoldier(baseSoldierMap[soldierId], melee, ranged, leadership, medical, tech, piety, ancient, implantDate, history, weaponCasualties, factionCasualties); playerSoldierMap[soldierId] = playerSoldier; } return(playerSoldierMap); }
public bool IsEnemy(PlayerSoldier enemy) { return(CurrentSide != enemy.CurrentSide); }
public void PlaceSoldier(Tile tile, PlayerSoldier soldier, bool isSoundActivated = true) { soldier.SoldierPlacedInEditMode(isSoundActivated); SoldierManager.Instance.PlaceSoldier(tile, soldier); MenuLogic.Instance.BuySoldier(soldier.Price); }
private void Awake() { PlayerPlane = new Plane(Vector3.up, transform.position); current = this; }
public void EvaluateSoldier(PlayerSoldier soldier, Date trainingFinishedYear) { UpdateRatings(soldier); //if (soldier.MeleeRating > 115) soldier.AddEntryToHistory(trainingFinishedYear.ToString() + ": Awarded Adamantium Sword of the Emperor badge during training"); if (soldier.MeleeRating > 100) { soldier.AddEntryToHistory(trainingFinishedYear.ToString() + ": Awarded Gold Sword of the Emperor badge during training"); } else if (soldier.MeleeRating > 95) { soldier.AddEntryToHistory(trainingFinishedYear.ToString() + ": Awarded Silver Sword of the Emperor badge during training"); } else if (soldier.MeleeRating > 86) { soldier.AddEntryToHistory(trainingFinishedYear.ToString() + ": Awarded Bronze Sword of the Emperor badge during training"); } if (soldier.RangedRating > 110) { soldier.AddEntryToHistory(trainingFinishedYear.ToString() + ": Awarded Gold Marksman badge during training with " + soldier.GetBestSkillInCategory(SkillCategory.Ranged).BaseSkill.Name); } else if (soldier.RangedRating > 105) { soldier.AddEntryToHistory(trainingFinishedYear.ToString() + ": Awarded Silver Marksman badge during training with " + soldier.GetBestSkillInCategory(SkillCategory.Ranged).BaseSkill.Name); } else if (soldier.RangedRating > 98) { soldier.AddEntryToHistory(trainingFinishedYear.ToString() + ": Awarded Bronze Marksman badge during training with " + soldier.GetBestSkillInCategory(SkillCategory.Ranged).BaseSkill.Name); } if (soldier.LeadershipRating > 100) { soldier.AddEntryToHistory(trainingFinishedYear.ToString() + ": Awarded Gold Voice of the Emperor badge during training"); } else if (soldier.LeadershipRating > 70) { soldier.AddEntryToHistory(trainingFinishedYear.ToString() + ": Awarded Silver Voice of the Emperor badge during training"); } else if (soldier.LeadershipRating > 50) { soldier.AddEntryToHistory(trainingFinishedYear.ToString() + ": Awarded Bronze Voice of the Emperor badge during training"); } if (soldier.AncientRating > 125) { soldier.AddEntryToHistory(trainingFinishedYear.ToString() + ": Awarded Gold Banner of the Emperor badge during training"); } else if (soldier.AncientRating > 110) { soldier.AddEntryToHistory(trainingFinishedYear.ToString() + ": Awarded Silver Banner of the Emperor badge during training"); } else if (soldier.AncientRating > 95) { soldier.AddEntryToHistory(trainingFinishedYear.ToString() + ": Awarded Bronze Banner of the Emperor badge during training"); } if (soldier.MedicalRating > 75) { soldier.AddEntryToHistory(trainingFinishedYear.ToString() + ": Flagged for potential training as Apothecary"); } if (soldier.TechRating > 50) { soldier.AddEntryToHistory(trainingFinishedYear.ToString() + ": Flagged for potential training as Techmarine"); } if (soldier.PietyRating > 90) { soldier.AddEntryToHistory(trainingFinishedYear.ToString() + ": Awarded Devout badge and declared a Novice"); } }