[Rpgworldmodel-commits] SF.net SVN: rpgworldmodel: [18] src/RPGWorldModel.Abstracts
Status: Inactive
Brought to you by:
deadwood_pl
From: <dea...@us...> - 2006-07-15 16:39:18
|
Revision: 18 Author: deadwood_pl Date: 2006-07-15 09:39:03 -0700 (Sat, 15 Jul 2006) ViewCVS: http://svn.sourceforge.net/rpgworldmodel/?rev=18&view=rev Log Message: ----------- Support for unequipping entities. Modified Paths: -------------- src/RPGWorldModel.Abstracts/Animal.cs src/RPGWorldModel.Abstracts/AnimatedEntity.cs src/RPGWorldModel.Abstracts/EquipmentSlot.cs src/RPGWorldModel.Abstracts/Humanoid.cs src/RPGWorldModel.Abstracts/IEquip.cs src/test_applications/tester/Form1.Designer.cs src/test_applications/tester/Form1.cs Modified: src/RPGWorldModel.Abstracts/Animal.cs =================================================================== --- src/RPGWorldModel.Abstracts/Animal.cs 2006-07-15 13:38:17 UTC (rev 17) +++ src/RPGWorldModel.Abstracts/Animal.cs 2006-07-15 16:39:03 UTC (rev 18) @@ -32,6 +32,14 @@ return response; } + public override UnEquipResponse UnEquip(UnEquipRequest request) + { + // Animals by default have no equip abilities + UnEquipResponse response = new UnEquipResponse(); + response.Status = UnEquipStatus.NotUnEquippedNotAbleToUnEquipAnyEntities; + return response; + } + #endregion } Modified: src/RPGWorldModel.Abstracts/AnimatedEntity.cs =================================================================== --- src/RPGWorldModel.Abstracts/AnimatedEntity.cs 2006-07-15 13:38:17 UTC (rev 17) +++ src/RPGWorldModel.Abstracts/AnimatedEntity.cs 2006-07-15 16:39:03 UTC (rev 18) @@ -23,6 +23,8 @@ public abstract EquipResponse Equip(EquipRequest request); + public abstract UnEquipResponse UnEquip(UnEquipRequest request); + public abstract void InitializeEquip(); #endregion Modified: src/RPGWorldModel.Abstracts/EquipmentSlot.cs =================================================================== --- src/RPGWorldModel.Abstracts/EquipmentSlot.cs 2006-07-15 13:38:17 UTC (rev 17) +++ src/RPGWorldModel.Abstracts/EquipmentSlot.cs 2006-07-15 16:39:03 UTC (rev 18) @@ -29,6 +29,11 @@ equippedEntities.Remove(equipable); } + public bool ContainsEquipable(IEquipable equipable) + { + return equippedEntities.Contains(equipable); + } + public abstract string SlotName { get; Modified: src/RPGWorldModel.Abstracts/Humanoid.cs =================================================================== --- src/RPGWorldModel.Abstracts/Humanoid.cs 2006-07-15 13:38:17 UTC (rev 17) +++ src/RPGWorldModel.Abstracts/Humanoid.cs 2006-07-15 16:39:03 UTC (rev 18) @@ -140,6 +140,35 @@ return response; } + public override UnEquipResponse UnEquip(UnEquipRequest request) + { + UnEquipResponse response = new UnEquipResponse(); + response.Status = UnEquipStatus.Undefined; + + EquipmentSlotList affectedSlots = new EquipmentSlotList(); + + foreach (EquipmentSlot slot in equipmentSlots) + { + if (slot.ContainsEquipable(request.RequestedEquipable)) + affectedSlots.Add(slot); + } + + if (affectedSlots.Count == 0) + { + // Not equipped + response.Status = UnEquipStatus.NotUnEquippedEquipableNotEquipped; + } + else + { + // Remove the equipable + foreach(EquipmentSlot slot in affectedSlots) + slot.RemoveEquipable(request.RequestedEquipable); + + response.Status = UnEquipStatus.UnEquipped; + } + + return response; + } } public abstract class HumanoidAdvanced : Humanoid Modified: src/RPGWorldModel.Abstracts/IEquip.cs =================================================================== --- src/RPGWorldModel.Abstracts/IEquip.cs 2006-07-15 13:38:17 UTC (rev 17) +++ src/RPGWorldModel.Abstracts/IEquip.cs 2006-07-15 16:39:03 UTC (rev 18) @@ -15,6 +15,9 @@ // Equip an entity EquipResponse Equip(EquipRequest request); + // UnEquip an entity + UnEquipResponse UnEquip(UnEquipRequest request); + // Initialized equip interface implementation void InitializeEquip(); } @@ -37,6 +40,16 @@ } } + public class UnEquipRequest + { + private IEquipable requestedEquipable = null; + public IEquipable RequestedEquipable + { + get { return requestedEquipable; } + set { requestedEquipable = value; } + } + } + /// <summary> /// A response to equip request /// </summary> @@ -59,6 +72,17 @@ } } + public class UnEquipResponse + { + private UnEquipStatus status = UnEquipStatus.Undefined; + + public UnEquipStatus Status + { + get { return status; } + set { status = value; } + } + } + public enum EquipStatus { Undefined, @@ -70,4 +94,12 @@ NotEquippedSlotNotPartOfEntity, NotEquippedNotAbleToEquipToAdditionalSlots } + + public enum UnEquipStatus + { + Undefined, + UnEquipped, + NotUnEquippedEquipableNotEquipped, + NotUnEquippedNotAbleToUnEquipAnyEntities + } } Modified: src/test_applications/tester/Form1.Designer.cs =================================================================== --- src/test_applications/tester/Form1.Designer.cs 2006-07-15 13:38:17 UTC (rev 17) +++ src/test_applications/tester/Form1.Designer.cs 2006-07-15 16:39:03 UTC (rev 18) @@ -59,6 +59,7 @@ this.btnItemRapair = new System.Windows.Forms.Button(); this.btnItemDamage = new System.Windows.Forms.Button(); this.tabPage3 = new System.Windows.Forms.TabPage(); + this.btnUnEquip = new System.Windows.Forms.Button(); this.label4 = new System.Windows.Forms.Label(); this.btnEquipaSelected = new System.Windows.Forms.Button(); this.lvAvailableItems = new System.Windows.Forms.ListView(); @@ -66,6 +67,7 @@ this.btnHumanCreate = new System.Windows.Forms.Button(); this.pictureBox1 = new System.Windows.Forms.PictureBox(); this.errorProvider1 = new System.Windows.Forms.ErrorProvider(this.components); + this.label5 = new System.Windows.Forms.Label(); this.tabControl1.SuspendLayout(); this.tabPage1.SuspendLayout(); this.tabPage2.SuspendLayout(); @@ -343,6 +345,8 @@ // // tabPage3 // + this.tabPage3.Controls.Add(this.label5); + this.tabPage3.Controls.Add(this.btnUnEquip); this.tabPage3.Controls.Add(this.label4); this.tabPage3.Controls.Add(this.btnEquipaSelected); this.tabPage3.Controls.Add(this.lvAvailableItems); @@ -356,6 +360,16 @@ this.tabPage3.Text = "Equip"; this.tabPage3.UseVisualStyleBackColor = true; // + // btnUnEquip + // + this.btnUnEquip.Location = new System.Drawing.Point(419, 342); + this.btnUnEquip.Name = "btnUnEquip"; + this.btnUnEquip.Size = new System.Drawing.Size(75, 23); + this.btnUnEquip.TabIndex = 6; + this.btnUnEquip.Text = "UnEquip"; + this.btnUnEquip.UseVisualStyleBackColor = true; + this.btnUnEquip.Click += new System.EventHandler(this.btnUnEquip_Click); + // // label4 // this.label4.AutoSize = true; @@ -419,6 +433,16 @@ // this.errorProvider1.ContainerControl = this; // + // label5 + // + this.label5.AutoSize = true; + this.label5.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(238))); + this.label5.Location = new System.Drawing.Point(319, 312); + this.label5.Name = "label5"; + this.label5.Size = new System.Drawing.Size(157, 13); + this.label5.TabIndex = 7; + this.label5.Text = "Select item, click UnEquip"; + // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); @@ -480,6 +504,8 @@ private System.Windows.Forms.ListView lvAvailableItems; private System.Windows.Forms.Button btnEquipaSelected; private System.Windows.Forms.Label label4; + private System.Windows.Forms.Button btnUnEquip; + private System.Windows.Forms.Label label5; } } Modified: src/test_applications/tester/Form1.cs =================================================================== --- src/test_applications/tester/Form1.cs 2006-07-15 13:38:17 UTC (rev 17) +++ src/test_applications/tester/Form1.cs 2006-07-15 16:39:03 UTC (rev 18) @@ -543,11 +543,16 @@ if (equipTest == null) return; + EquipmentSlotTreeNode slotNode = tvEquipmentSlots.SelectedNode as EquipmentSlotTreeNode; + + if (slotNode == null) + return; + IEquipable selectedEquipable = (lvAvailableItems.SelectedItems[0] as EquipableListViewItem).Equipable; - + EquipmentSlot slot = - (tvEquipmentSlots.SelectedNode as EquipmentSlotTreeNode).Slot; + slotNode.Slot; EquipRequest request = new EquipRequest(); request.RequestedEquipable = selectedEquipable; @@ -575,6 +580,39 @@ refreshEquip(); } + + private void btnUnEquip_Click(object sender, EventArgs e) + { + if (tvEquipmentSlots.SelectedNode == null) + return; + + if (equipTest == null) + return; + + EquipableTreeNode equipableNode = (tvEquipmentSlots.SelectedNode as EquipableTreeNode); + + if (equipableNode == null) + return; + + UnEquipRequest request = new UnEquipRequest(); + request.RequestedEquipable = equipableNode.Equipable; + + UnEquipResponse response = equipTest.UnEquip(request); + + if (response.Status == UnEquipStatus.NotUnEquippedEquipableNotEquipped) + { + MessageBox.Show("Entity is not equipped"); + } + + if (response.Status == UnEquipStatus.UnEquipped) + { + // add to available + availableEquipable.Add(request.RequestedEquipable); + } + + refreshEquip(); + + } } public class EquipmentSlotTreeNode : TreeNode @@ -600,10 +638,31 @@ this.Text = slot.SlotName; foreach (IEquipable equipable in Slot.EquippedEntities) - this.Nodes.Add((equipable as INamedEntity).Name); + this.Nodes.Add(new EquipableTreeNode (equipable)); } } + public class EquipableTreeNode : TreeNode + { + private IEquipable equipable = null; + + public IEquipable Equipable + { + get { return equipable; } + set { equipable = value; } + } + + public EquipableTreeNode(IEquipable equipable) + { + if (equipable == null) + throw new ArgumentException("equipable must not be null", "equipable"); + + Equipable = equipable; + + this.Text = (equipable as INamedEntity).Name; + } + } + public class EquipableListViewItem : ListViewItem { private IEquipable equipable = null; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |