diff options
| author | MichaelTheShifter <[email protected]> | 2016-06-25 21:22:46 -0400 |
|---|---|---|
| committer | MichaelTheShifter <[email protected]> | 2016-06-25 21:22:46 -0400 |
| commit | 309f9fe361af7b0a508770951af7c548dfca78ad (patch) | |
| tree | e4303c0d47e0daff6d61a6f934b1aa957e67f93d /source/WindowsFormsApplication1/Gameplay/HackUI.cs | |
| parent | 84f689b91a73e512b035df40bbcf556b008a3b81 (diff) | |
| download | shiftos-c-_theultimatehacker-309f9fe361af7b0a508770951af7c548dfca78ad.tar.gz shiftos-c-_theultimatehacker-309f9fe361af7b0a508770951af7c548dfca78ad.tar.bz2 shiftos-c-_theultimatehacker-309f9fe361af7b0a508770951af7c548dfca78ad.zip | |
Added online Hacker Battles with matchmaking system
It's untested, but in theory it'll all work perfectly.
Diffstat (limited to 'source/WindowsFormsApplication1/Gameplay/HackUI.cs')
| -rw-r--r-- | source/WindowsFormsApplication1/Gameplay/HackUI.cs | 90 |
1 files changed, 88 insertions, 2 deletions
diff --git a/source/WindowsFormsApplication1/Gameplay/HackUI.cs b/source/WindowsFormsApplication1/Gameplay/HackUI.cs index ee36b8f..2d17596 100644 --- a/source/WindowsFormsApplication1/Gameplay/HackUI.cs +++ b/source/WindowsFormsApplication1/Gameplay/HackUI.cs @@ -22,12 +22,24 @@ namespace ShiftOS public event EventHandler OnWin; + private bool InOnlineBattle = false; + private Online.Hacking.NetTransmitter transmitter = null; + private Online.Hacking.NetListener receiver = null; + public HackUI(EnemyHacker enemy) { ThisEnemyHacker = enemy; InitializeComponent(); } + public HackUI(Online.Hacking.NetTransmitter t, Online.Hacking.NetListener l) + { + InOnlineBattle = true; + transmitter = t; + receiver = l; + InitializeComponent(); + } + public Computer ThisPlayerPC = null; private decimal TotalPlayerHP = 0; private EnemyHacker EnemyNet = null; @@ -212,6 +224,11 @@ namespace ShiftOS public void AddModule(Computer newModule) { + if (InOnlineBattle) + { + newModule.Transmitter = transmitter; + transmitter?.send_message(Online.Hacking.NetTransmitter.Messages.PlaceModule, new Online.Hacking.Module { Grade = newModule.Grade, Hostname = newModule.Hostname, HP = newModule.HP, Type = (int)newModule.Type, X = newModule.Left, Y = newModule.Top }); + } pnlyou.Controls.Add(newModule); int hp = newModule.HP; WriteLine($"[Network] Welcome to the network, {newModule.Hostname}!"); @@ -274,6 +291,7 @@ namespace ShiftOS AllPlayerComputers.Remove(newModule); newModule.Dispose(); WriteLine($"[Network] {newModule.Hostname} has gone OFFLINE."); + transmitter?.send_message(Online.Hacking.NetTransmitter.Messages.RemoveModule, newModule.Hostname); }; newModule.Select += (object s, EventArgs e) => { @@ -1078,9 +1096,11 @@ namespace ShiftOS Hacking.RepairTimer.Stop(); //Don't want the player to be able to repair dead modules during a battle! this.TopMost = true; this.WindowState = FormWindowState.Maximized; - //this.TopMost = true; LoadPlayerScreen(); - LoadEnemyScreen(); + if (InOnlineBattle) + LoadOnlineEnemy(); + else + LoadEnemyScreen(); tmrvisualizer.Interval = 10; tmrvisualizer.Start(); } @@ -1532,6 +1552,72 @@ namespace ShiftOS #endregion + #region ONLINE ENEMY + + public void LoadOnlineEnemy() + { + AllEnemyComputers = new List<Computer>(); + tmrenemyhealthdetect.Start(); + //register event handlers + receiver.ModuleHealthSet += Receiver_ModuleHealthSet; + receiver.ModulePlaced += Receiver_ModulePlaced; + receiver.ModuleUpgraded += Receiver_ModuleUpgraded; + receiver.ModuleRemoved += Receiver_ModuleRemoved; + } + + private void Receiver_ModuleRemoved(object sender, Online.Hacking.Events.ModuleRemoved e) + { + Computer c = null; + foreach(var m in AllEnemyComputers) + { + if(m.Hostname == e.new_module) + { + c = m; + } + } + AllEnemyComputers.Remove(c); + c.Dispose(); + } + + private void Receiver_ModuleUpgraded(object sender, Online.Hacking.Events.ModuleUpgraded e) + { + foreach(var m in AllEnemyComputers) + { + if (m.Hostname == e.hostname) + m.Grade = e.grade; + } + } + + private void Receiver_ModulePlaced(object sender, Online.Hacking.Events.ModulePlaced e) + { + var newModule = new Module((SystemType)e.new_module.Type, e.new_module.Grade, e.new_module.Hostname); + newModule.HP = e.new_module.HP; + newModule.X = e.new_module.X; + newModule.Y = e.new_module.Y; + AddEnemyModule(newModule.Deploy()); + } + + private void Receiver_ModuleHealthSet(object sender, Online.Hacking.Events.Health e) + { + var mod = new Computer(); + foreach(var m in AllEnemyComputers) + { + if (m.Hostname == e.host_name) + mod = m; + } + int health_amount = mod.HP - e.health; + if(health_amount > 0) + { + mod.Repair(health_amount); + } + else if(health_amount < 0) + { + mod.LaunchAttack(AttackType.Virus, -health_amount); + } + } + + #endregion + bool playing = true; private void button2_Click(object sender, EventArgs e) |
