Example #1
0
        public void PrintResource(IResourceObject resourceObject)
        {
            Console.WriteLine("===");
            foreach (var stateValuePair in resourceObject.State)
            {
                Console.WriteLine("-> " + stateValuePair.Value.Name + " => " + stateValuePair.Value.Value);
            }

            if (resourceObject.Embedded.Count > 0)
            {
                Console.WriteLine("Embedded: ");
                foreach (var emb in resourceObject.Embedded)
                {
                    Console.WriteLine("-> " + emb.Key);

                    foreach (var value in emb.Value)
                    {
                        foreach (var stateValuePair in value.State)
                        {
                            Console.WriteLine(stateValuePair.Value.Name + " => " + stateValuePair.Value.Value);
                        }
                    }
                }
            }
            Console.WriteLine("===");
        }
Example #2
0
        /// <summary>
        /// Removes the given <paramref name="obj"/> from
        /// the <see cref="ResourceGrid"/>.
        /// </summary>
        /// <param name="obj">Object to remove.</param>
        public IResourceObject RemoveObject(IResourceObject obj)
        {
            if (obj == null)
            {
                throw new ArgumentNullException(nameof(obj));
            }

            for (int y = 0; y < ResourceGrid.GetLength(1); y++)
            {
                for (int x = 0; x < ResourceGrid.GetLength(0); x++)
                {
                    var objInGrid = ResourceGrid[x, y];
                    if (objInGrid == obj)
                    {
                        if (objInGrid is IConnectable connectableObj)
                        {
                            // disconnect all ports
                            connectableObj.Top.DisconnectFromPort();
                            connectableObj.Right.DisconnectFromPort();
                            connectableObj.Bottom.DisconnectFromPort();
                            connectableObj.Left.DisconnectFromPort();
                        }

                        ResourceGrid[x, y] = null;
                        return(objInGrid);
                    }
                }
            }

            throw new ArgumentException("Given object not in the grid");
        }
        public async Task <object> MaterializeResourceObject(IResourceObject resourceObject, CancellationToken cancellationToken)
        {
            var registration = _registry.GetRegistrationForResourceTypeName(resourceObject.Type);

            var relationshipsToInclude = new List <ResourceTypeRelationship>();

            if (resourceObject.Relationships != null)
            {
                relationshipsToInclude.AddRange(
                    resourceObject.Relationships
                    .Select(relationshipObject => registration.GetFieldByName(relationshipObject.Key))
                    .OfType <ResourceTypeRelationship>());
            }


            var material = await GetExistingRecord(registration, resourceObject.Id, relationshipsToInclude.ToArray(), cancellationToken);

            if (material == null)
            {
                material = Activator.CreateInstance(registration.Type);
                await SetIdForNewResource(resourceObject, material, registration);

                _dbContext.Set(registration.Type).Add(material);
            }

            await MergeFieldsIntoProperties(resourceObject, material, registration, cancellationToken);

            return(material);
        }
        /// <summary>私有构造函数</summary>
        /// <param name="resourceObject"></param>
        /// <param name="maxResource"></param>
        private PoolingManagement(IResourceObject <T> resourceObject, int maxResource)
        {
            this.IResourceObject = resourceObject;

            PoolingManagement <T> .maxResource = maxResource;

            messages = new Dictionary <long, ResourceWatcher <T> >();
        }
Example #5
0
 /// <summary>
 /// Allows implementers to control how a new resource's ID should be set.
 /// </summary>
 protected virtual Task SetIdForNewResource(IResourceObject resourceObject, object newObject, IResourceTypeRegistration typeRegistration)
 {
     if (resourceObject.Id != null)
     {
         typeRegistration.IdProperty.SetValue(newObject, Convert.ChangeType(resourceObject.Id, typeRegistration.IdProperty.PropertyType));
     }
     return(Task.FromResult(0));
 }
Example #6
0
        public ResourceObjectEventArgs(IResourceObject resourceobject)
        {
            if (resourceobject == null)
            {
                throw new ArgumentNullException("resourceobject");
            }

            _resourceobject = resourceobject;
        }
Example #7
0
        public override bool Equals(object obj)
        {
            IResourceObject other = obj as IResourceObject;

            if (other == null)
            {
                return(false);
            }

            return(Resource.Id.Equals(other.Resource.Id));
        }
Example #8
0
        ///<summary>
        ///Compares the current instance with another object of the same type.
        ///</summary>
        ///
        ///<returns>
        ///A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: Value Meaning Less than zero This instance is less than obj. Zero This instance is equal to obj. Greater than zero This instance is greater than obj.
        ///</returns>
        ///
        ///<param name="obj">An object to compare with this instance. </param>
        ///<exception cref="T:System.ArgumentException">obj is not the same type as this instance. </exception><filterpriority>2</filterpriority>
        public int CompareTo(object obj)
        {
            IResourceObject other = obj as IResourceObject;

            if (other == null)
            {
                return(-1);
            }

            return(Resource.Id.CompareTo(other.Resource.Id));
        }
        protected override Task SetIdForNewResource(IResourceObject resourceObject, object newObject, IResourceTypeRegistration typeRegistration)
        {
            // This is to facilitate testing creation of a resource with a server-provided ID
            if (typeRegistration.Type == typeof(Post) && String.IsNullOrEmpty(resourceObject.Id))
            {
                ((Post)newObject).Id = "230";
                return(Task.FromResult(0));
            }

            return(base.SetIdForNewResource(resourceObject, newObject, typeRegistration));
        }
Example #10
0
 void RemoveObject(IEnumerable <IResourceObject> col, IResourceObject obj)
 {
     if (TargetType == ResourceType.Location)
     {
         ((SPlusCollection <Location>)col).Remove((Location)obj);
     }
     else
     {
         ((SPlusCollection <StaffMember>)col).Remove((StaffMember)obj);
     }
 }
        protected override Task SetIdForNewResource(IResourceObject resourceObject, object newObject, IResourceTypeRegistration typeRegistration)
        {
            // This is to facilitate testing creation of a resource with a server-provided ID
            if (typeRegistration.Type == typeof (Post) && String.IsNullOrEmpty(resourceObject.Id))
            {
                ((Post) newObject).Id = "230";
                return Task.FromResult(0);
            }

            return base.SetIdForNewResource(resourceObject, newObject, typeRegistration);
        }
Example #12
0
        public HexControl(IResourceObject<Texture2D> Texture, Cell[] cells)
        {
            Cells = cells;
            foreach (Cell c in cells)
            {
                c.Color = Color.White * 0.8f;

            }
            Scale = 1;
            this.Texture = Texture;
            Origin = new Vector2(Texture.Instance.Width / 2, Texture.Instance.Height / 2);
        }
 public static Identifier AsIdentifier(this IResourceObject resource)
 {
     try
     {
         return(new Identifier
         {
             Classification = resource.State["classification"].Value,
             Id = resource.State["id"].Value
         });
     }
     catch (KeyNotFoundException ex)
     {
         throw new ProjectionException(resource.GetType(), typeof(Identifier), ex);
     }
 }
        /// <summary>返回一个资源池,采用单件模式。</summary>
        /// <param name="IResourceObject"></param>
        /// <returns></returns>
        public static PoolingManagement <T> Instance(IResourceObject <T> IResourceObject, int maxResource)
        {
            if (pool == null)
            {
                lock (key3)
                {
                    if (pool == null)
                    {
                        pool = new PoolingManagement <T>(IResourceObject, maxResource);
                    }
                }
            }

            return(pool);
        }
        public async Task <ISingleResourceDocument> Deserialize(JsonReader reader, string currentPath)
        {
            if (reader.TokenType != JsonToken.StartObject)
            {
                throw new DeserializationException("Invalid document root", "Document root is not an object!", currentPath);
            }

            IResourceObject primaryData = null;
            IMetadata       metadata    = null;

            while (reader.Read())
            {
                if (reader.TokenType != JsonToken.PropertyName)
                {
                    break;
                }

                // Has to be a property name
                var propertyName = (string)reader.Value;
                reader.Read();

                switch (propertyName)
                {
                case RelatedDataKeyName:
                    // TODO: If we want to capture related resources, this would be the place to do it
                    reader.Skip();
                    break;

                case PrimaryDataKeyName:
                    primaryData = await DeserializePrimaryData(reader, currentPath + "/" + PrimaryDataKeyName);

                    break;

                case MetaKeyName:
                    metadata = await MetadataFormatter.Deserialize(reader, currentPath + "/" + MetaKeyName);

                    break;

                default:
                    reader.Skip();
                    break;
                }
            }

            return(new SingleResourceDocument(primaryData, new IResourceObject[] { }, metadata));
        }
        public virtual void Dispose(bool isDisposing)
        {
            foreach (long key in messages.Keys)
            {
                //释放资源
                messages[key].Resource.Dispose();
            }

            if (isDisposing)
            {
                key1 = null;
                key2 = null;
                key3 = null;

                IResourceObject = null;
            }
        }
Example #17
0
        /// <summary>
        /// Places the given <paramref name="obj"/>
        /// at the given <paramref name="coordinate"/> in
        /// the <see cref="ResourceGrid"/>.
        /// </summary>
        /// <param name="obj">Object to place.</param>
        /// <param name="coordinate">Coordinate to place object at.</param>
        public void PlaceObject(IResourceObject obj, Point coordinate)
        {
            if (ObjectAt(coordinate) != null)
            {
                throw new Exception("Spot not empty");
            }

            if (obj is IConnectable connectableObj)
            {
                // connect to upper field
                ConnectObject(connectableObj, new Point(coordinate.X, coordinate.Y - 1), ConnectDirection.Top);

                // connect right field
                ConnectObject(connectableObj, new Point(coordinate.X + 1, coordinate.Y), ConnectDirection.Right);

                // connect bottom field
                ConnectObject(connectableObj, new Point(coordinate.X, coordinate.Y + 1), ConnectDirection.Bottom);

                // connect left field
                ConnectObject(connectableObj, new Point(coordinate.X - 1, coordinate.Y), ConnectDirection.Left);
            }

            ResourceGrid[(int)coordinate.X, (int)coordinate.Y] = obj;
        }
 public static RankedIdentifier AsRankedIdentifier(this IResourceObject resource)
 {
     try
     {
         return(new RankedIdentifier
         {
             Classification = resource.State["classification"].Value,
             Id = resource.State["id"].Value,
             Rank = int.Parse(resource.State["rank"].Value)
         });
     }
     catch (FormatException ex)
     {
         throw new ProjectionException(resource.GetType(), typeof(RankedIdentifier), ex);
     }
     catch (OverflowException ex)
     {
         throw new ProjectionException(resource.GetType(), typeof(RankedIdentifier), ex);
     }
     catch (KeyNotFoundException ex)
     {
         throw new ProjectionException(resource.GetType(), typeof(RankedIdentifier), ex);
     }
 }
