public Items() { I = new Dictionary<string, DescribedProfile>(); XmlDocument File = new XmlDocument(); File.Load("Media\\Profiles\\Items.xml"); XmlElement root = File.DocumentElement; XmlNodeList Items = root.SelectNodes("//items/item"); foreach (XmlNode item in Items) { if (item["type"].InnerText == "DescribedProfile") { DescribedProfile Kriper = new DescribedProfile(); Kriper.DisplayName = item["name"].InnerText; Kriper.Description = item["description"].InnerText; Kriper.MeshName = item["mesh"].InnerText; Kriper.InventoryPictureMaterial = item["inventory_material"].InnerText; Kriper.Mass = int.Parse(item["mass"].InnerText); Kriper.IsPickable = bool.Parse(item["ispickable"].InnerText); Kriper.DisplayNameOffset = Vector3.ZERO; Kriper.DisplayNameOffset.x = float.Parse(item["nameoffsetx"].InnerText); Kriper.DisplayNameOffset.y = float.Parse(item["nameoffsety"].InnerText); Kriper.DisplayNameOffset.z = float.Parse(item["nameoffsetz"].InnerText); Kriper.ProfileName = item["idstring"].InnerText; Kriper.Price = int.Parse(item["price"].InnerText); Kriper.IsContainer = bool.Parse(item["iscontainer"].InnerText); if (Kriper.IsContainer) Kriper.PrizeID = item["prizeid"].InnerText; I.Add(item["idstring"].InnerText, Kriper); } else if (item["type"].InnerText == "ItemSword") { ItemSword Kriper = new ItemSword(); Kriper.DisplayName = item["name"].InnerText; Kriper.Description = item["description"].InnerText; Kriper.MeshName = item["mesh"].InnerText; Kriper.InventoryPictureMaterial = item["inventory_material"].InnerText; Kriper.Mass = int.Parse(item["mass"].InnerText); Kriper.IsPickable = bool.Parse(item["ispickable"].InnerText); Kriper.DisplayNameOffset = Vector3.ZERO; Kriper.DisplayNameOffset.x = float.Parse(item["nameoffsetx"].InnerText); Kriper.DisplayNameOffset.y = float.Parse(item["nameoffsety"].InnerText); Kriper.DisplayNameOffset.z = float.Parse(item["nameoffsetz"].InnerText); Kriper.HandleOffset = Vector3.ZERO; Kriper.HandleOffset.x = float.Parse(item["handleoffsetx"].InnerText); Kriper.HandleOffset.y = float.Parse(item["handleoffsety"].InnerText); Kriper.HandleOffset.z = float.Parse(item["handleoffsetz"].InnerText); Kriper.ProfileName = item["idstring"].InnerText; Kriper.Price = int.Parse(item["price"].InnerText); Kriper.JakoscRzutow = int.Parse(item["jakoscrzutow"].InnerText); Kriper.IloscRzutow = int.Parse(item["iloscrzutow"].InnerText); I.Add(item["idstring"].InnerText, Kriper); } } }
public void EquipSwordToSword(ItemSword value) { SwordEntity = Engine.Singleton.SceneManager.CreateEntity(value.MeshName); Entity.AttachObjectToBone( "Sword", SwordEntity, Vector3.UNIT_Z.GetRotationTo(-Vector3.UNIT_Y), value.HandleOffset); value.IsEquipment = true; value.InUse = true; }
public CharacterDecTree() { // #1 DecTree.FirstSucc resetAnim = new DecTree.FirstSucc( new DecTree.Assert(ch => ch.AnimBlender.CurrentAnimSet == "PickItemDown"), new DecTree.Job(ch => { ch.AnimBlender.ResetAnimSet("PickItemDown"); ch.AnimBlender.SetAnimSet("PickItemDown"); ch.Velocity = Vector3.ZERO; ch.TurnTo(ch.PickingTarget.Position); return(true); })); // #2 Func <Character, bool> animBendDown = ( ch => ch.AnimBlender.AnimSetPhase("PickItemDown") > 0.5f ); DecTree.FirstSucc bendDown = new DecTree.FirstSucc( new DecTree.Assert(animBendDown), new DecTree.FirstFail( new DecTree.Assert(ch => ch.PickingTarget.Exists), // #2.1 new DecTree.Job(animBendDown) ) ); // #3 DecTree.FirstSucc pickItem = new DecTree.FirstSucc( new DecTree.Assert(ch => ch.PickingTarget == null || !ch.PickingTarget.Exists), new DecTree.Job(ch => { ch.Inventory.Add(ch.PickingTarget.Profile.Clone()); Engine.Singleton.ObjectManager.Destroy(ch.PickingTarget); ch.PickingTarget = null; return(true); // #3.1 })); // #4 DecTree.Job bendUp = new DecTree.Job( ch => ch.AnimBlender.AnimSetPhase("PickItemDown") > 0.99f ); PickItemDownSeq = new DecTree.FirstFail( resetAnim, bendDown, pickItem, bendUp); DecTree.Job cleanUp = new DecTree.Job(ch => { ch.PickItemOrder = false; ch.Contact = null; return(true); }); DecTree.FirstFail pickItemNode = new DecTree.FirstFail( new DecTree.Assert(ch => ch.PickItemOrder), new DecTree.FirstSucc(PickItemDownSeq, cleanUp), // #1 cleanUp); // #2 TurnJob = new DecTree.Job(ch => { if (ch.TurnDelta != 0) { Quaternion rotation = Quaternion.IDENTITY; rotation.FromAngleAxis(new Degree(ch.TurnDelta), Vector3.UNIT_Y); ch.Orientation *= rotation; ch.TurnDelta = 0; } return(true); }); DecTree.FirstFail walkNode = new DecTree.FirstFail( new DecTree.Assert(ch => ch.MoveOrder), new DecTree.Job(ch => { ch.Velocity = ch.Orientation * Vector3.UNIT_Z * ch.Profile.WalkSpeed; if (ch.RunOrder) { ch.AnimBlender.SetAnimSet("Run"); } else if (ch.Sword != null) { if (ch.Sword.InUse) { ch.AnimBlender.SetAnimSet("WalkSword"); } else { ch.AnimBlender.SetAnimSet("Walk"); } } else { ch.AnimBlender.SetAnimSet("Walk"); } return(true); }), TurnJob); DecTree.FirstFail walkNodeBack = new DecTree.FirstFail( new DecTree.Assert(ch => ch.MoveOrderBack), new DecTree.Job(ch => { ch.Velocity = -(ch.Orientation * Vector3.UNIT_Z * ch.Profile.WalkSpeed); ch.AnimBlender.SetAnimSet("WalkBack"); return(true); }), TurnJob); DecTree.FirstFail idleNode = new DecTree.FirstFail( new DecTree.Job(ch => { ch.TalkPerm = true; ch.InventoryPerm = true; ch.Velocity = Vector3.ZERO; ch.AnimBlender.SetAnimSet("Idle"); return(true); }), TurnJob); DecTree.FirstFail followPathNode = new DecTree.FirstFail( new DecTree.Assert(ch => ch.FollowPathOrder), new DecTree.Job(ch => { if (Op2D.Dist(ch.Position, ch.WalkPath[0]) < 0.3f) { ch.WalkPath.RemoveAt(0); } if (ch.obejdz) { //ch.WalkPath.Insert(0, ch.Position + new Vector3(1, 0, 0)); ch.obejdz = false; Engine.Singleton.CurrentLevel.navMesh.AStar(ch.Position + new Vector3(1, 0, 0), ch.Activities.Activities[ch.Activities.Index].v3); if (Engine.Singleton.CurrentLevel.navMesh.TriPath.Count > 1) { Engine.Singleton.CurrentLevel.navMesh.GetPortals(); ch.WalkPath = Engine.Singleton.CurrentLevel.navMesh.Funnel(); } } if (ch.WalkPath.Count == 0) { ch.FollowPathOrder = false; if (ch.Activities.InProgress && ch.Activities.Activities[ch.Activities.Index].Type == ActivityType.WALK) { ch.Activities.EndActivity(); } return(true); } else if (ch.Contacts.Count > 0) { Engine.Singleton.CurrentLevel.navMesh.AStar(ch.Position, ch.Activities.Activities[ch.Activities.Index].v3); if (Engine.Singleton.CurrentLevel.navMesh.TriPath.Count > 1) { Engine.Singleton.CurrentLevel.navMesh.GetPortals(); ch.WalkPath = Engine.Singleton.CurrentLevel.navMesh.Funnel(); ch.FollowPathOrder = true; ch.Activities.InProgress = true; } } else { ch.Orientation = Quaternion.Slerp( 0.2f, ch.Orientation, Vector3.UNIT_Z.GetRotationTo( (Op2D.XZ * (ch.WalkPath[0] - ch.Position)).NormalisedCopy), true ); ch.Velocity = ch.Orientation * Vector3.UNIT_Z * ch.Profile.WalkSpeed; ch.AnimBlender.SetAnimSet("Walk"); } return(false); } )); // get sword DecTree.FirstSucc resetAnimGetSword = new DecTree.FirstSucc( new DecTree.Assert(ch => ch.AnimBlender.CurrentAnimSet == "GetSword"), new DecTree.Job(ch => { ch.Velocity = Vector3.ZERO; ch.AnimBlender.ResetAnimSet("GetSword"); ch.AnimBlender.SetAnimSet("GetSword"); return(true); })); Func <Character, bool> animGetSword1 = (ch => ch.AnimBlender.AnimSetPhase("GetSword") > 0.5f); DecTree.FirstSucc getSwordWait1 = new DecTree.FirstSucc( new DecTree.Assert(animGetSword1), new DecTree.FirstFail( new DecTree.Assert(ch => ch.GetSwordOrder), new DecTree.Job(animGetSword1) ) ); Func <Character, bool> animGetSword2 = (ch => ch.AnimBlender.AnimSetPhase("GetSword") > 0.99f); DecTree.FirstSucc getSwordWait2 = new DecTree.FirstSucc( new DecTree.Assert(animGetSword2), new DecTree.FirstFail( new DecTree.Assert(ch => ch.GetSwordOrder), new DecTree.Job(animGetSword2) ) ); DecTree.FirstSucc getSword = new DecTree.FirstSucc( new DecTree.Job(ch => { ItemSword sword = ch.Sword; ch.UnequipSword(); ch.EquipSwordToSword(sword); return(true); })); GetSwordSeq = new DecTree.FirstFail( resetAnimGetSword, getSwordWait1, getSword, getSwordWait2 ); DecTree.Job cleanUpGetSword = new DecTree.Job(ch => { ch.GetSwordOrder = false; return(true); }); DecTree.FirstFail getSwordNode = new DecTree.FirstFail( new DecTree.Assert(ch => ch.GetSwordOrder), new DecTree.FirstSucc(GetSwordSeq, cleanUpGetSword), cleanUpGetSword); // hide sword DecTree.FirstSucc resetAnimHideSword = new DecTree.FirstSucc( new DecTree.Assert(ch => ch.AnimBlender.CurrentAnimSet == "HideSword"), new DecTree.Job(ch => { ch.Velocity = Vector3.ZERO; ch.AnimBlender.ResetAnimSet("HideSword"); ch.AnimBlender.SetAnimSet("HideSword"); return(true); })); Func <Character, bool> animHideSword1 = (ch => ch.AnimBlender.AnimSetPhase("HideSword") > 0.5f); DecTree.FirstSucc hideSwordWait1 = new DecTree.FirstSucc( new DecTree.Assert(animHideSword1), new DecTree.FirstFail( new DecTree.Assert(ch => ch.HideSwordOrder), new DecTree.Job(animHideSword1) ) ); Func <Character, bool> animHideSword2 = (ch => ch.AnimBlender.AnimSetPhase("HideSword") > 0.99f); DecTree.FirstSucc hideSwordWait2 = new DecTree.FirstSucc( new DecTree.Assert(animHideSword2), new DecTree.FirstFail( new DecTree.Assert(ch => ch.HideSwordOrder), new DecTree.Job(animHideSword2) ) ); DecTree.FirstSucc hideSword = new DecTree.FirstSucc( new DecTree.Job(ch => { ItemSword sword = ch.Sword; ch.UnequipSword(); ch.EquipSwordToLongswordSheath(sword); return(true); })); HideSwordSeq = new DecTree.FirstFail( resetAnimHideSword, hideSwordWait1, hideSword, hideSwordWait2 ); DecTree.Job cleanUpHideSword = new DecTree.Job(ch => { ch.HideSwordOrder = false; return(true); }); DecTree.FirstFail hideSwordNode = new DecTree.FirstFail( new DecTree.Assert(ch => ch.HideSwordOrder), new DecTree.FirstSucc(HideSwordSeq, cleanUpHideSword), cleanUpHideSword); //////////////////////////////////////////////////////////////////////////////////////////////// // go left DecTree.FirstFail go_left = new DecTree.FirstFail( new DecTree.Assert(ch => ch.MoveLeftOrder), new DecTree.Job(ch => { Quaternion orient = Quaternion.IDENTITY; orient.FromAngleAxis(new Degree(90), Vector3.UNIT_Y); ch.Velocity = ch.Orientation * orient * Vector3.UNIT_Z * ch.Profile.WalkSpeed; ch.AnimBlender.SetAnimSet("Idle"); // ### ANIMACJA CHODZENIA! return(true); }), TurnJob); DecTree.FirstFail go_right = new DecTree.FirstFail( new DecTree.Assert(ch => ch.MoveRightOrder), new DecTree.Job(ch => { Quaternion orient = Quaternion.IDENTITY; orient.FromAngleAxis(new Degree(-90), Vector3.UNIT_Y); ch.Velocity = ch.Orientation * orient * Vector3.UNIT_Z * ch.Profile.WalkSpeed; ch.AnimBlender.SetAnimSet("Idle"); // ### ANIMACJA CHODZENIA! return(true); }), TurnJob); DecTree.FirstSucc resetAnimAttack = new DecTree.FirstSucc( new DecTree.Assert(ch => ch.AnimBlender.CurrentAnimSet == "GetSword"), new DecTree.Job(ch => { ch.AnimBlender.ResetAnimSet("GetSword"); ch.AnimBlender.SetAnimSet("GetSword"); Engine.Singleton.SoundManager.PlaySound("Other/haa.mp3"); return(true); })); // #2 Func <Character, bool> animAttack = ( ch => ch.AnimBlender.AnimSetPhase("GetSword") > 0.99f ); DecTree.FirstSucc AnimAttack = new DecTree.FirstSucc( new DecTree.Assert(animAttack), new DecTree.FirstFail( new DecTree.Job(animAttack) ) ); // #4 AttackSeq = new DecTree.FirstFail( resetAnimAttack, AnimAttack); DecTree.Job cleanUpA = new DecTree.Job(ch => { ch.AttackOrder = false; Atakowanie(); return(true); }); DecTree.FirstFail AttackNode = new DecTree.FirstFail( new DecTree.Assert(ch => ch.AttackOrder), new DecTree.FirstSucc(AttackSeq, cleanUpA), // #1 cleanUpA); Children.Add(getSwordNode); Children.Add(hideSwordNode); Children.Add(walkNodeBack); Children.Add(go_left); Children.Add(go_right); Children.Add(AttackNode); Children.Add(pickItemNode); Children.Add(followPathNode); Children.Add(walkNode); Children.Add(idleNode); }
public Items() { I = new Dictionary <string, DescribedProfile>(); XmlDocument File = new XmlDocument(); File.Load("Media\\Profiles\\Items.xml"); XmlElement root = File.DocumentElement; XmlNodeList Items = root.SelectNodes("//items/item"); foreach (XmlNode item in Items) { if (item["type"].InnerText == "DescribedProfile") { DescribedProfile Kriper = new DescribedProfile(); Kriper.DisplayName = item["name"].InnerText; Kriper.Description = item["description"].InnerText; Kriper.MeshName = item["mesh"].InnerText; Kriper.InventoryPictureMaterial = item["inventory_material"].InnerText; Kriper.Mass = int.Parse(item["mass"].InnerText); Kriper.IsPickable = bool.Parse(item["ispickable"].InnerText); Kriper.DisplayNameOffset = Vector3.ZERO; Kriper.DisplayNameOffset.x = float.Parse(item["nameoffsetx"].InnerText); Kriper.DisplayNameOffset.y = float.Parse(item["nameoffsety"].InnerText); Kriper.DisplayNameOffset.z = float.Parse(item["nameoffsetz"].InnerText); Kriper.ProfileName = item["idstring"].InnerText; Kriper.Price = int.Parse(item["price"].InnerText); Kriper.IsContainer = bool.Parse(item["iscontainer"].InnerText); if (Kriper.IsContainer) { Kriper.PrizeID = item["prizeid"].InnerText; } I.Add(item["idstring"].InnerText, Kriper); } else if (item["type"].InnerText == "ItemSword") { ItemSword Kriper = new ItemSword(); Kriper.DisplayName = item["name"].InnerText; Kriper.Description = item["description"].InnerText; Kriper.MeshName = item["mesh"].InnerText; Kriper.InventoryPictureMaterial = item["inventory_material"].InnerText; Kriper.Mass = int.Parse(item["mass"].InnerText); Kriper.IsPickable = bool.Parse(item["ispickable"].InnerText); Kriper.DisplayNameOffset = Vector3.ZERO; Kriper.DisplayNameOffset.x = float.Parse(item["nameoffsetx"].InnerText); Kriper.DisplayNameOffset.y = float.Parse(item["nameoffsety"].InnerText); Kriper.DisplayNameOffset.z = float.Parse(item["nameoffsetz"].InnerText); Kriper.HandleOffset = Vector3.ZERO; Kriper.HandleOffset.x = float.Parse(item["handleoffsetx"].InnerText); Kriper.HandleOffset.y = float.Parse(item["handleoffsety"].InnerText); Kriper.HandleOffset.z = float.Parse(item["handleoffsetz"].InnerText); Kriper.ProfileName = item["idstring"].InnerText; Kriper.Price = int.Parse(item["price"].InnerText); Kriper.JakoscRzutow = int.Parse(item["jakoscrzutow"].InnerText); Kriper.IloscRzutow = int.Parse(item["iloscrzutow"].InnerText); I.Add(item["idstring"].InnerText, Kriper); } } }