public Character(CharacterProfile profile) { Profile = profile.Clone(); _Orientation = Quaternion.IDENTITY; Entity = Engine.Singleton.SceneManager.CreateEntity(Profile.MeshName); Node = Engine.Singleton.SceneManager.RootSceneNode.CreateChildSceneNode(); Node.AttachObject(Entity); Vector3 scaledSize = Entity.BoundingBox.HalfSize * Profile.BodyScaleFactor; ConvexCollision collision = new MogreNewt.CollisionPrimitives.Capsule( Engine.Singleton.NewtonWorld, System.Math.Min(scaledSize.x, scaledSize.z), scaledSize.y * 2, Vector3.UNIT_X.GetRotationTo(Vector3.UNIT_Y), Engine.Singleton.GetUniqueBodyId()); Vector3 inertia, offset; collision.CalculateInertialMatrix(out inertia, out offset); inertia *= Profile.BodyMass; Body = new Body(Engine.Singleton.NewtonWorld, collision, true); Body.AttachNode(Node); Body.SetMassMatrix(Profile.BodyMass, inertia); Body.AutoSleep = false; Body.Transformed += BodyTransformCallback; Body.ForceCallback += BodyForceCallback; Body.UserData = this; Body.MaterialGroupID = Engine.Singleton.MaterialManager.CharacterMaterialID; Joint upVector = new MogreNewt.BasicJoints.UpVector( Engine.Singleton.NewtonWorld, Body, Vector3.UNIT_Y); collision.Dispose(); SensorNode = Node.CreateChildSceneNode(new Vector3(0, 0, System.Math.Min(scaledSize.x, scaledSize.z) * 1.5f)); collision = new MogreNewt.CollisionPrimitives.Cylinder( Engine.Singleton.NewtonWorld, System.Math.Min(scaledSize.x, scaledSize.z) * 1.5f, scaledSize.y * 1, Vector3.UNIT_X.GetRotationTo(Vector3.UNIT_Y), Engine.Singleton.GetUniqueBodyId()); ObjectSensor = new Body(Engine.Singleton.NewtonWorld, collision, true); ObjectSensor.SetMassMatrix(1, new Vector3(1, 1, 1)); ObjectSensor.UserData = this; ObjectSensor.MaterialGroupID = Engine.Singleton.MaterialManager.CharacterSensorMaterialID; Contacts = new List <GameObject>(); Inventory = new List <DescribedProfile>(); Inventory = Profile.Inventory; AnimBlender = new CharacterAnimBlender(); AnimBlender.SetEntity(Entity); ActiveQuests = new QuestManager(); _Statistics = Profile.Statistics.statistics_Clone(); FriendlyType = Profile.FriendlyType; State = Enemy.StateTypes.IDLE; DropExp = 0; ProfName = Profile.ProfileName; if (Profile.DialogRoot != null && Profile.DialogRoot != "") { TalkRoot = Conversations.D[Profile.DialogRoot].Reactions.Values.ElementAt(0); } Activities = new ActivityManager(); Waiting = false; }
public Enemy(CharacterProfile profile, bool czyPojemnik, float zasiegWzr, float zasiegOgl) { Profile = profile.Clone(); _Orientation = Quaternion.IDENTITY; Entity = Engine.Singleton.SceneManager.CreateEntity(Profile.MeshName); Node = Engine.Singleton.SceneManager.RootSceneNode.CreateChildSceneNode(); Node.AttachObject(Entity); Vector3 scaledSize = Entity.BoundingBox.HalfSize * Profile.BodyScaleFactor; ConvexCollision collision = new MogreNewt.CollisionPrimitives.ConvexHull(Engine.Singleton.NewtonWorld, Node, Quaternion.IDENTITY, 0.1f, Engine.Singleton.GetUniqueBodyId()); Vector3 inertia, offset; collision.CalculateInertialMatrix(out inertia, out offset); inertia *= Profile.BodyMass; Body = new Body(Engine.Singleton.NewtonWorld, collision, true); Body.AttachNode(Node); Body.SetMassMatrix(Profile.BodyMass, inertia); Body.AutoSleep = false; Body.Transformed += BodyTransformCallback; Body.ForceCallback += BodyForceCallback; Body.UserData = this; Body.MaterialGroupID = Engine.Singleton.MaterialManager.EnemyMaterialID; Joint upVector = new MogreNewt.BasicJoints.UpVector( Engine.Singleton.NewtonWorld, Body, Vector3.UNIT_Y); collision.Dispose(); isContainer = czyPojemnik; isSeen = false; isReachable = false; _ZasiegWzroku = zasiegWzr; _ZasiegOgolny = zasiegOgl; _Statistics = Profile.Statistics.statistics_Clone(); State = StateTypes.IDLE; //DROPPRIZE KUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA if (Profile.DropPrizeID == "") { Profile.DropPrizeID = "pPusty"; } DropPrize = PrizeManager.P[Profile.DropPrizeID].prize_Clone(); List <DescribedProfile> lista_tym = new List <DescribedProfile>(); List <DescribedProfile> lista_tym2 = new List <DescribedProfile>(DropPrize.ItemsList); if (DropPrize.ItemsList.Count > 2) { for (int i = 0; i < 2; i++) { int Los = Engine.Singleton.Random.Next(lista_tym2.Count); lista_tym.Add(lista_tym2[Los]); lista_tym2.RemoveAt(Los); DropPrize.ItemsList = new List <DescribedProfile>(lista_tym); } } else { DropPrize.ItemsList = new List <DescribedProfile>(DropPrize.ItemsList); } DropPrize.AmountGold = Engine.Singleton.Random.Next(DropPrize.AmountGold / 2, DropPrize.AmountGold + 1); DropExp = DropPrize.AmountExp; //PO DROPPRIZIE KUFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA walkAnim = Entity.GetAnimationState("WALK"); idleAnim = Entity.GetAnimationState("IDLE"); attackAnim = Entity.GetAnimationState("ATTACK"); deadAnim = Entity.GetAnimationState("DEAD"); //Animation("IdleLegs").Enabled = true; //Animation("IdleLegs").Loop = true; FriendlyType = Profile.FriendlyType; ProfName = Profile.ProfileName; }