Example #19
0
 internal void Resource_Visible(IResourceObject obj)
 {
     visibleResource.Add(obj);
 }
Example #20
0
 internal void Resource_Visible(IResourceObject obj)
 {
     visibleResource.Add(obj);
 }
Example #21
0
 [InlineCode("{self}.${@action}({ob},{success})")]         public static IResourceObject Action(this IResourceObject self, string action, object ob, Action <IResourceObject, HttpResponseHeaders> success)
 {
     return(default(IResourceObject));
 }
Example #22
0
 [InlineCode("{self}.${@action}({ob},{success},{error})")] public static IResourceObject Action(this IResourceObject self, string action, object ob, Action success, Action error)
 {
     return(default(IResourceObject));
 }
        public Task Serialize(IResourceObject resourceObject, JsonWriter writer)
        {
            if (resourceObject == null)
            {
                writer.WriteNull();
                return Task.FromResult(0);
            }

            writer.WriteStartObject();

            writer.WritePropertyName(TypeKeyName);
            writer.WriteValue(resourceObject.Type);
            writer.WritePropertyName(IdKeyName);
            writer.WriteValue(resourceObject.Id);

            if (resourceObject.Attributes != null && resourceObject.Attributes.Any())
            {
                writer.WritePropertyName(AttributesKeyName);
                writer.WriteStartObject();
                foreach (var attribute in resourceObject.Attributes)
                {
                    writer.WritePropertyName(attribute.Key);
                    if (attribute.Value == null)
                        writer.WriteNull();
                    else
                    {
                        if (attribute.Value.Type == JTokenType.Integer)
                        {
                            var ulongValue = attribute.Value.Value<ulong>();
                            if (ulongValue > long.MaxValue)
                            {
                                writer.WriteRawValue(ulongValue.ToString());
                                continue;
                            }
                        }
                        attribute.Value.WriteTo(writer);
                    }
                }
                writer.WriteEndObject();
            }

            if (resourceObject.Relationships != null)
            {
                var relationshipsToRender = resourceObject.Relationships.Where(r => r.Value != null).ToArray();
                if (relationshipsToRender.Any())
                {
                    writer.WritePropertyName(RelationshipsKeyName);
                    writer.WriteStartObject();
                    foreach (var relationship in relationshipsToRender)
                    {
                        if (relationship.Value == null) continue;
                        writer.WritePropertyName(relationship.Key);
                        _relationshipObjectFormatter.Serialize(relationship.Value, writer);
                    }
                    writer.WriteEndObject();
                }
            }

            if (resourceObject.SelfLink != null)
            {
                writer.WritePropertyName(LinksKeyName);
                writer.WriteStartObject();
                writer.WritePropertyName(SelfLinkKeyName);
                _linkFormatter.Serialize(resourceObject.SelfLink, writer);
                writer.WriteEndObject();
            }

            if (resourceObject.Metadata != null)
            {
                writer.WritePropertyName(MetaKeyName);
                _metadataFormatter.Serialize(resourceObject.Metadata, writer);
            }

            writer.WriteEndObject();

            return Task.FromResult(0);
        }
Example #24
0
 [InlineCode("{self}.${@action}({ob})")]                   public static IResourceObject Action(this IResourceObject self, string action, object ob)
 {
     return(default(IResourceObject));
 }
Example #25
0
 public DropboxApi(IInMemoryJsonStorage <UserAccount> storage)
 {
     Drive     = new DropboxCloudDrive(storage);
     Resources = new DropboxResources();
 }
        /// <summary>
        /// Merges the field values of the given resource object into the materialized object
        /// </summary>
        /// <param name="resourceObject"></param>
        /// <param name="material"></param>
        /// <param name="registration"></param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        /// <exception cref="DeserializationException">Thrown when a semantically incorrect part of the document is encountered</exception>
        protected virtual async Task MergeFieldsIntoProperties(IResourceObject resourceObject, object material,
                                                               IResourceTypeRegistration registration, CancellationToken cancellationToken)
        {
            foreach (var attributeValue in resourceObject.Attributes)
            {
                var attribute = registration.GetFieldByName(attributeValue.Key) as ResourceTypeAttribute;
                if (attribute == null)
                {
                    continue;
                }
                attribute.SetValue(material, attributeValue.Value);
            }

            foreach (var relationshipValue in resourceObject.Relationships)
            {
                var linkage = relationshipValue.Value.Linkage;

                var typeRelationship = registration.GetFieldByName(relationshipValue.Key) as ResourceTypeRelationship;
                if (typeRelationship == null)
                {
                    continue;
                }

                if (typeRelationship.IsToMany)
                {
                    if (linkage == null)
                    {
                        throw new DeserializationException("Missing linkage for to-many relationship",
                                                           "Expected an array for to-many linkage, but no linkage was specified.", "/data/relationships/" + relationshipValue.Key);
                    }

                    if (!linkage.IsToMany)
                    {
                        throw new DeserializationException("Invalid linkage for to-many relationship",
                                                           "Expected an array for to-many linkage.",
                                                           "/data/relationships/" + relationshipValue.Key + "/data");
                    }

                    // TODO: One query per related object is going to be slow. At the very least, we should be able to group the queries by type
                    var newCollection = new List <object>();
                    foreach (var resourceIdentifier in linkage.Identifiers)
                    {
                        var relatedObjectRegistration = _registry.GetRegistrationForResourceTypeName(resourceIdentifier.Type);
                        var relatedObject             = await GetExistingRecord(relatedObjectRegistration, resourceIdentifier.Id, null, cancellationToken);

                        newCollection.Add(relatedObject);
                    }

                    var method = _openSetToManyRelationshipValueMethod.MakeGenericMethod(typeRelationship.RelatedType);
                    method.Invoke(this, new[] { material, newCollection, typeRelationship });
                }
                else
                {
                    if (linkage == null)
                    {
                        throw new DeserializationException("Missing linkage for to-one relationship",
                                                           "Expected an object for to-one linkage, but no linkage was specified.", "/data/relationships/" + relationshipValue.Key);
                    }

                    if (linkage.IsToMany)
                    {
                        throw new DeserializationException("Invalid linkage for to-one relationship",
                                                           "Expected an object or null for to-one linkage",
                                                           "/data/relationships/" + relationshipValue.Key + "/data");
                    }

                    var identifier = linkage.Identifiers.FirstOrDefault();
                    if (identifier == null)
                    {
                        typeRelationship.Property.SetValue(material, null);
                    }
                    else
                    {
                        var relatedObjectRegistration = _registry.GetRegistrationForResourceTypeName(identifier.Type);
                        var relatedObject             =
                            await GetExistingRecord(relatedObjectRegistration, identifier.Id, null, cancellationToken);

                        typeRelationship.Property.SetValue(material, relatedObject);
                    }
                }
            }
        }
 /// <summary>
 /// Constructs a single resource document
 /// </summary>
 public SingleResourceDocument(IResourceObject primaryData, IResourceObject[] relatedData, IMetadata metadata)
 {
     PrimaryData = primaryData;
     RelatedData = relatedData;
     Metadata = metadata;
 }
Example #28
0
 /// <summary>
 /// Convert a resource object into a material record managed by EntityFramework.
 /// </summary>
 /// <returns></returns>
 protected virtual async Task <object> MaterializeAsync(IResourceObject resourceObject, CancellationToken cancellationToken)
 {
     return(await _entityFrameworkResourceObjectMaterializer.MaterializeResourceObject(resourceObject, cancellationToken));
 }
