Beispiel #1
0
 public PlayerModelWidget()
 {
     m_modelWidget = new ModelWidget
     {
         UseAlphaThreshold = true,
         IsPerspective     = true
     };
     Children.Add(m_modelWidget);
     IsHitTestVisible            = false;
     m_publicCharacterSkinsCache = new CharacterSkinsCache();
     m_characterSkinsCache       = m_publicCharacterSkinsCache;
 }
Beispiel #2
0
        public BestiaryDescriptionScreen()
        {
            XElement node = ContentManager.Get <XElement>("Screens/BestiaryDescriptionScreen");

            LoadContents(this, node);
            m_modelWidget           = Children.Find <ModelWidget>("Model");
            m_nameWidget            = Children.Find <LabelWidget>("Name");
            m_leftButtonWidget      = Children.Find <ButtonWidget>("Left");
            m_rightButtonWidget     = Children.Find <ButtonWidget>("Right");
            m_descriptionWidget     = Children.Find <LabelWidget>("Description");
            m_propertyNames1Widget  = Children.Find <LabelWidget>("PropertyNames1");
            m_propertyValues1Widget = Children.Find <LabelWidget>("PropertyValues1");
            m_propertyNames2Widget  = Children.Find <LabelWidget>("PropertyNames2");
            m_propertyValues2Widget = Children.Find <LabelWidget>("PropertyValues2");
            m_dropsPanel            = Children.Find <ContainerWidget>("Drops");
        }
        public static void SetupBestiaryModelWidget(BestiaryCreatureInfo info, ModelWidget modelWidget, Vector3 offset, bool autoRotate, bool autoAspect)
        {
            modelWidget.Model           = ContentManager.Get <Model>(info.ModelName);
            modelWidget.TextureOverride = ContentManager.Get <Texture2D>(info.TextureOverride);
            Matrix[] absoluteTransforms = new Matrix[modelWidget.Model.Bones.Count];
            modelWidget.Model.CopyAbsoluteBoneTransformsTo(absoluteTransforms);
            BoundingBox boundingBox = modelWidget.Model.CalculateAbsoluteBoundingBox(absoluteTransforms);
            float       x           = MathUtils.Max(boundingBox.Size().X, 1.4f * boundingBox.Size().Y, boundingBox.Size().Z);

            modelWidget.ViewPosition       = new Vector3(boundingBox.Center().X, 1.5f, boundingBox.Center().Z) + 2.6f * MathUtils.Pow(x, 0.75f) * offset;
            modelWidget.ViewTarget         = boundingBox.Center();
            modelWidget.ViewFov            = 0.3f;
            modelWidget.AutoRotationVector = (autoRotate ? new Vector3(0f, MathUtils.Clamp(1.7f / boundingBox.Size().Length(), 0.25f, 1.4f), 0f) : Vector3.Zero);
            if (autoAspect)
            {
                float num = MathUtils.Clamp(boundingBox.Size().XZ.Length() / boundingBox.Size().Y, 1f, 1.5f);
                modelWidget.Size = new Vector2(modelWidget.Size.Y * num, modelWidget.Size.Y);
            }
        }
        public BestiaryScreen()
        {
            XElement node = ContentManager.Get <XElement>("Screens/BestiaryScreen");

            LoadContents(this, node);
            m_creaturesList = Children.Find <ListPanelWidget>("CreaturesList");
            m_creaturesList.ItemWidgetFactory = delegate(object item)
            {
                BestiaryCreatureInfo bestiaryCreatureInfo2 = (BestiaryCreatureInfo)item;
                XElement             node2       = ContentManager.Get <XElement>("Widgets/BestiaryItem");
                ContainerWidget      obj         = (ContainerWidget)Widget.LoadWidget(this, node2, null);
                ModelWidget          modelWidget = obj.Children.Find <ModelWidget>("BestiaryItem.Model");
                SetupBestiaryModelWidget(bestiaryCreatureInfo2, modelWidget, (m_creaturesList.Items.IndexOf(item) % 2 == 0) ? new Vector3(-1f, 0f, -1f) : new Vector3(1f, 0f, -1f), autoRotate: false, autoAspect: false);
                obj.Children.Find <LabelWidget>("BestiaryItem.Text").Text    = bestiaryCreatureInfo2.DisplayName;
                obj.Children.Find <LabelWidget>("BestiaryItem.Details").Text = bestiaryCreatureInfo2.Description;
                return(obj);
            };
            m_creaturesList.ItemClicked += delegate(object item)
            {
                ScreensManager.SwitchScreen("BestiaryDescription", item, m_creaturesList.Items.Cast <BestiaryCreatureInfo>().ToList());
            };
            List <BestiaryCreatureInfo> list = new List <BestiaryCreatureInfo>();

            foreach (ValuesDictionary entitiesValuesDictionary in DatabaseManager.EntitiesValuesDictionaries)
            {
                ValuesDictionary valuesDictionary = DatabaseManager.FindValuesDictionaryForComponent(entitiesValuesDictionary, typeof(ComponentCreature));
                if (valuesDictionary != null)
                {
                    string value = valuesDictionary.GetValue <string>("DisplayName");
                    if (value.StartsWith("[") && value.EndsWith("]"))
                    {
                        string[] lp = value.Substring(1, value.Length - 2).Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
                        value = LanguageControl.GetDatabase("DisplayName", lp[1]);
                    }
                    if (!string.IsNullOrEmpty(value))
                    {
                        int order = -1;
                        ValuesDictionary value2 = entitiesValuesDictionary.GetValue <ValuesDictionary>("CreatureEggData", null);
                        ValuesDictionary value3 = entitiesValuesDictionary.GetValue <ValuesDictionary>("Player", null);
                        if (value2 != null || value3 != null)
                        {
                            if (value2 != null)
                            {
                                int value4 = value2.GetValue <int>("EggTypeIndex");
                                if (value4 < 0)
                                {
                                    continue;
                                }
                                order = value4;
                            }
                            ValuesDictionary valuesDictionary2 = DatabaseManager.FindValuesDictionaryForComponent(entitiesValuesDictionary, typeof(ComponentCreatureModel));
                            ValuesDictionary valuesDictionary3 = DatabaseManager.FindValuesDictionaryForComponent(entitiesValuesDictionary, typeof(ComponentBody));
                            ValuesDictionary valuesDictionary4 = DatabaseManager.FindValuesDictionaryForComponent(entitiesValuesDictionary, typeof(ComponentHealth));
                            ValuesDictionary valuesDictionary5 = DatabaseManager.FindValuesDictionaryForComponent(entitiesValuesDictionary, typeof(ComponentMiner));
                            ValuesDictionary valuesDictionary6 = DatabaseManager.FindValuesDictionaryForComponent(entitiesValuesDictionary, typeof(ComponentLocomotion));
                            ValuesDictionary valuesDictionary7 = DatabaseManager.FindValuesDictionaryForComponent(entitiesValuesDictionary, typeof(ComponentHerdBehavior));
                            ValuesDictionary valuesDictionary8 = DatabaseManager.FindValuesDictionaryForComponent(entitiesValuesDictionary, typeof(ComponentMount));
                            ValuesDictionary valuesDictionary9 = DatabaseManager.FindValuesDictionaryForComponent(entitiesValuesDictionary, typeof(ComponentLoot));
                            string           dy = valuesDictionary.GetValue <string>("Description");
                            if (dy.StartsWith("[") && dy.EndsWith("]"))
                            {
                                string[] lp = dy.Substring(1, dy.Length - 2).Split(new string[] { ":" }, StringSplitOptions.RemoveEmptyEntries);
                                dy = LanguageControl.GetDatabase("Description", lp[1]);
                            }
                            BestiaryCreatureInfo bestiaryCreatureInfo = new BestiaryCreatureInfo
                            {
                                Order            = order,
                                DisplayName      = value,
                                Description      = dy,
                                ModelName        = valuesDictionary2.GetValue <string>("ModelName"),
                                TextureOverride  = valuesDictionary2.GetValue <string>("TextureOverride"),
                                Mass             = valuesDictionary3.GetValue <float>("Mass"),
                                AttackResilience = valuesDictionary4.GetValue <float>("AttackResilience"),
                                AttackPower      = (valuesDictionary5?.GetValue <float>("AttackPower") ?? 0f),
                                MovementSpeed    = MathUtils.Max(valuesDictionary6.GetValue <float>("WalkSpeed"), valuesDictionary6.GetValue <float>("FlySpeed"), valuesDictionary6.GetValue <float>("SwimSpeed")),
                                JumpHeight       = MathUtils.Sqr(valuesDictionary6.GetValue <float>("JumpSpeed")) / 20f,
                                IsHerding        = (valuesDictionary7 != null),
                                CanBeRidden      = (valuesDictionary8 != null),
                                HasSpawnerEgg    = (value2?.GetValue <bool>("ShowEgg") ?? false),
                                Loot             = ((valuesDictionary9 != null) ? ComponentLoot.ParseLootList(valuesDictionary9.GetValue <ValuesDictionary>("Loot")) : new List <ComponentLoot.Loot>())
                            };
                            if (value3 != null && entitiesValuesDictionary.DatabaseObject.Name.ToLower().Contains("female"))
                            {
                                bestiaryCreatureInfo.AttackPower      *= 0.8f;
                                bestiaryCreatureInfo.AttackResilience *= 0.8f;
                                bestiaryCreatureInfo.MovementSpeed    *= 1.03f;
                                bestiaryCreatureInfo.JumpHeight       *= MathUtils.Sqr(1.03f);
                            }
                            list.Add(bestiaryCreatureInfo);
                        }
                    }
                }
            }
            foreach (BestiaryCreatureInfo item in list.OrderBy((BestiaryCreatureInfo ci) => ci.Order))
            {
                m_creaturesList.AddItem(item);
            }
        }