private static void On_Tick(object sender, TickEventArgs args) { GameClock gameClock = null; if (sender is GameClock) gameClock = (GameClock)sender; if (gameClock != null) { //Update all players foreach (Player p in Players.Values) { p.Do_Tick(gameClock); } //After all players have updated, write it to the DB foreach (Player p in Players.Values) { p.Save_Database_Values(); } } else { //todo: handle error here, something invoked the tick that was not a gameclock } //TODO Back up Database file }
public static void Initialize(GameClock gameClock) { gameClock.TickEvent += new GameClock.TickHandler(On_Tick); PlayerManager.gameClock = gameClock; Query query = new Query("select * from Player"); foreach (DataRow player_row in query.result.Tables[0].Rows) { Players.Add(player_row["user_name"].ToString(), new Player(player_row["user_name"].ToString(), PlayerManager.gameClock)); } MainForm.Log("PlayerManager Initialized"); }
public MainForm() { InitializeComponent(); Log("Welcome to Entropy. Enjoy your stay."); this.gameClock = new GameClock(TimeSpan.FromSeconds(5.0D)); this.gameClock.TickEvent += new GameClock.TickHandler(gameClock_TickEvent); this.gameClock.Start(); ConnectionManager.Initialize( this.gameClock, 8080 ); PlayerManager.Initialize(this.gameClock); MainForm.Log("Entropy Must Increase"); outputTickStamp(0); }
private string user_name; //SQL 100 chars #endregion Fields #region Constructors public Player(string user_name, GameClock gameClock) { this.user_name = user_name; //Populate all player data Load_Database_Values(); Compute_Credits(gameClock); Compute_Research(gameClock); Compute_Ship_Pop(gameClock); Compute_Scores(gameClock); }
private void Compute_Ship_Pop(GameClock gameClock) { ship_pop_cap = TechManager.Tech_Mod(TECH_TYPE.TECH_BASE_FLEET_CAP, tech_base_fleet_cap); //Ship Count for (int ship_type = 0; ship_type < (int)SHIP_TYPE.SHIP_LAST_SHIP; ship_type++) { ship_pop_used += Ships_Attacking[(SHIP_TYPE)ship_type]; ship_pop_used += Ships_Defending[(SHIP_TYPE)ship_type]; } if (ship_pop_used > ship_pop_cap) { MainForm.Log("Player " + user_name + " has " + ship_pop_used + " ships when their cap is " + ship_pop_cap); } }
//TODO Notifications for completed actions private void Process_Actions(GameClock gameClock) { //Attack Slot if (gameClock.CurrentTick == action_attack.End_Tick) { Do_Combat(action_attack); } //Ship Slot if (gameClock.CurrentTick == action_build_ship.End_Tick) { SHIP_TYPE ship_type = (SHIP_TYPE)action_build_ship.Param; this.Ships_Defending[ship_type]++; } //Structure Slot if (gameClock.CurrentTick == action_build_struct.End_Tick) { if (this.action_build_struct.Type == PLAYER_ACTION.ACTION_BUILD_STRUCTURE) { STRUCTURE_TYPE structure_type = (STRUCTURE_TYPE)action_build_ship.Param; this.Structures[structure_type]++; } else if (this.action_build_struct.Type == PLAYER_ACTION.ACTION_SELL_STRUCTURE) { STRUCTURE_TYPE structure_type = (STRUCTURE_TYPE)action_build_ship.Param; this.Structures[structure_type]--; //Refund some cash on completed sell credits_current += GameManager.Structure_Templates[structure_type].Cost / SELL_DIVISOR; } } //Research Slot if (gameClock.CurrentTick == action_research.End_Tick) { TECH_TYPE tech_type = (TECH_TYPE)action_research.Param; //TODO Cap at max tier switch (tech_type) { case TECH_TYPE.TECH_SHIP_WEAPONS: tech_ship_weapons++; break; case TECH_TYPE.TECH_SHIP_HP: tech_ship_hp++; break; case TECH_TYPE.TECH_SHIP_ENGINE: tech_ship_engine++; break; case TECH_TYPE.TECH_SHIP_STEALTH: tech_ship_stealth++; break; case TECH_TYPE.TECH_STRUCT_WEAPONS: tech_struct_weapons++; break; case TECH_TYPE.TECH_STRUCT_HP: tech_struct_hp++; break; case TECH_TYPE.TECH_STRUCT_ECON: tech_struct_econ++; break; case TECH_TYPE.TECH_STRUCT_RESEARCH: tech_struct_research++; break; case TECH_TYPE.TECH_CONSTRUCT_SPEED: tech_construct_speed++; break; case TECH_TYPE.TECH_BASE_SENSORS: tech_base_sensors++; break; case TECH_TYPE.TECH_BASE_FLEET_CAP: tech_base_fleet_cap++; break; case TECH_TYPE.TECH_BASE_ASTEROID_CAP: tech_base_asteroid_cap++; break; default: MainForm.Log("Error! Player " + user_name + " researched an impossible tech: " + tech_type); break; } } //Diplomacy Slot if (gameClock.CurrentTick == action_diplomacy.End_Tick) { //Diplomacy on self = "Optimize Planetary Trade" if (action_diplomacy.Target_Player_Name == user_name) { credits_current += Score_Diplomacy / TRADE_DIVISOR; } else { //TODO Do Sabotage! } } //Direct Slot if (gameClock.CurrentTick == action_direct.End_Tick) { credits_current += Score_Overall / DIRECT_DIVISOR; } }
private void Compute_Research(GameClock gameClock) { research_per_tick = base_research; //Structure Research for (int structure_type = 0; structure_type < (int)STRUCTURE_TYPE.STRUCT_LAST_STRUCT; structure_type++) { research_per_tick += Structures[(STRUCTURE_TYPE)structure_type] * (GameManager.Structure_Templates[(STRUCTURE_TYPE)structure_type].Bonus_Tech * TechManager.Tech_Mod(TECH_TYPE.TECH_STRUCT_RESEARCH, tech_struct_research)); } //Ship Research for (int ship_type = 0; ship_type < (int)SHIP_TYPE.SHIP_LAST_SHIP; ship_type++) { research_per_tick += Ships_Attacking[(SHIP_TYPE)ship_type] * (GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Bonus_Tech); } }
private void Compute_Credits(GameClock gameClock) { credits_per_tick_gross = base_econ; //Structure Income for (int structure_type = 0; structure_type < (int)STRUCTURE_TYPE.STRUCT_LAST_STRUCT; structure_type++) { credits_per_tick_gross += Structures[(STRUCTURE_TYPE)structure_type] * (GameManager.Structure_Templates[(STRUCTURE_TYPE)structure_type].Bonus_Econ * TechManager.Tech_Mod(TECH_TYPE.TECH_STRUCT_ECON, tech_struct_econ)); } //Ship Income for (int ship_type = 0; ship_type < (int)SHIP_TYPE.SHIP_LAST_SHIP; ship_type++) { credits_per_tick_gross += Ships_Attacking[(SHIP_TYPE)ship_type] * (GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Bonus_Econ); } credits_per_tick_net = credits_per_tick_gross; //Structure Upkeep for (int structure_type = 0; structure_type < (int)STRUCTURE_TYPE.STRUCT_LAST_STRUCT; structure_type++) { credits_per_tick_net -= Structures[(STRUCTURE_TYPE)structure_type] * (GameManager.Structure_Templates[(STRUCTURE_TYPE)structure_type].Upkeep); } //Ship Upkeep for (int ship_type = 0; ship_type < (int)SHIP_TYPE.SHIP_LAST_SHIP; ship_type++) { credits_per_tick_net -= Ships_Attacking[(SHIP_TYPE)ship_type] * (GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Upkeep); } }
private void Compute_Build_Slots(GameClock gameClock) { build_slots_cap = base_build_slots; asteroids_cap = TechManager.Tech_Mod(TECH_TYPE.TECH_BASE_ASTEROID_CAP, tech_base_asteroid_cap); //Asteroid slots for (int asteroid_type = 0; asteroid_type < (int)SHIP_TYPE.SHIP_LAST_SHIP; asteroid_type++) { build_slots_cap += Asteroids[(ASTEROID_SIZE)asteroid_type] * GameManager.Asteroid_Templates[(ASTEROID_SIZE)asteroid_type].Slots; asteroids_used += Asteroids[(ASTEROID_SIZE)asteroid_type]; } //Structures used for (int structure_type = 0; structure_type < (int)STRUCTURE_TYPE.STRUCT_LAST_STRUCT; structure_type++) { build_slots_used += Structures[(STRUCTURE_TYPE)structure_type]; } if (build_slots_used > build_slots_cap) { MainForm.Log("Player " + user_name + " has " + build_slots_used + " structures when their cap is " + build_slots_cap); } if (asteroids_used > asteroids_cap) { MainForm.Log("Player " + user_name + " has " + asteroids_used + " asteroids when their cap is " + asteroids_cap); } }
public void Do_Tick(GameClock gameClock) { Process_Actions(gameClock); Compute_Credits(gameClock); Compute_Research(gameClock); Compute_Ship_Pop(gameClock); credits_current += credits_per_tick_net; Compute_Scores(gameClock); }
public void Compute_Scores(GameClock gameClock) { Score_Overall = 0; Score_Combat = 0; Score_Diplomacy = 0; Score_Econ = 0; Score_Tech = 0; //Ship Scores for (int ship_type = 0; ship_type < (int)SHIP_TYPE.SHIP_LAST_SHIP; ship_type++) { Score_Combat += Ships_Attacking[(SHIP_TYPE)ship_type] * ((GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Combat_Rating) * TechManager.Tech_Mod(TECH_TYPE.TECH_SHIP_WEAPONS, tech_ship_weapons)); Score_Combat += Ships_Defending[(SHIP_TYPE)ship_type] * ((GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Combat_Rating) * TechManager.Tech_Mod(TECH_TYPE.TECH_SHIP_WEAPONS, tech_ship_weapons)); Score_Diplomacy += Ships_Attacking[(SHIP_TYPE)ship_type] * (GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Bonus_Diplomacy); Score_Diplomacy += Ships_Defending[(SHIP_TYPE)ship_type] * (GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Bonus_Diplomacy); Score_Econ += Ships_Attacking[(SHIP_TYPE)ship_type] * (GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Bonus_Econ); Score_Econ += Ships_Defending[(SHIP_TYPE)ship_type] * (GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Bonus_Econ); Score_Tech += Ships_Attacking[(SHIP_TYPE)ship_type] * (GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Bonus_Tech); Score_Tech += Ships_Defending[(SHIP_TYPE)ship_type] * (GameManager.Ship_Templates[(SHIP_TYPE)ship_type].Bonus_Tech); } //Structure Scres for (int structure_type = 0; structure_type < (int)STRUCTURE_TYPE.STRUCT_LAST_STRUCT; structure_type++) { Score_Combat += Structures[(STRUCTURE_TYPE)structure_type] * ((GameManager.Structure_Templates[(STRUCTURE_TYPE)structure_type].Bonus_Combat) * TechManager.Tech_Mod(TECH_TYPE.TECH_STRUCT_WEAPONS, tech_struct_weapons)); Score_Diplomacy += Structures[(STRUCTURE_TYPE)structure_type] * ((GameManager.Structure_Templates[(STRUCTURE_TYPE)structure_type].Bonus_Diplomacy) * TechManager.Tech_Mod(TECH_TYPE.TECH_STRUCT_DIPLOMACY, tech_struct_diplomacy)); Score_Econ += Structures[(STRUCTURE_TYPE)structure_type] * ((GameManager.Structure_Templates[(STRUCTURE_TYPE)structure_type].Bonus_Econ) * TechManager.Tech_Mod(TECH_TYPE.TECH_STRUCT_ECON, tech_struct_econ)); Score_Tech += Structures[(STRUCTURE_TYPE)structure_type] * ((GameManager.Structure_Templates[(STRUCTURE_TYPE)structure_type].Bonus_Tech) * TechManager.Tech_Mod(TECH_TYPE.TECH_STRUCT_RESEARCH, tech_struct_research)); } Score_Overall = Score_Combat + Score_Diplomacy + Score_Econ + Score_Tech; }