Example #29
0
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            Locale = LocalizationData.Locale;
            Locale = "ru";
            RCS = GetService(typeof(IResourceCacheService)) as IResourceCacheService;
            // Create a new SpriteBatch, which can be used to draw textures.
            factory.GetHexFill(410, new Vector2(512, 512));
            //Load splash screen
            Splash = Content.Load<Texture2D>(string.Format("Splash_{0}",Locale));
            spriteBatch.Begin();
            spriteBatch.Draw(Splash, Vector2.Zero, Color.White);
            spriteBatch.End();

            GraphicsDevice.Present();
            SoundContent = new ContentManager(this, "Content");
            soundTrack = SoundContent.Load<Song>(string.Format("Sound/Music/Song{0}", (DateTime.Now.Second % 5) + 1));
            MenuItemSelected = Content.Load<SoundEffect>("Sound\\Effects\\10");
            DoResearch = Content.Load<SoundEffect>("Sound\\Effects\\08");
            PlanetSelected = Content.Load<SoundEffect>("Sound\\Effects\\07");
            PlanetSelectedInstance = PlanetSelected.CreateInstance();
            FleetSend = Content.Load<SoundEffect>("Sound\\Effects\\08");

            MediaPlayer.MediaStateChanged += new EventHandler<EventArgs>(MediaPlayer_MediaStateChanged);
            if (MediaPlayer.GameHasControl)
            {
                MediaPlayer.Play(soundTrack);
            }

            SOMAWP7.SomaAd PublicAd = new SOMAWP7.SomaAd();
            PublicAd.Kws = "Space,Gods,Veles,Conflict,Windows,Phone,Cosmos,Astronomy,Sci-Fi,Russia";
            PublicAd.Adspace = 65766349;   // Developer Ads
            PublicAd.Pub = 923863405;       // Developer Ads
            PublicAd.AdSpaceHeight = 50;
            PublicAd.AdSpaceWidth = 300;

            //AdGameComponent.Initialize(this, "c8eda0b9-c5d9-4dc8-856b-8f0791cd3ddd");
            //AdGameComponent.Current.CountryOrRegion = System.Globalization.RegionInfo.CurrentRegion.TwoLetterISORegionName;
            //DrawableAd bannerAd = AdGameComponent.Current.CreateAd("10040438", new Rectangle(0, 0, 300, 50), true);

            adManager = new AdManager(PublicAd);

            RCS.PreCache<Texture2D>("Menues/Main/MainOverlay");

            #region Load Stuff

            GameOverlay = RCS.GetObject<Texture2D>("battle_03v");
            //
            //
            //
            //IResourceObject<Texture2D> StrategicOverlay = RCS.GetObject<Texture2D>("Menues/Strategic/Strategy");

            //RCS.PreCache<Texture2D>("selection");
            RCS.PreCache<Texture2D>("Menues/11v");
            RCS.PreCache<Texture2D>("Menues/LeftButton");
            RCS.PreCache<Texture2D>("Menues/RightButton");
            RCS.PreCache<Texture2D>("Menues/Base/bg_ext");
            Font = Content.Load<SpriteFont>("GameFont");
            IResourceObject<Texture2D> MainButton = RCS.GetObject<Texture2D>("Menues/Main/button");
            IResourceObject<Texture2D> CampaingButton = RCS.GetObject<Texture2D>("Menues/Campaing/SelectionButton");
            Campaign campaign1 = new Campaign();
            Campaign campaign2 = new Campaign();
            Campaign tutorial = new Campaign();
            using (XmlReader reader = XmlReader.Create(string.Format("Campaigns/Campaign1_{0}.xml", Locale)))
            {
                campaign1.Load(reader);
            }
            using (XmlReader reader = XmlReader.Create(string.Format("Campaigns/Campaign2_{0}.xml", Locale)))
            {
                campaign2.Load(reader);
            }
            using (XmlReader reader = XmlReader.Create(string.Format("Campaigns/Tutorial_{0}.xml", Locale)))
            {
                tutorial.Load(reader);
            }

            textSettings = new TextManagerSettings();
            textSettings.Font = Font;
            textSettings.Offset = new Vector2(425, 60);
            textSettings.Width = 310;
            textManager = new TextManager();
            textManager.Settings = textSettings;
            textManager.Text = campaign1.ShortDescription;
            textManager.Parse();

            selectedCampaing = tutorial;
            selectedEpisode = selectedCampaing.Episodes[0];
            selectedMission = selectedEpisode.Missions[0];
            #endregion
            #region Main Menu
            IResourceObject<Texture2D> MainOverlay = RCS.GetObject<Texture2D>("Menues/Main/MainOverlay");
            IAnimator<Vector2> MainAnimatorOut = new SmoothVectorAnimator();
            MainAnimatorOut.AtStart = Vector2.Zero;
            MainAnimatorOut.AtEnd = new Vector2(-120, 425);
            MainAnimatorOut.Duration = 450;

            IAnimator<Vector2> MainAnimatorIn = new LinearVectorAnimator();
            MainAnimatorIn.AtStart = new Vector2(120, -425);
            MainAnimatorIn.AtEnd = Vector2.Zero;
            MainAnimatorIn.Duration = 375;

            Manager = new MenuManager();
            Manager.ExitOnBack = true;

            Menu One = new Menu(MainAnimatorIn, MainAnimatorOut, BuildMessageBox());
            One.Controls.Add(new Image() { Texture = MainOverlay, Position = Vector2.Zero, Depth = 0.5f });
            Manager.Menues.Add("Main", One);
            bool Nab = playerData.FirstLoad || (playerData.GetProgress("Campaing1") == 1 && playerData.GetProgress("Campaing2") == 1 && playerData.GetProgress("Campaing3") == 1);
            One.Controls.Add(new AdControl(adManager) { Position = new Vector2(417, 411), Scale = 1, Depth = 0 });
            {
                if (Nab)
                {
                    HybridButton tb = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 0, 85 + 0 * 55));
                    tb.Text = LocalizationData.NewGame;
                    tb.TextPosition = new Vector2(15, -47);
                    tb.Sound = MenuItemSelected.CreateInstance();
                    tb.UseSound = true;
                    tb.Font = Font;
                    tb.Depth = 0.9f;
                    tb.HoverColor = new Color(50, 238, 50);
                    tb.Origin = new Vector2(0, MainButton.Instance.Height - 7);
                    tb.NextMenu = "Difficulty";
                    One.Controls.Add(tb);
                }
                else
                {
                    HybridButton tb = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 0, 85 + 0 * 55));
                    tb.Text = LocalizationData.Continue;
                    tb.TextPosition = new Vector2(15, -47);
                    tb.Font = Font;
                    tb.Depth = 0.9f;
                    tb.Sound = MenuItemSelected.CreateInstance();
                    tb.HoverColor = new Color(50, 238, 50);
                    tb.UseSound = true;
                    tb.Origin = new Vector2(0, MainButton.Instance.Height - 7);
                    tb.NextMenu = "Campaing";
                    One.Controls.Add(tb);
                }
            }
            {
                if (Nab)
                {
                    HybridButton tb = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 1, 85 + 1 * 55));
                    tb.Text = LocalizationData.Continue;
                    tb.TextPosition = new Vector2(15, -47);
                    tb.Font = Font;
                    tb.Depth = 0.9f;
                    tb.Sound = MenuItemSelected.CreateInstance();
                    tb.HoverColor = new Color(50, 238, 50);
                    tb.UseSound = true;
                    tb.Origin = new Vector2(0, MainButton.Instance.Height - 7);
                    tb.NextMenu = "Campaing";
                    One.Controls.Add(tb);
                }
                else
                {
                    HybridButton tb = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 1, 85 + 1 * 55));
                    tb.Text = LocalizationData.NewGame;
                    tb.TextPosition = new Vector2(15, -47);
                    tb.Sound = MenuItemSelected.CreateInstance();
                    tb.HoverColor = new Color(50, 238, 50);
                    tb.UseSound = true;
                    tb.Font = Font;
                    tb.Depth = 0.9f;
                    tb.Origin = new Vector2(0, MainButton.Instance.Height - 7);
                    tb.NextMenu = "Difficulty";
                    One.Controls.Add(tb);
                }

            }
            {
                HybridButton tb = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 2, 85 + 2 * 55));
                tb.Text = LocalizationData.Multiplayer;
                tb.TextPosition = new Vector2(15, -47);
                tb.NextMenu = "MultiplayerMain";
                tb.HoverColor = new Color(50, 238, 50);
                tb.Sound = MenuItemSelected.CreateInstance();
                tb.UseSound = true;
                tb.Font = Font;
                tb.Depth = 0.9f;
                tb.Origin = new Vector2(0, MainButton.Instance.Height - 7);
                One.Controls.Add(tb);
            }
            {
                HybridButton tb = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 3, 85 + 3 * 55));
                tb.Text = LocalizationData.Rate;
                tb.TextPosition = new Vector2(15, -47);
                tb.Sound = MenuItemSelected.CreateInstance();
                tb.HoverColor = new Color(50, 238, 50);
                tb.UseSound = true;
                tb.Font = Font;
                tb.Depth = 0.9f;
                tb.Origin = new Vector2(0, MainButton.Instance.Height - 7);
                tb.OnClick += new EventHandler(Rate_OnClick);
                One.Controls.Add(tb);
            }
            {
                HybridButton tb = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 4, 85 + 4 * 55));
                tb.Text = LocalizationData.Share;
                tb.TextPosition = new Vector2(15, -47);
                tb.Sound = MenuItemSelected.CreateInstance();
                tb.HoverColor = new Color(50, 238, 50);
                tb.OnClick += new EventHandler(share_OnClick);
                tb.UseSound = true;
                tb.Font = Font;
                tb.Depth = 0.9f;
                tb.Origin = new Vector2(0, MainButton.Instance.Height - 7);
                One.Controls.Add(tb);
            }
            /*
            {
                HybridButton tb = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 4, 85 + 4 * 55));
                tb.Text = "Editor";
                tb.OnClick+=new EventHandler(EnterEditorMode);
                tb.TextPosition = new Vector2(15, -47);
                tb.HoverColor = new Color(50, 238, 50);
                tb.Sound = MenuItemSelected.CreateInstance();
                tb.UseSound = true;
                tb.Font = Font;
                tb.Depth = 0.9f;
                tb.Origin = new Vector2(0, MainButton.Instance.Height - 7);
                One.Controls.Add(tb);
            }
            */
            {
                HybridButton tb = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 5, 85 + 5 * 55));
                tb.Text = LocalizationData.Exit;
                tb.TextPosition = new Vector2(15, -47);
                tb.HoverColor = new Color(50, 238, 50);
                tb.Sound = MenuItemSelected.CreateInstance();
                tb.UseSound = true;
                tb.Font = Font;
                tb.Depth = 0.9f;
                tb.Origin = new Vector2(0, MainButton.Instance.Height - 7);
                tb.NextMenu = "%Exit%"; //Change
                One.Controls.Add(tb);
            }
            #endregion
            #region Campaing Menu
            RCS.PreCache<Texture2D>("Menues/Base/Base");
            RCS.PreCache<Texture2D>("Menues/Campaing/Overlay");
            IResourceObject<Texture2D> CampaingOverlay = RCS.GetObject<Texture2D>("Menues/Campaing/Overlay");
            IAnimator<Vector2> CampaingOut = new SmoothVectorAnimator();
            CampaingOut.AtStart = Vector2.Zero;
            CampaingOut.AtEnd = new Vector2(0, 480);
            CampaingOut.Duration = 500;

            IAnimator<Vector2> CampaingIn = new SmoothVectorAnimator();
            CampaingIn.AtStart = new Vector2(0, -480);
            CampaingIn.AtEnd = Vector2.Zero;
            CampaingIn.Duration = 500;
            Menu Two = new Menu(CampaingIn, CampaingOut, BuildMessageBox());
            Two.Controls.Add(new Image() { Texture = CampaingOverlay, Position = Vector2.Zero, Depth = 0.5f });
            Two.Controls.Add(new AdControl(adManager) { Position = new Vector2(252, 415), Scale = 1, Depth = 0 });
            Two.OnDraw += CampaignOnDraw;
            Manager.Menues.Add("Campaing", Two);
            {
                HybridButton tb = new HybridButton(CampaingButton, CampaingButton, new Vector2(57, 45 + 0 * 53));
                tb.Origin = new Vector2(0, 0);
                tb.Depth = 0.51f;
                tb.Color = Color.LightGreen;
                tb.HoverColor = new Color(50, 238, 50);
                tb.Font = Font;
                tb.UseSound = true;
                tb.Sound = MenuItemSelected.CreateInstance();
                tb.Text = tutorial.Name;
                tb.Tag = tutorial;
                tb.OnClick += CampaignSelected;
                tb.TextPosition = new Vector2(20, CampaingButton.Instance.Height / 4);
                Two.Controls.Add(tb);
            }
            {
                HybridButton tb = new HybridButton(CampaingButton, CampaingButton, new Vector2(57, 45 + 1 * 53));
                tb.Origin = new Vector2(0, 0);
                tb.Depth = 0.51f;
                tb.Font = Font;
                tb.HoverColor = new Color(50, 238, 50);
                tb.UseSound = true;
                tb.Sound = MenuItemSelected.CreateInstance();
                tb.Text = campaign1.Name;
                tb.Tag = campaign1;
                tb.OnClick += CampaignSelected;
                tb.TextPosition = new Vector2(20, CampaingButton.Instance.Height / 4);
                Two.Controls.Add(tb);
            }
            {
                HybridButton tb = new HybridButton(CampaingButton, CampaingButton, new Vector2(57, 45 + 2 * 53));
                tb.Origin = new Vector2(0, 0);
                tb.Depth = 0.51f;
                tb.Font = Font;
                tb.HoverColor = new Color(50, 238, 50);
                tb.UseSound = true;
                tb.Sound = MenuItemSelected.CreateInstance();
                tb.Text = campaign2.Name;
                tb.Tag = campaign2;
                tb.OnClick += CampaignSelected;
                tb.TextPosition = new Vector2(20, CampaingButton.Instance.Height / 4);
                Two.Controls.Add(tb);
            }
            //{
            //    HybridButton tb = new HybridButton(CampaingButton, CampaingButton, new Vector2(57, 45 + 1 * 53));
            //    tb.Origin = new Vector2(0, 0);
            //    tb.Depth = 0.51f;
            //    tb.Font = Font;
            //    tb.Text = campaign2.Name;
            //    tb.Tag = campaign2;
            //    tb.OnClick += CampaignSelected;
            //    tb.TextPosition = new Vector2(20, CampaingButton.Height / 4);
            //    Two.Controls.Add(tb);
            //}
            HybridButton Left = new HybridButton(RCS.GetObject<Texture2D>("Menues/LeftButton"), RCS.GetObject<Texture2D>("Menues/LeftButton"), new Vector2(43, 444));
            Left.Origin = new Vector2(0, 62);
            Left.NextMenu = "%Back%";
            Left.HoverColor = new Color(50, 238, 50);
            Left.CanOffset = false;
            Left.UseSound = true;
            Left.Sound = MenuItemSelected.CreateInstance();
            Left.Depth = 0.01f;
            Left.Font = Font;
            Left.TextPosition = -Left.Origin + new Vector2(50, 23);
            Left.Text = LocalizationData.Back;
            HybridButton Right = new HybridButton(RCS.GetObject<Texture2D>("Menues/RightButton"), RCS.GetObject<Texture2D>("Menues/RightButton"), new Vector2(757, 444));
            Right.Origin = new Vector2(172, 62);
            Right.CanOffset = false;
            Right.Depth = 0.01f;
            Right.HoverColor = new Color(50, 238, 50);
            Right.UseSound = true;
            Right.Sound = MenuItemSelected.CreateInstance();
            Right.NextMenu = "Base";
            Right.Font = Font;
            Right.TextPosition = -Right.Origin + new Vector2(60, 23);
            Right.Text = LocalizationData.Play;
            Two.Controls.Add(Left);
            Two.Controls.Add(Right);
            #endregion
            #region Base Menu

            IAnimator<Vector2> Empty = new SmoothVectorAnimator();
            Empty.AtStart = Vector2.Zero;
            Empty.AtEnd = Vector2.Zero;
            Empty.Duration = 0;

            #endregion

            MultiplayerMenu multiplayerMenu = new MultiplayerMenu();
            Manager.Menues.Add("MultiplayerMain", multiplayerMenu);

            //Define the strategic menu, but don't bother giving it any controls
            Menu Strategic = new Menu(Empty, Empty, BuildMessageBox());
            Manager.Menues.Add("Strategic", Strategic);
            Strategic.OnDraw += new EventHandler(Strategic_OnDraw);

            //Define the mission menu too
            Menu MissionSelection = new Menu(Empty, Empty, BuildMessageBox());
            Manager.Menues.Add("Mission", MissionSelection);
            MissionSelection.OnDraw += new EventHandler(MissionSelection_OnDraw);

            Menu DifficultySelection = new Menu(MainAnimatorIn, MainAnimatorOut, BuildMessageBox());
            DifficultySelection.NotReturnable = true;
            Manager.Menues.Add("Difficulty", DifficultySelection);
            /*
            HybridButton Easy = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 0, 85 + 0 * 55));
            Easy.Tag = "Easy";
            Easy.OnClick += new EventHandler(Easy_OnClick);
            Easy.Text = LocalizationData.DifficultyEasy;
            Easy.Font = Font;
            Easy.UseSound = true;
            Easy.Sound = MenuItemSelected.CreateInstance();
            Easy.Depth = 0.9f;
            Easy.NextMenu = "Campaing";
            Easy.Origin = new Vector2(0, MainButton.Instance.Height - 7);
            Easy.TextPosition = new Vector2(15, -47);
            */

            HybridButton Medium = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 0, 85 + 0 * 55));
            Medium.Tag = "Medium";
            Medium.OnClick += Easy_OnClick;
            Medium.UseSound = true;
            Medium.HoverColor = new Color(50, 238, 50);
            Medium.Sound = MenuItemSelected.CreateInstance();
            Medium.Text = LocalizationData.DifficultyEasy;
            Medium.NextMenu = "Campaing";
            Medium.Font = Font;
            Medium.Depth = 0.9f;
            Medium.Origin = new Vector2(0, MainButton.Instance.Height - 7);
            Medium.TextPosition = new Vector2(15, -47);

            HybridButton Hard = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 1, 85 + 1 * 55));
            Hard.Tag = "Hard";
            Hard.OnClick += Easy_OnClick;
            Hard.UseSound = true;
            Hard.HoverColor = new Color(50, 238, 50);
            Hard.Sound = MenuItemSelected.CreateInstance();
            Hard.Text = LocalizationData.DifficultyMedium;
            Hard.Font = Font;
            Hard.NextMenu = "Campaing";
            Hard.Depth = 0.9f;
            Hard.Origin = new Vector2(0, MainButton.Instance.Height - 7);
            Hard.TextPosition = new Vector2(15, -47);

            HybridButton Insane = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 2, 85 + 2 * 55));
            Insane.Tag = "Insane";
            Insane.OnClick += Easy_OnClick;
            Insane.Text = LocalizationData.DifficultyHard;
            Insane.UseSound = true;
            Insane.HoverColor = new Color(50, 238, 50);
            Insane.Sound = MenuItemSelected.CreateInstance();
            Insane.Font = Font;
            Insane.NextMenu = "Campaing";
            Insane.Depth = 0.9f;
            Insane.Origin = new Vector2(0, MainButton.Instance.Height - 7);
            Insane.TextPosition = new Vector2(15, -47);

            HybridButton DiffBack = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 3, 85 + 3 * 55));
            DiffBack.Text = LocalizationData.Back;
            DiffBack.Font = Font;
            DiffBack.HoverColor = new Color(50, 238, 50);
            DiffBack.UseSound = true;
            DiffBack.Sound = MenuItemSelected.CreateInstance();
            DiffBack.NextMenu = "%Back%";
            DiffBack.Depth = 0.9f;
            DiffBack.Origin = new Vector2(0, MainButton.Instance.Height - 7);
            DiffBack.TextPosition = new Vector2(15, -47);
            DifficultySelection.Controls.Add(new AdControl(adManager) { Position = new Vector2(417, 411), Scale = 1, Depth = 0 });
            //DifficultySelection.Controls.Add(Easy);
            DifficultySelection.Controls.Add(Medium);
            DifficultySelection.Controls.Add(Hard);
            DifficultySelection.Controls.Add(Insane);
            DifficultySelection.Controls.Add(DiffBack);
            DifficultySelection.Controls.Add(new Image() { Texture = MainOverlay, Position = Vector2.Zero, Depth = 0.5f });

            PauseManager = new MenuManager();
            PauseManager.ExitOnBack = false;
            PauseManager.Enabled = false;
            Menu PauseMenu = new Menu(MainAnimatorIn, MainAnimatorOut, BuildMessageBox());
            PauseManager.Menues.Add("Pause", PauseMenu);
            PauseManager.SetMenu("Pause");
            HybridButton Continue = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 0, 85 + 0 * 55));
            Continue.UseSound = true;
            Continue.Sound = MenuItemSelected.CreateInstance();
            Continue.OnClick += new EventHandler(Continue_OnClick);
            Continue.Text = LocalizationData.Continue;
            Continue.Font = Font;
            Continue.HoverColor = new Color(50, 238, 50);
            Continue.Depth = 0.6f;
            Continue.Origin = new Vector2(0, MainButton.Instance.Height - 7);
            Continue.TextPosition = new Vector2(15, -47);
            PauseMenu.Controls.Add(new AdControl(adManager) { Position = new Vector2(417, 411), Scale = 1, Depth = 0 });

            HybridButton ChangeDifficulty = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 1, 85 + 1 * 55));
            ChangeDifficulty.UseSound = true;
            ChangeDifficulty.HoverColor = new Color(50, 238, 50);
            ChangeDifficulty.Sound = MenuItemSelected.CreateInstance();
            ChangeDifficulty.Text = LocalizationData.Difficulty;
            ChangeDifficulty.Font = Font;
            ChangeDifficulty.Depth = 0.6f;
            ChangeDifficulty.Origin = new Vector2(0, MainButton.Instance.Height - 7);
            ChangeDifficulty.TextPosition = new Vector2(15, -47);
            ChangeDifficulty.NextMenu = "Difficulty";

            HybridButton Exit = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 2, 85 + 2 * 55));
            Exit.OnClick += new EventHandler(Exit_OnClick);
            Exit.HoverColor = new Color(50, 238, 50);
            Exit.UseSound = true;
            Exit.Sound = MenuItemSelected.CreateInstance();
            Exit.Text = LocalizationData.Exit;
            Exit.Font = Font;
            Exit.Depth = 0.6f;
            Exit.Origin = new Vector2(0, MainButton.Instance.Height - 7);
            Exit.TextPosition = new Vector2(15, -47);
            PauseMenu.Controls.Add(Continue);
            PauseMenu.Controls.Add(Exit);
            PauseMenu.Controls.Add(ChangeDifficulty);
            PauseMenu.Controls.Add(new Image() { Texture = MainOverlay, Position = Vector2.Zero, Depth = 0.5f });

            Menu PauseMenuDifficulty = new Menu(MainAnimatorIn, MainAnimatorOut, BuildMessageBox());
            PauseManager.Menues.Add("Difficulty",PauseMenuDifficulty);
            /*
            HybridButton PauseMenuDifficultyEasy = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 0, 85 + 0 * 55));
            PauseMenuDifficultyEasy.Tag = "Easy";
            PauseMenuDifficultyEasy.OnClick += new EventHandler(PauseMenuDifficultyEasy_OnClick);
            PauseMenuDifficultyEasy.Text = LocalizationData.DifficultyEasy;
            PauseMenuDifficultyEasy.Font = Font;
            PauseMenuDifficultyEasy.UseSound = true;
            PauseMenuDifficultyEasy.Sound = MenuItemSelected.CreateInstance();
            PauseMenuDifficultyEasy.Depth = 0.9f;
            PauseMenuDifficultyEasy.NextMenu = "%Back%";
            PauseMenuDifficultyEasy.Origin = new Vector2(0, MainButton.Instance.Height - 7);
            PauseMenuDifficultyEasy.TextPosition = new Vector2(15, -47);
            */

            HybridButton PauseMenuDifficultyMedium = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 0, 85 + 0 * 55));
            PauseMenuDifficultyMedium.Tag = "Medium";
            PauseMenuDifficultyMedium.HoverColor = new Color(50, 238, 50);
            PauseMenuDifficultyMedium.OnClick += new EventHandler(PauseMenuDifficultyEasy_OnClick);
            PauseMenuDifficultyMedium.UseSound = true;
            PauseMenuDifficultyMedium.Sound = MenuItemSelected.CreateInstance();
            PauseMenuDifficultyMedium.Text = LocalizationData.DifficultyEasy;
            PauseMenuDifficultyMedium.NextMenu = "%Back%";
            PauseMenuDifficultyMedium.Font = Font;
            PauseMenuDifficultyMedium.Depth = 0.9f;
            PauseMenuDifficultyMedium.Origin = new Vector2(0, MainButton.Instance.Height - 7);
            PauseMenuDifficultyMedium.TextPosition = new Vector2(15, -47);

            HybridButton PauseMenuDifficultyHard = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 1, 85 + 1 * 55));
            PauseMenuDifficultyHard.Tag = "Hard";
            PauseMenuDifficultyHard.HoverColor = new Color(50, 238, 50);
            PauseMenuDifficultyHard.OnClick += new EventHandler(PauseMenuDifficultyEasy_OnClick);
            PauseMenuDifficultyHard.UseSound = true;
            PauseMenuDifficultyHard.Sound = MenuItemSelected.CreateInstance();
            PauseMenuDifficultyHard.Text = LocalizationData.DifficultyMedium;
            PauseMenuDifficultyHard.Font = Font;
            PauseMenuDifficultyHard.NextMenu = "%Back%";
            PauseMenuDifficultyHard.Depth = 0.9f;
            PauseMenuDifficultyHard.Origin = new Vector2(0, MainButton.Instance.Height - 7);
            PauseMenuDifficultyHard.TextPosition = new Vector2(15, -47);

            HybridButton PauseMenuDifficultyInsane = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 2, 85 + 2 * 55));
            PauseMenuDifficultyInsane.Tag = "Insane";
            PauseMenuDifficultyInsane.HoverColor = new Color(50, 238, 50);
            PauseMenuDifficultyInsane.OnClick += new EventHandler(PauseMenuDifficultyEasy_OnClick);
            PauseMenuDifficultyInsane.Text = LocalizationData.DifficultyHard;
            PauseMenuDifficultyInsane.UseSound = true;
            PauseMenuDifficultyInsane.Sound = MenuItemSelected.CreateInstance();
            PauseMenuDifficultyInsane.Font = Font;
            PauseMenuDifficultyInsane.NextMenu = "%Back%";
            PauseMenuDifficultyInsane.Depth = 0.9f;
            PauseMenuDifficultyInsane.Origin = new Vector2(0, MainButton.Instance.Height - 7);
            PauseMenuDifficultyInsane.TextPosition = new Vector2(15, -47);

            HybridButton PauseMenuDifficultyDiffBack = new HybridButton(MainButton, MainButton, new Vector2(120 - 15 * 3, 85 + 3 * 55));
            PauseMenuDifficultyDiffBack.Text = LocalizationData.Back;
            PauseMenuDifficultyDiffBack.Font = Font;
            PauseMenuDifficultyDiffBack.HoverColor = new Color(50, 238, 50);
            PauseMenuDifficultyDiffBack.UseSound = true;
            PauseMenuDifficultyDiffBack.Sound = MenuItemSelected.CreateInstance();
            PauseMenuDifficultyDiffBack.NextMenu = "%Back%";
            PauseMenuDifficultyDiffBack.Depth = 0.9f;
            PauseMenuDifficultyDiffBack.Origin = new Vector2(0, MainButton.Instance.Height - 7);
            PauseMenuDifficultyDiffBack.TextPosition = new Vector2(15, -47);
            PauseMenuDifficulty.Controls.Add(new AdControl(adManager) { Position = new Vector2(417, 411), Scale = 1, Depth = 0 });
            //PauseMenuDifficulty.Controls.Add(PauseMenuDifficultyEasy);
            PauseMenuDifficulty.Controls.Add(PauseMenuDifficultyMedium);
            PauseMenuDifficulty.Controls.Add(PauseMenuDifficultyHard);
            PauseMenuDifficulty.Controls.Add(PauseMenuDifficultyInsane);
            PauseMenuDifficulty.Controls.Add(PauseMenuDifficultyDiffBack);
            PauseMenuDifficulty.Controls.Add(new Image() { Texture = MainOverlay, Position = Vector2.Zero, Depth = 0.5f });

            Manager.SetMenu("Main");
            Manager.Enabled = true;

            PopupMB = new MessageBox("", 700, 300, Font, RCS.GetObject<Texture2D>("Corner"), RCS.GetObject<Texture2D>("Border"), RCS.GetObject<Texture2D>("BackgroundPattern"));
            PopupMB.Depth = 0.01f;
            PopupMB.OnClosed += new Action(PopupMB_OnClosed);
            PopupMB.Origin = new Vector2(350, 150);
            PopupMB.Position = new Vector2(400, 240);
            PopupTextManager = new TextManager();
            PopupTextManager.Settings = PopupTextSettings = new TextManagerSettings();
            PopupTextSettings.Depth = 0;
            PopupTextSettings.Font = Font;
            PopupTextSettings.Origin = new Vector2(400, 240);
            PopupTextManager.Settings.Offset = new Vector2(100 - 34, 105);
            PopupTextSettings.Width = 700 - 28;

            textSettings.Depth = 0.49f;
            IInputService input = Atom.Shared.Globals.Engine.GetService(typeof(IInputService)) as IInputService;
            MainMenuContract = input.CreateContract();
            MainMenuContract.SubscribedTouchEvents = TouchStates.OnDrag | TouchStates.OnDoubleTap | TouchStates.OnTap | TouchStates.OnFlick;
            MainMenuContract.TouchEventHandler += new EventHandler<TouchEventArgs>(contract_TouchEventHandler);
            SinglePlayerContract = input.CreateContract();
            SinglePlayerContract.Enabled = false;
            SinglePlayerContract.SubscribedTouchEvents = TouchStates.OnDrag | TouchStates.OnTap | TouchStates.OnDoubleTap | TouchStates.OnPinch | TouchStates.OnFlick;
            SinglePlayerContract.TouchEventHandler += new EventHandler<TouchEventArgs>(SinglePlayerContract_TouchEventHandler);

            Manager.OnEndMenuChange += new EventHandler<MenuChangeEventArgs>(Manager_OnEndMenuChange);
            Manager.OnBeginMenuChange += new EventHandler<MenuChangeEventArgs>(Manager_OnBeginMenuChange);
            Background = RCS.GetObject<Texture2D>("Menues/11v");
            foreach (KeyValuePair<string, Menu> menu in Manager.Menues)
            {
                menu.Value.InitializeControls();
            }
        }
Example #30
0
        void Manager_OnBeginMenuChange(object sender, MenuChangeEventArgs e)
        {
            offsetVelocity = Vector2.Zero;
            if (e.Menu == Manager.Menues["Campaing"])
            {
                selectedEpisode = selectedCampaing.Episodes[0];
                selectedMission = selectedEpisode.Missions[0];
                TutorialMode = selectedCampaing.InternalName == "Tutorial";
                TutorialProgress = 0;
                textManager.Text = selectedCampaing.Name + "\n\n\n" + selectedCampaing.ShortDescription;
                textManager.Parse();

                RCS.PreCache<Texture2D>("Menues/Strategic/Strategy");
                RCS.PreCache<Texture2D>("Menues/Strategic/06");
                RCS.PreCache<Texture2D>("Menues/Strategic/Hex2");
                RCS.PreCache<Texture2D>("Menues/Strategic/Screen");
                RCS.PreCache<Texture2D>("Menues/Strategic/science_screen");

                for (int i = 1; i <= 4; i++)
                {
                    //Load science
                    for (int j = 1; j <= 6; j++)
                    {
                        RCS.PreCache<Texture2D>(string.Format("Science/{0}_{1}", i, j));
                    }
                }
                RCS.PreCache<Texture2D>("Menues/Strategic/selection_tactical");
                textSettings.Width = 310;
                textSettings.Offset = new Vector2(425, 60);
                textManager.Text = selectedCampaing.Name + "\n\n\n" + selectedCampaing.ShortDescription;
                textManager.Parse();
                RCS.PreCache<Texture2D>("Menues/Strategic/06");
                if (SSL == null)
                {
                    SSL = new SpriteSheetLoader();

                    ScienceAnimator.AtStart = new Vector2(462, 8);
                    ScienceAnimator.AtEnd = new Vector2(25, 319);
                    ScienceAnimator.Duration = 1000;

                    ScienceAnimatorReversed.AtEnd = new Vector2(462, 8);
                    ScienceAnimatorReversed.AtStart = new Vector2(25, 319);
                    ScienceAnimatorReversed.Duration = 1000;

                    IAnimator<Vector2> Empty = new SmoothVectorAnimator();
                    Empty.AtStart = Vector2.Zero;
                    Empty.AtEnd = Vector2.Zero;
                    Empty.Duration = 0;
                    IResourceObject<Texture2D> BaseOverlay = RCS.GetObject<Texture2D>("Menues/Base/Base");
                    Menu Three = new Menu(Empty, Empty, BuildMessageBox());
                    Three.OnDraw += CampaignDescriptionOnDraw;
                    Manager.Menues.Add("Base", Three);
                    Three.Controls.Add(new Image() { Texture = BaseOverlay, Position = Vector2.Zero, Depth = 0.48f });
                    Three.Controls.Add(new Image() { Texture = RCS.GetObject<Texture2D>("Menues/Base/bg_ext"), Position = new Vector2(0, 0), Depth = 0.6f });
                    Three.Controls.Add(new AdControl(adManager) { Position = new Vector2(252, 415), Scale = 1, Depth = 0 });
                    HybridButton LeftBase = new HybridButton(RCS.GetObject<Texture2D>("Menues/LeftButton"), RCS.GetObject<Texture2D>("Menues/LeftButton"), new Vector2(43, 444));
                    LeftBase.Origin = new Vector2(0, 62);
                    LeftBase.NextMenu = "%Back%";
                    LeftBase.CanOffset = false;
                    LeftBase.Depth = 0.01f;
                    LeftBase.Font = Font;
                    LeftBase.HoverColor = new Color(50, 238, 50);
                    LeftBase.UseSound = true;
                    LeftBase.Sound = MenuItemSelected.CreateInstance();
                    LeftBase.TextPosition = -LeftBase.Origin + new Vector2(50, 23);
                    LeftBase.Text = LocalizationData.Back;
                    HybridButton RightBase = new HybridButton(RCS.GetObject<Texture2D>("Menues/RightButton"), RCS.GetObject<Texture2D>("Menues/RightButton"), new Vector2(757, 444));
                    RightBase.Origin = new Vector2(172, 62);
                    RightBase.CanOffset = false;
                    RightBase.Depth = 0.01f;
                    RightBase.HoverColor = new Color(50, 238, 50);
                    RightBase.UseSound = true;
                    RightBase.Sound = MenuItemSelected.CreateInstance();
                    RightBase.NextMenu = "Strategic";
                    RightBase.Font = Font;
                    RightBase.TextPosition = -RightBase.Origin + new Vector2(60, 23);
                    RightBase.Text = LocalizationData.Select;
                    Three.Controls.Add(LeftBase);
                    Three.Controls.Add(RightBase);

                    EpilogueMenu eMenu = new EpilogueMenu();
                    Manager.Menues.Add("Epilogue", eMenu);

                }

            }
            else if (e.Menu == Manager.Menues["Strategic"])
            {
                if (TutorialMode)
                {
                    if (TutorialProgress == 0)
                    {
                        e.Menu.MessageBox.Text = LocalizationData.Tutorial0;
                        e.Menu.MessageBox.Show(true);
                        e.Menu.MessageBox.OnClosed += new Action(MessageBox_OnClosed);
                        TutorialProgress++;
                    }
                }
                if (GalaxyImage == null)
                    GalaxyImage = new Image() { Texture = RCS.GetObject<Texture2D>("Menues/Strategic/06"), CanOffset = true, Depth = 0.9f };

                ScienceDNA = RCS.GetObject<Texture2D>("Menues/Strategic/science_screen");
                textManager.Settings.Width = 200;
                textManager.Settings.Offset = new Vector2(545, 50);
                textManager.Text = "";
                textManager.Parse();

                e.Menu.Controls.Clear();
                e.Menu.Controls.Add(new AdControl(adManager) { Position = new Vector2(252, 415), Scale = 1, Depth = 0 });
                HybridButton LeftStrategic = new HybridButton(RCS.GetObject<Texture2D>("Menues/LeftButton"), RCS.GetObject<Texture2D>("Menues/LeftButton"), new Vector2(43, 444));
                LeftStrategic.Origin = new Vector2(0, 62);
                LeftStrategic.NextMenu = "%Back%";
                LeftStrategic.UseSound = true;
                LeftStrategic.HoverColor = new Color(50, 238, 50);
                LeftStrategic.Sound = MenuItemSelected.CreateInstance();
                LeftStrategic.CanOffset = false;
                LeftStrategic.Depth = 0.01f;
                LeftStrategic.Font = Font;
                LeftStrategic.TextPosition = -LeftStrategic.Origin + new Vector2(50, 23);
                LeftStrategic.Text = LocalizationData.Back;
                HybridButton RightStrategic = new HybridButton(RCS.GetObject<Texture2D>("Menues/RightButton"), RCS.GetObject<Texture2D>("Menues/RightButton"), new Vector2(757, 444));
                RightStrategic.Origin = new Vector2(172, 62);
                RightStrategic.NextMenu = "Mission";
                RightStrategic.CanOffset = false;
                RightStrategic.UseSound = true;
                RightStrategic.HoverColor = new Color(50, 238, 50);
                RightStrategic.Sound = MenuItemSelected.CreateInstance();
                RightStrategic.Depth = 0.01f;
                RightStrategic.Font = Font;
                RightStrategic.TextPosition = -RightStrategic.Origin + new Vector2(60, 23);
                RightStrategic.Text = LocalizationData.Select;

                e.Menu.Controls.Add(new Image() { Texture = RCS.GetObject<Texture2D>("Menues/Strategic/Strategy"), Position = Vector2.Zero, Depth = 0.1f });
                e.Menu.Controls.Add(new Image() { Texture = RCS.GetObject<Texture2D>("Menues/Strategic/Screen"), Position = Vector2.Zero, Depth = 0.7f });
                e.Menu.Controls.Add(GalaxyImage);
                e.Menu.Controls.Add(LeftStrategic);
                e.Menu.Controls.Add(RightStrategic);

                int TextureNumber = playerData.Research["Growth"] + 1;
                if (TextureNumber >= 6)
                {
                    TextureNumber = 6;
                }
                TexturedButton Science1 = new TexturedButton(RCS.GetObject<Texture2D>(string.Format("Science/1_{0}", TextureNumber)), RCS.GetObject<Texture2D>(string.Format("Science/1_{0}", TextureNumber)), new Vector2(100, 10) - new Vector2(37, 319));
                TextureNumber = playerData.Research["Speed"] + 1;
                if (TextureNumber >= 6)
                {
                    TextureNumber = 6;
                }
                TexturedButton Science2 = new TexturedButton(RCS.GetObject<Texture2D>(string.Format("Science/2_{0}", TextureNumber)), RCS.GetObject<Texture2D>(string.Format("Science/2_{0}", TextureNumber)), new Vector2(100 + 164, 10) - new Vector2(37, 319));
                TextureNumber = playerData.Research["Attack"] + 1;
                if (TextureNumber >= 6)
                {
                    TextureNumber = 6;
                }
                TexturedButton Science3 = new TexturedButton(RCS.GetObject<Texture2D>(string.Format("Science/3_{0}", TextureNumber)), RCS.GetObject<Texture2D>(string.Format("Science/3_{0}", TextureNumber)), new Vector2(100, 10 + 164) - new Vector2(37, 319));
                TextureNumber = playerData.Research["Defense"] + 1;
                if (TextureNumber >= 6)
                {
                    TextureNumber = 6;
                }
                TexturedButton Science4 = new TexturedButton(RCS.GetObject<Texture2D>(string.Format("Science/4_{0}", TextureNumber)), RCS.GetObject<Texture2D>(string.Format("Science/1_{0}", TextureNumber)), new Vector2(100 + 164, 10 + 164) - new Vector2(37, 319));

                Science1.Visible = Science1.Enabled = true;
                Science1.Scale = 0.640625f;
                Science2.Visible = Science2.Enabled = true;
                Science2.Scale = 0.640625f;
                Science3.Visible = Science3.Enabled = true;
                Science3.Scale = 0.640625f;
                Science4.Visible = Science4.Enabled = true;
                Science4.Scale = 0.640625f;
                Science1.Tag = "Science1";
                Science2.Tag = "Science2";
                Science3.Tag = "Science3";
                Science4.Tag = "Science4";
                Science1.OnClick += ScienceOnClick;
                Science2.OnClick += ScienceOnClick;
                Science3.OnClick += ScienceOnClick;
                Science4.OnClick += ScienceOnClick;
                Science1.UseSound = true;
                Science2.UseSound = true;
                Science3.UseSound = true;
                Science4.UseSound = true;
                Science1.Sound = MenuItemSelected.CreateInstance();
                Science2.Sound = MenuItemSelected.CreateInstance();
                Science3.Sound = MenuItemSelected.CreateInstance();
                Science4.Sound = MenuItemSelected.CreateInstance();
                e.Menu.Controls.Add(Science1);
                e.Menu.Controls.Add(Science2);
                e.Menu.Controls.Add(Science3);
                e.Menu.Controls.Add(Science4);
                int tC = 4;
                Control[] controls = (from c in e.Menu.Controls where CheckScienceTag(c.Tag) select c).ToArray();
                foreach (Control control in controls)
                {
                    Image image = new Image();
                    image.CanOffset = false;
                    image.Position = (control as TexturedButton).Position;
                    image.Enabled = true;
                    image.Visible = true;
                    image.Scale = 1f;
                    image.Depth = 0.72f;
                    image.Color = Color.White;
                    image.Tag = "Science" + (tC.ToString());
                    tC++;
                    image.Texture = RCS.GetObject<Texture2D>("Science/science_icon_bg");
                    e.Menu.Controls.Add(image);
                }
                EpisodeProgressCounter = 0;
                HexControl hexControl = new HexControl(RCS.GetObject<Texture2D>("Menues/Strategic/Hex2"), factory.GetHexFill(410, new Vector2(512, 512)));
                hexControl.Depth = 0.8f;
                foreach (Episode episode in selectedCampaing.Episodes)
                {
                    if (EpisodeProgressCounter < playerData.GetProgress(selectedCampaing.InternalName))
                    {
                        selectedEpisode = episode;
                        selectedMission = selectedEpisode.Missions[0];
                        hexControl[episode.Position].Color = Color.Yellow * 0.7f;
                        EpisodeProgressCounter += episode.Missions.Count;
                    }
                    else
                    {
                        hexControl[episode.Position].Color = Color.White * 0.8f;
                    }

                    if (EpisodeProgressCounter < playerData.GetProgress(selectedCampaing.InternalName))
                    {
                        hexControl[episode.Position].Color = new Color(53, 234, 28) * 0.7f;
                        foreach (int cell in episode.Cells)
                            hexControl[cell].Color = new Color(53, 234, 28) * 0.7f;
                    }
                    hexControl[episode.Position].Tag = episode;
                    hexControl[episode.Position].OnClick += new Action<Cell>(hexControl_OnClick);
                }
                textManager.Text = selectedEpisode.Name + "\n\n\n\n\n" + selectedEpisode.Description;
                textManager.Parse();
                e.Menu.Controls.Add(hexControl);
                /*
                foreach (Episode episode in selectedCampaing.Episodes)
                {
                    AnimatedButton animated = new AnimatedButton(SSL.DescriptorList["StrategicEpisodeSelection"]);
                    animated.Position = episode.Position;
                    animated.Origin = new Vector2(32, 32);
                    if (EpisodeProgressCounter < playerData.GetProgress(selectedCampaing.InternalName))
                    {
                        animated.Enabled = true;
                        EpisodeProgressCounter += episode.Missions.Count;
                    }
                    else
                    {
                        animated.Enabled = false;
                    }

                    animated.CanOffset = true;
                    animated.Depth = 0.8f;
                    animated.Color = animated.Enabled ? Color.Khaki : Color.Gray;
                    animated.Tag = episode;
                    animated.OnClick += new EventHandler(animated_OnClick);
                    e.Menu.Controls.Add(animated);

                }
                */
                EpisodeProgressCounter = 0;
                foreach (Episode ep in selectedCampaing.Episodes)
                {
                    if (ep != selectedEpisode)
                        EpisodeProgressCounter += ep.Missions.Count;
                    else
                        break;
                }

                e.Menu.InitializeControls();
            }
            else if (e.Menu == Manager.Menues["Mission"])
            {
                if (TutorialMode)
                    if (TutorialProgress == 4)
                    {
                        e.Menu.MessageBox.Text = LocalizationData.Tutorial4;
                        e.Menu.MessageBox.Show(true);
                        TutorialProgress++;
                    }
                MissionOffset = Vector2.Zero;
                textManager.Settings.Width = 200;
                textManager.Settings.Offset = new Vector2(545, 50);

                e.Menu.Controls.Clear();
                e.Menu.Controls.Add(new AdControl(adManager) { Position = new Vector2(252, 415), Scale = 1, Depth = 0 });
                HybridButton LeftMission = new HybridButton(RCS.GetObject<Texture2D>("Menues/LeftButton"), RCS.GetObject<Texture2D>("Menues/LeftButton"), new Vector2(43, 444));
                LeftMission.Origin = new Vector2(0, 62);
                LeftMission.NextMenu = "%Back%";
                LeftMission.CanOffset = false;
                LeftMission.Depth = 0.01f;
                LeftMission.HoverColor = new Color(50, 238, 50);
                LeftMission.UseSound = true;
                LeftMission.Sound = MenuItemSelected.CreateInstance();
                LeftMission.Font = Font;
                LeftMission.TextPosition = -LeftMission.Origin + new Vector2(50, 23);
                LeftMission.Text = LocalizationData.Back;
                HybridButton RightMission = new HybridButton(RCS.GetObject<Texture2D>("Menues/RightButton"), RCS.GetObject<Texture2D>("Menues/RightButton"), new Vector2(757, 444));
                RightMission.Origin = new Vector2(172, 62);
                RightMission.CanOffset = false;
                RightMission.Depth = 0.01f;
                RightMission.HoverColor = new Color(50, 238, 50);
                RightMission.Font = Font;
                RightMission.UseSound = true;
                RightMission.Sound = MenuItemSelected.CreateInstance();
                RightMission.TextPosition = -RightMission.Origin + new Vector2(60, 23);
                RightMission.Text = LocalizationData.Play;
                RightMission.OnClick += new EventHandler(RightMission_OnClick);

                e.Menu.Controls.Add(LeftMission);
                e.Menu.Controls.Add(RightMission);
                e.Menu.Controls.Add(new Image() { Texture = RCS.GetObject<Texture2D>("Menues/Strategic/Strategy"), Position = Vector2.Zero, Depth = 0.1f });
                e.Menu.Controls.Add(new Image() { Texture = RCS.GetObject<Texture2D>("Menues/Strategic/Screen"), Position = Vector2.Zero, Depth = 0.7f });
                e.Menu.Controls.Add(PopupMB);

                int Counter = EpisodeProgressCounter;
                if (EpisodeProgressCounter == playerData.GetProgress(selectedCampaing.InternalName) - 1)
                {
                    if (!String.IsNullOrWhiteSpace(selectedEpisode.EpisodePopup))
                    {
                        PopupTextManager.Text = selectedEpisode.EpisodePopup;
                        PopupTextManager.Parse();
                        PopupMB.Show(true);
                    }
                }
                foreach (Mission mission in selectedEpisode.Missions)
                {
                    Vector2 Position = Vector2.Zero;
                    if (Counter - EpisodeProgressCounter == 0 || Counter - EpisodeProgressCounter == selectedEpisode.Missions.Count - 1)
                    {
                        Position = new Vector2(150 + (Counter - EpisodeProgressCounter) * 256, 240);
                    }
                    else
                    {
                        bool Even = (Counter - EpisodeProgressCounter - 1) % 2 == 0;
                        if (Even)
                        {
                            Position = new Vector2(150 + (Counter - EpisodeProgressCounter) * 256, 140);
                        }
                        else
                        {
                            Position = new Vector2(150 + (Counter - EpisodeProgressCounter) * 256, 340);
                        }
                    }
                    Position.Y -= 30;
                    TexturedButton tb = new TexturedButton(RCS.GetObject<Texture2D>("Menues/Strategic/selection_tactical"), RCS.GetObject<Texture2D>("Menues/Strategic/selection_tactical"), Position);
                    tb.CanOffset = true;
                    tb.Scale = 0.5f;
                    tb.Origin = new Vector2(128, 128);
                    tb.Color = Counter < playerData.GetProgress(selectedCampaing.InternalName) ? Color.White : Color.Black;
                    if (tb.Color == Color.White)
                        selectedMission=mission;
                    tb.Depth = 0.8f;
                    tb.Enabled = Counter < playerData.GetProgress(selectedCampaing.InternalName) ? true : false;
                    tb.Tag = mission;
                    tb.OnClick += new EventHandler(tb_OnClick);
                    e.Menu.Controls.Add(tb);
                    Counter++;

                }
                (from control in e.Menu.Controls where control.Tag == selectedMission select control).First().Color = Color.Gray;
                textManager.Text = selectedMission.Name + "\n\n\n\n\n" + selectedMission.Description;
                textManager.Parse();
                e.Menu.InitializeControls();
            }
        }
 /// <summary>
 /// Constructs a single resource document
 /// </summary>
 public SingleResourceDocument(IResourceObject primaryData, IResourceObject[] relatedData, IMetadata metadata)
 {
     PrimaryData = primaryData;
     RelatedData = relatedData;
     Metadata    = metadata;
 }
 /// <summary>
 /// Constructs a resource collection document
 /// </summary>
 public ResourceCollectionDocument(IResourceObject[] primaryData, IResourceObject[] relatedData, IMetadata metadata)
 {
     PrimaryData = primaryData;
     RelatedData = relatedData;
     Metadata = metadata;
 }
        private void update()
        {
            lock (locker)
            {
                try
                {
                    startQueued();

                    for (int i = 0; i < downloading.Count; i++)
                    {
                        var down = downloading[i];
                        switch (down.dtype)
                        {
                        case LoadType.File:
                        {
                            Task            task = down.Task;
                            IResourceObject res  = null;

                            if (task.Status == TaskStatus.RanToCompletion)
                            {
                                switch (down.type)
                                {
                                case ResourceType.Image:
#if ANDROID
                                    Task <Bitmap> t = (Task <Bitmap>)task;
                                    res = new ImageResource(t.Result);
#elif IOS
                                    Task <UIImage> t = (Task <UIImage>)task;
                                    res = new ImageResource(t.Result);
#else
                                    throw new NotImplementedException();
#endif
                                    if (down.store)
                                    {
                                        resources.Add(down.path.OriginalString, res);
                                    }

                                    downloading.RemoveAt(i);
                                    i--;
                                    for (int j = 0; j < down.Callbacks.Count; j++)
                                    {
                                        Delegate del = (Delegate)down.Callbacks[j];
                                        del.DynamicInvoke(res);
                                        //down.Callbacks[j](res);
                                    }
                                    break;
                                }
                            }
                        }
                        break;

                        case LoadType.Download:
                        {
                            down.client.Dispose();
                            var task = (Task <byte[]>)down.Task;
                            if (task.Status == TaskStatus.RanToCompletion)
                            {
                                // success
                                IResourceObject res = null;
                                switch (down.type)
                                {
                                case ResourceType.Image:
                                    res = new ImageResource(task.Result);
                                    if (task.Result.Length < 10)
                                    {
                                        // decode error
                                        string error = WebUtil.GetASCIIString(task.Result);
                                        continue;
                                    }

                                    break;

                                case ResourceType.String:
                                    res = new StringResource(task.Result);
                                    break;
                                }

                                if (down.store)
                                {
                                    resources.Add(down.path.OriginalString, res);
                                }

                                downloading.RemoveAt(i);
                                i--;

                                for (int j = 0; j < down.Callbacks.Count; j++)
                                {
                                    Delegate del = (Delegate)down.Callbacks[j];
                                    del.DynamicInvoke(res);
                                    //down.Callbacks[j](res);
                                }
                            }
                            else if (task.Status == TaskStatus.Canceled ||
                                     task.Status == TaskStatus.Faulted)
                            {
                                // failure
                                downloading.RemoveAt(i);
                                i--;

                                for (int j = 0; j < down.failureCallbacks.Count; j++)
                                {
                                    down.failureCallbacks[j]();
                                }
                            }
                        }
                        break;
                        }
                    }
                }
                catch (Exception ex)
                {
                    Debug.WriteLine(ex.ToString());
                    if (ex is WebException)
                    {
                        WebException web = (WebException)ex;
                        using (Stream stream = web.Response.GetResponseStream())
                        {
                            StreamReader reader = new StreamReader(stream);
                            string       data   = reader.ReadToEnd();
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Allows implementers to control how a new resource's ID should be set.
        /// </summary>
        protected virtual Task SetIdForNewResource(IResourceObject resourceObject, object newObject, IResourceTypeRegistration typeRegistration)
        {
            typeRegistration.IdProperty.SetValue(newObject, resourceObject.Id);

            return(Task.FromResult(0));
        }
Example #35
0
        public override void Setup(Material mat, ref RenderOperation op)
        {
            if (mode == RenderMode.Depth)
            {
                Matrix lightPrjTrans;
                Matrix.Multiply(ref op.Transformation, ref EffectParams.DepthViewProj, out lightPrjTrans);
                shdVtxShader.SetValue("mvp", ref lightPrjTrans);
            }
            else if (mode == RenderMode.DeferredNormal)
            {
                Matrix worldView = op.Transformation * EffectParams.CurrentCamera.ViewMatrix;
                Matrix mvp       = worldView * EffectParams.CurrentCamera.ProjectionMatrix;
                nrmGenVShader.SetValue("mvp", ref mvp);
                nrmGenVShader.SetValue("worldView", ref worldView);

                if (!stateSetted)
                {
                    ShaderSamplerState state = new ShaderSamplerState();
                    state.AddressU      = TextureAddressMode.Wrap;
                    state.AddressV      = TextureAddressMode.Wrap;
                    state.AddressW      = TextureAddressMode.Wrap;
                    state.MinFilter     = TextureFilter.Linear;
                    state.MagFilter     = TextureFilter.Linear;
                    state.MipFilter     = TextureFilter.Linear;
                    state.MaxAnisotropy = 8;
                    state.MipMapLODBias = 0;

                    nrmGenPShader.SetSamplerState("texDif", ref state);

                    ResourceHandle <Texture> clrTex = mat.GetTexture(0);
                    if (clrTex == null)
                    {
                        nrmGenPShader.SetTexture("texDif", noTexture);
                    }
                    else
                    {
                        nrmGenPShader.SetTexture("texDif", clrTex);
                    }
                }
            }
            else
            {
                Matrix mvp = op.Transformation * EffectParams.CurrentCamera.ViewMatrix * EffectParams.CurrentCamera.ProjectionMatrix;

                vtxShader.SetValue("mvp", ref mvp);
                vtxShader.SetValue("world", ref op.Transformation);

                Matrix lightPrjTrans;
                Matrix.Multiply(ref op.Transformation, ref EffectParams.DepthViewProj, out lightPrjTrans);

                vtxShader.SetValue("smTrans", lightPrjTrans);

                IResourceObject res = op.Sender as IResourceObject;
                if (res != null)
                {
                    pixShader.SetValue("amount", new Vector2(res.AmountPer, res.MaxValue));
                }
                else
                {
                    pixShader.SetValue("amount", new Vector2(123, 456));
                }

                WorldObject wo = op.Sender as WorldObject;
                if (wo != null)
                {
                    pixShader.SetValue("visiblity", wo.Visiblity);
                }
                else
                {
                    pixShader.SetValue("visiblity", 0.0f);
                }

                if (!stateSetted)
                {
                    ShaderSamplerState state = new ShaderSamplerState();
                    state.AddressU      = TextureAddressMode.Wrap;
                    state.AddressV      = TextureAddressMode.Wrap;
                    state.AddressW      = TextureAddressMode.Wrap;
                    state.MinFilter     = TextureFilter.Anisotropic;
                    state.MagFilter     = TextureFilter.Anisotropic;
                    state.MipFilter     = TextureFilter.Linear;
                    state.MaxAnisotropy = 8;
                    state.MipMapLODBias = 0;


                    pixShader.SetValue("k_a", mat.Ambient);
                    pixShader.SetValue("k_d", mat.Diffuse);


                    pixShader.SetSamplerState("texDif", ref state);

                    ResourceHandle <Texture> clrTex = mat.GetTexture(0);
                    if (clrTex == null)
                    {
                        pixShader.SetTexture("texDif", noTexture);
                    }
                    else
                    {
                        pixShader.SetTexture("texDif", clrTex);
                    }


                    stateSetted = true;
                }
            }
        }
Example #36
0
        public Task Serialize(IResourceObject resourceObject, JsonWriter writer)
        {
            if (resourceObject == null)
            {
                writer.WriteNull();
                return(Task.FromResult(0));
            }

            writer.WriteStartObject();

            writer.WritePropertyName(TypeKeyName);
            writer.WriteValue(resourceObject.Type);
            writer.WritePropertyName(IdKeyName);
            writer.WriteValue(resourceObject.Id);

            if (resourceObject.Attributes != null && resourceObject.Attributes.Any())
            {
                writer.WritePropertyName(AttributesKeyName);
                writer.WriteStartObject();
                foreach (var attribute in resourceObject.Attributes)
                {
                    writer.WritePropertyName(attribute.Key);
                    if (attribute.Value == null)
                    {
                        writer.WriteNull();
                    }
                    else
                    {
                        if (attribute.Value.Type == JTokenType.Integer)
                        {
                            var ulongValue = attribute.Value.Value <ulong>();
                            if (ulongValue > long.MaxValue)
                            {
                                writer.WriteRawValue(ulongValue.ToString());
                                continue;
                            }
                        }
                        attribute.Value.WriteTo(writer);
                    }
                }
                writer.WriteEndObject();
            }

            if (resourceObject.Relationships != null)
            {
                var relationshipsToRender = resourceObject.Relationships.Where(r => r.Value != null).ToArray();
                if (relationshipsToRender.Any())
                {
                    writer.WritePropertyName(RelationshipsKeyName);
                    writer.WriteStartObject();
                    foreach (var relationship in relationshipsToRender)
                    {
                        if (relationship.Value == null)
                        {
                            continue;
                        }
                        writer.WritePropertyName(relationship.Key);
                        RelationshipObjectFormatter.Serialize(relationship.Value, writer);
                    }
                    writer.WriteEndObject();
                }
            }

            if (resourceObject.SelfLink != null)
            {
                writer.WritePropertyName(LinksKeyName);
                writer.WriteStartObject();
                writer.WritePropertyName(SelfLinkKeyName);
                LinkFormatter.Serialize(resourceObject.SelfLink, writer);
                writer.WriteEndObject();
            }

            if (resourceObject.Metadata != null)
            {
                writer.WritePropertyName(MetaKeyName);
                MetadataFormatter.Serialize(resourceObject.Metadata, writer);
            }

            writer.WriteEndObject();

            return(Task.FromResult(0));
        }
Example #37
0
 public YaDiskApi(IInMemoryJsonStorage <UserAccount> storage)
 {
     Drive     = new YaDiskCloudDrive(storage);
     Resources = new YaDiskResources();
 }