C# Artemis Entity System Tutorial


Artemis is a high performance Entity System framework for games, originally written in Java by Arni Arent and Tiago Costa, now ported to C#.
Its goal is to provide a clean API to abstract your game world organization into entities, components and systems.
Artemis has no dependencies (for PC, in Xbox and Windows Phone 7 we have one) and can be used with any game framework or library, 2D or 3D, and even multiplatform, if you use it with Mono/MonoTouch/Mono4Android.

Differences from the original version

We support all the features included in the original Java version, but we’ve also added the following features:

  • Multithreading Support (two ways of doing this)
  • Specialized System templates for your multithreading needs
  • Communication between Systems using a Blackboard approach
  • Bugs fixed, performance improvements
  • Xbox/WP7/Mono(Android/Linux/Mac/iOS) support
  • Events for intercepting adding/removal of entities/components
  • Blackboard for sharing common objects between systems
  • Entity Pool (to make objects reusable, minimize garbage collection activity, improve performance)
  • Small goodies, like feeding the EntityWorld with whole Entities(maybe loading from external resources), enabling/disabling systems and entities, getting Entity tag, API shortcuts(see unit tests for more on this), etc.

Getting Started

  • Entities are only an aggregation of Components, identified by a unique id
  • Components are only data
  • Systems publish/subscribe to Components, creating behavior

There is much more to tell about this paradigm and we already have rich articles which inspired this framework. Some of them:

And many more can be found here.

Your components must inherit from the class Component or ComponentPoolable if you want it to use the Artemis Component Pool. Example:

//Add this Attribute and extend ComponentPoolable if you want your Component to use Artemis Component Pool
[Artemis.Attributes.ArtemisComponentPool(InitialSize=5,Resizes=true, ResizeSize=20, isSupportMultiThread=false)]
class Velocity : ComponentPoolable
{
        private float velocity;
        private float angle;

        public Velocity() { }

        public Velocity(float vector)
        {
            velocity = vector;
        }

        public Velocity(float velocity, float angle)
        {
            this.velocity = velocity;
            this.angle = angle;
        }

        public float Speed {
            get { return velocity;}
            set { velocity = value; }
        }

        public float Angle
        {
            get { return angle; }
            set { angle = value;}
        }

        public void AddAngle(float a)
        {
            angle = (angle + a) % 360;
        }

        public float AngleAsRadians
        {
            get { return (float)Math.PI * angle / 180.0f; }
        }

        //obligatory for poolable Components
        public void Cleanup()
        {
             coords = Vector3.Zero;
        }
}

A sample for entity assembling:

Entity e = world.CreateEntity(); // you can pass an unique ID as first parameter.
e.AddComponent(new Transform(200,400));
e.AddComponentFromPool(new Velocity(2.4f,0.9f)); // use AddComponentFromPool if the Component extend from ComponentPoolable
e.Refresh();// always call Refresh() when adding/removing components!

Your systems should inherit from one of the following templates:

  • EntitySystem – the simplest system template, not tied to components, good for stuff like collision
  • EntityProcessingSystem – a template for processing many entities, tied to components
  • IntervalEntitySystem – a simple system template, not tied to components, process periodically, based on world delta.
  • IntervalEntityProcessingSystem – a template that process entities periodically, based on world delta, tied to components.
  • ParallelEntityProcessingSystem – a template to leverage your multicore CPU for processing many entities, tied to components
  • ProcessingSystem – a template that process whichever logic you desire, without being tied to components
  • QueueProcessingSystem – instead of filter by components, this system process entities that are added to its public queue
  • HybridQueueProcessingSystem – process entities by queue and components
  • QueueProcessingSystemThreadSafe – process entities by a public static thread safe queue
  • FQueueSystemProcessingThreadSafe – process anything (not only entities) added to its public static thread safe queue
  • TagSystem – a simple system template, not tied to components, process a tagged entity
  • IntervalTagSystem – a simple system template, not tied to components, process a tagged entity periodically, based on world delta.
  • DelayedEntitySystem – a simple system template that starts process after a given time, based on world delta.
  • DelayedEntityProcessingSystem – a template that starts processing entities after a given time, based on world delta. Tied to components

And here is a system example, using Velocity and Transform components to create the Movement behavior:

//Add this attribute so the EntityWorld knows the systems it should execute, use the Layer to determine execution order
[Artemis.Attributes.ArtemisEntitySystem(ExecutionType = ExecutionType.UpdateSynchronous, Layer = 1)]
public class MovementSystem : EntityProcessingSystem {

    public MovementSystem() : base(Aspect.All(typeof(Transform), typeof(Velocity))) { }

    public override void Initialize() {}

    public override void Process(Entity e) {
        Velocity velocity = e.getComponent();
        float v = velocity.Speed;

        Transform transform = e.getComponent();

        float r = velocity.AngleAsRadians;

        float xn = transform.X + (TrigLUT.Cos(r) * v * world.Delta);
        float yn = transform.Y + (TrigLUT.Sin(r) * v * world.Delta);

        transform.SetLocation(xn, yn);
    }
}

On your game initialization, create a new EntityWorld and initialize it:

var world = new EntityWorld();
world.InitializeAll(true); // pass true/false to enable/disable DataAttributes on Systems

Update or Draw the World:

world.Update();
world.Draw(); // do this on a different loop, e.g: every 15 ms

And you are good to go. The Entity object has some intuitive methods like Delete(), GetComponent(), RemoveComponent(), which you can see in action on the example game.

Aspects

Aspects are used in the constructor of your entity systems to tell them which components they should be interested. At the moment we have three methods to build Aspects:

  • Aspect.All(params Type[] types) – Most of the time you will use this option, so the system processes entities which have all components of the Aspect.
  • Aspect.One(params Type[] types) – The system will process entities which have at least one of the components of the Aspect.
  • Aspect.Exclude(params Type[] types) – The system will not process entities which have at least one of the components of the Aspect.

You can also compose your Aspect utilizing these methods together, example:

public LogEnemySystem() : base(Aspect.All(typeof(Health)).One(typeof(Koopa),typeof(Goomba),typeof(Magikoopa)).exclude(typeof(Ghost))) {}

Extending Systems

It’s quite simple to extend the EntitySystem with your own logic, an example can be found here, which gives us less setup on systems which only uses Aspect.All(), example:

[Artemis.Attributes.ArtemisEntitySystem(ExecutionType = ExecutionType.UpdateSynchronous, Layer = 1)]
public class MovementSystem : EntityComponentProcessingSystem {
    public override void Process(Entity e,Transform transform, Velocity velocity) {
        float v = velocity.Speed;
        float r = velocity.AngleAsRadians;

        float xn = transform.X + (TrigLUT.Cos(r) * v * world.Delta);
        float yn = transform.Y + (TrigLUT.Sin(r) * v * world.Delta);

        transform.SetLocation(xn, yn);
    }
}

Templates

Create your entity templates to avoid manually creating and configuring entities:

[Artemis.Attributes.ArtemisEntityTemplate("BulletExplosion")]
public EnemyTemplate : Artemis.IEntityTemplate {
	public Entity BuildEntity(Entity e,EntityWorld entityWorld, params object[] args) {
		e.AddComponent(new Transform(200,400));
		e.AddComponent(new Velocity(2.4f,0.9f));
	}
}

Create your entities with the template applied:

var enemy = world.CreateEntityFromTemplate("BulletExplosion",array_of_parameters); // you can also use an alternative signature passing a custom unique id as the first parameter.
enemy.Refresh();

Blackboard

You can easily share common objects between systems using the blackboard, here is a XNA example, on the game initialization:

EntitySystem.BlackBoard.SetEntry("ContentManager", Content);
EntitySystem.BlackBoard.SetEntry("GraphicsDevice", GraphicsDevice);
EntitySystem.BlackBoard.SetEntry("SpriteBatch", spriteBatch);

Then you can retrieve the objects inside systems like this:

this.device = EntitySystem.BlackBoard.GetEntry("GraphicsDevice");
this.spriteBatch = EntitySystem.BlackBoard.GetEntry("SpriteBatch");
this.contentManager = EntitySystem.BlackBoard.GetEntry("ContentManager");

Games created with Artemis C#

Magnetic by Nature – by Tripleslash Studios. They also have a Kickstarter running for the game, support it!

Discussion, issues, suggestions

We have a forum section here.

 Use It !!!

,

  1. #1 by コピー時計 on 15 de julho de 2017 - 7:11 pm

    http://www.arcta.net/ロレックス コピー 東京
    [url=http://www.sedonaspa-ubud.com/]コピー時計[/url]

  2. #2 by guexcqh on 15 de julho de 2017 - 9:23 pm

    コーロンスポーツは中国1位スポーツウェア企業家‘安打(ANTA)’と合作会社を設立して、中国をはじめとして香港、マカオなど中華圏市場全体を本格的に攻略する。 鳥居の側では出店の用意がされていたから、これから賑わうのだろう。 [url=http://libertyprof.ge/iron/m2_1/index.html]m2 ドライバー[/url]
    ヒラリー(・クリントン民主党候補)に言っておいてくれ。 M2の#6レスキューとは10Y違いで打ち分ける事が出来る! スプーンは撮影忘れたが、殆ど210Y以上で安定しており、何より真っ直ぐで低いティ位置にして左足踵よりボール1個分右寄りにアドレスすれば、低い球で打てるからドライバーが不安な時はスプーンで十分だ。
    [url=http://victoriabusinesscenter.ro/long/mp59_1/index.html]mp-59 アイアン[/url] 単品のヘッドカバーだけで傷付く事も無いと思われる。 他の選手ではMF堂安律(18、G大阪)、MF市丸瑞希(20、G大阪)のプレーぶりが光った。
    [url=http://www.ascendance-guild.net/x2hot/iron_1/index.html]キャロウェイゴルフ x2 hot pro[/url]
    ――インフォーマル経済は今後どうなっていくのでしょうか?小川:インフォーマル経済は、アフリカや中南米、東南アジアと広範囲におよび、従事している人口から見ても規模は大きい。  最初ワゴンセールのアディダスが有ったが、やはり新しいモデルのナイキが気に成り其方を購入する事に。 [url=http://dwenger-lounge.de/titlei/putter_1/index.html]スコッティキャメロン ニューポート2 2014[/url]
    私がゴルフを始めた当初は「44インチ・310~320g」ぐらいがドライバーの標準スペックでしたから、重量そのものは、ほぼ18年前の「アベレージモデル」相当。 其れ等は謂わばオートマチック系の弾道のヘッドということですね。
    [url=http://arrahn.com.my/llway/xhot_1/index.html]x hot pro[/url] このクラブ、ティーショットで使うには左が怖いので、ちょっと使いにくいんです。 1054年 – この日から数ヶ月にわたり超新星SN 1054が観測され、日中でも確認できるほどの光を放つ。
    [url=http://versicherungsberater-blog.de/mb/714_1/index.html]mb 714 アイアン 最安値[/url]

  3. #3 by سرور مجازی ویندوز on 15 de julho de 2017 - 9:52 pm

    I used to be suggested this site by the use of my own step-brother. I’m not certain whether this informative article can be provided by your ex as no one realize such a number of concerning the problem.. سرور مجازی ویندوز You happen to be amazing! Thank you!

  4. #4 by http://www.candicoindia.com/louboutinnewyork.asp on 15 de julho de 2017 - 9:54 pm

    This product or service was at such a very good price I by no means thought all premium is quite excellent. Its gorgeous. It mother is going to like they on Christmas time early morning anytime she opens gifts and it styles as though I invested even more, still pricing ended up being only great!!

  5. #5 by Minihaziko on 15 de julho de 2017 - 9:56 pm

    below youll come across the link to some web-sites that we believe you need to visit

  6. #6 by http://www.etiquette-icb.fr/outlet.php on 15 de julho de 2017 - 11:52 pm

    That item had been at such a great amount I not idea the actual excellence is therefore exceptional. It’s stunning. This particular mother may like this on top of Xmas morning when she opens up present and it appears as though I invested a lot more, still cost had been really great!!

  7. #7 by cheap nike roshe run on 16 de julho de 2017 - 2:16 am

    We have bought our brand name concerning bracelet some circumstances. Every one is extremely pretty, made well, cannot tarnish additionally important based on which someone you purchase furthermore who one give things in order to.

  8. #8 by http://www.bazaaralosra.com/wp-black.php on 16 de julho de 2017 - 2:17 am

    Our device is at that awesome pricing I never consideration on grade is therefore exceptional. Its breathtaking. Your mother will likely love this concerning Holiday morning anytime she opens gift and it styles like I devoted a lot more, still prices was only awesome!!

  9. #9 by Antione Holmon on 16 de julho de 2017 - 4:24 am

    ver partidos online

  10. #10 by replica christian louboutin sale on 16 de julho de 2017 - 4:25 am

    I have purchased it brand name concerning bracelet a few occasions. Every a person is super attractive, has made very well, does not tarnish to important depending on which any you buy then just who a person present that it at.

  11. #11 by Keithflesk on 16 de julho de 2017 - 5:04 am

    buy cheap levitra canada
    levitra prices
    levitra cheap online
    [url=http://levitraaiu.com/]levitra cost[/url]
    cheap viagra levitra

  12. #12 by http://www.bmx-saintquentin.com/flats.asp on 16 de julho de 2017 - 5:43 am

    That supplement ended up being at that ideal cost I not thought the actual top quality would be and so exceptional. It is beautiful. This one mom can really like information technology in Christmas day where she opens up gifts and it styles as though I devoted even more, still cost had been just awesome!!

  13. #13 by http://www.assurance-decottignies.fr/boots.asp on 16 de julho de 2017 - 5:43 am

    I’ve purchased this one brand concerning bracelet some times. Every single one is very cute, done well, cannot tarnish to significant depending on what definitely one you buy as well as that a person offer this towards.

  14. #14 by http://finedocs.com/loubouton.asp on 16 de julho de 2017 - 6:10 am

    Our product was at such a ideal price tag I never ever considered your quality is and so excellent. It is stunning. That mama might love things regarding Christmas morning when she opens up present therefore appearance like I invested a lot more, however rates had been simply ideal!!

  15. #15 by http://www.counterweight.org/dresses.aspx on 16 de julho de 2017 - 6:10 am

    I’ve purchased the brand concerning bracelet some circumstances. Every single one is ultra cute, made well, does not tarnish and/or important based on what an you buy furthermore who we provide that it towards.

  16. #16 by cartier love bracelet replica on 16 de julho de 2017 - 6:31 am

    I have purchased this one brand to bracelet a few instances. Every single one is very sweet, done very well, cannot tarnish additionally meaningful depending on what someone you purchase to which you provide information technology at.

  17. #17 by http://www.gtech-chauffage.com/clshoes.asp on 16 de julho de 2017 - 7:40 am

    This goods ended up being with that very good pricing I never thought on excellent is so that exceptional. It is breathtaking. This mom is going to appreciate that at Christmas time day once she opens up gifts and it appearances as though I invested more, then again pricing is really great!!

  18. #18 by property valuers sydney on 16 de julho de 2017 - 9:19 am

    With havin so much content do you ever run into any problems of plagorism or
    copyright violation? My site has a lot of completely unique content I’ve either written myself or outsourced but it looks like a lot of it is popping it
    up all over the internet without my authorization. Do you know any ways
    to help stop content from being ripped off? I’d truly appreciate it.

  19. #19 by http://www.rockma.se/moncler.asp on 16 de julho de 2017 - 11:29 am

    The product or service was in that ideal expense I did not thought on high quality is so exceptional. It is stunning. The mom is going to love things in Holiday morning where she opens present therefore styles like I spent more, although pricing ended up being exclusively awesome!!

  20. #20 by http://www.fem.co.uk/ladypeep.aspx on 16 de julho de 2017 - 11:56 am

    This particular supplement is with such a awesome amount I by no means consideration the excellence would be hence excellent. Its gorgeous. This particular mom will likely adore that at Holiday early morning when she opens present therefore seems like I invested even more, although cost ended up being just great!!

  21. #21 by http://www.ljusihus.se/moncleroutlet.aspx on 16 de julho de 2017 - 12:16 pm

    This one goods ended up being with such a awesome amount I do not thought some sort of excellent would be quite exceptional. It is awesome. This particular mama does adore that regarding Christmas time day where she opens present therefore appearances as though I devoted far more, then again pricing ended up being really ideal!!

  22. #22 by hermes bracelet replica on 16 de julho de 2017 - 12:17 pm

    This particular product or service was with that awesome pricing I never ever believed all excellence would be so that excellent. It is gorgeous. Your mother will likely really like information technology in Xmas morning once she opens gifts therefore appearance as though I devoted far more, however prices is exclusively awesome!!

  23. #23 by http://www.hexpilot.com/help_zanotti.aspx on 16 de julho de 2017 - 1:30 pm

    The device was with that awesome rate I never attention on premium would be so exceptional. It is pretty. It mom will appreciate information technology on top of Xmas day when she opens gifts and it seems as though I invested significantly more, although cost is just very good!!

  24. #24 by additional info on 16 de julho de 2017 - 1:38 pm

    Every once in a while we decide on blogs that we read. Listed beneath are the most recent internet sites that we decide on

  25. #25 by Nha ban TPHCM on 16 de julho de 2017 - 1:48 pm

    I used to be more than happy to search out this web-site.I wanted to thanks on your time for this wonderful learn!! I definitely having fun with every little bit of it and I’ve you bookmarked to check out new stuff you weblog post.

  26. #26 by look here on 16 de julho de 2017 - 1:52 pm

    although internet websites we backlink to beneath are considerably not associated to ours, we really feel they are actually worth a go via, so possess a look

  27. #27 by Mua ban nha dat TPHCM on 16 de julho de 2017 - 2:13 pm

    I like the helpful information you provide in your articles. I’ll bookmark your weblog and check again here frequently. I am quite certain I’ll learn a lot of new stuff right here! Good luck for the next!

  28. #28 by Fashion on 16 de julho de 2017 - 2:30 pm

    I genuinely enjoy looking at on this internet site, it holds wonderful posts. “One should die proudly when it is no longer possible to live proudly.” by Friedrich Wilhelm Nietzsche.

  29. #29 by Poradnia Psychologiczna Gorzow Wlkp Czeresniowa on 16 de julho de 2017 - 2:44 pm

    Appreciate it for helping out, fantastic info .

  30. #30 by cartier juste un clou replica on 16 de julho de 2017 - 3:26 pm

    I have purchased your brand name regarding bracelet some period. Every single a person is extremely attractive, established well, cannot tarnish additionally important based on what single you purchase and that you promote information technology to.

  31. #31 by http://www.paradis-haver.dk/laboutin.asp on 16 de julho de 2017 - 3:50 pm

    This particular supplement is with that awesome pricing I by no means thought the good is quite exceptional. Its awesome. Our mama can love they on Christmas early morning where she starts present and it appearance as though I devoted alot more, however cost was only ideal!!

  32. #32 by cheap nike roshe run on 16 de julho de 2017 - 3:51 pm

    We have bought the brand name of bracelet a few occasions. Every one is super pretty, created very well, cannot tarnish plus meaningful based on which kind of any you buy as well as just who shoppers give they at.

  33. #33 by cheap nike roshe run on 16 de julho de 2017 - 4:11 pm

    It supplement was at that awesome cost I did not considered ones good would be and so excellent. It’s beautiful. This one mom might prefer this concerning Christmas time morning once she opens up present therefore appears as though I spent far more, but rates had been just awesome!!

  34. #34 by Psycholog NFZ Gorzow Wlkp on 16 de julho de 2017 - 4:27 pm

    I got what you intend, thanks for posting .Woh I am delighted to find this website through google. “Success is dependent on effort.” by Sophocles.

  35. #35 by CharlesDiado on 16 de julho de 2017 - 4:52 pm

    wh0cd491806 [url=http://effexor.fail/]buy effexor[/url] [url=http://hydrochlorothiazide.world/]hydrochlorothiazide 12.5 mg[/url] [url=http://tamoxifen.mba/]tamoxifen[/url] [url=http://celebrex.mba/]celebrex[/url] [url=http://antabuse.tools/]antabuse[/url]

  36. #36 by Bennyempal on 16 de julho de 2017 - 4:56 pm

    wh0cd638761 [url=http://cytoxan.world/]cytoxan[/url] [url=http://myambutol.reisen/]myambutol[/url] [url=http://buyvitaminc.world/]vitamin c[/url] [url=http://hytrin.reisen/]hytrin[/url] [url=http://lukol.reisen/]home page[/url] [url=http://eulexin.world/]eulexin[/url] [url=http://buyclaritin.world/]claritin[/url] [url=http://tegretol.world/]tegretol[/url]

  37. #37 by Sherill Loberg on 16 de julho de 2017 - 5:09 pm

    I absolutely love your blog and find almost all of your post’s to be exactly what I’m looking for. can you offer guest writers to write content for you personally? I wouldn’t mind creating a post or elaborating on some of the subjects you write related to here. Again, awesome blog!

  38. #38 by home water filtration on 16 de julho de 2017 - 6:07 pm

    Is it OK to share on Tumblr? Keep up the excellent work!

  39. #39 by click this on 16 de julho de 2017 - 6:15 pm

    that would be the finish of this report. Right here you will come across some sites that we feel youll enjoy, just click the links over

  40. #40 by bankruptcy lawyers in ventura county on 16 de julho de 2017 - 6:37 pm

    It’s very trouble-free to find out any matter on web as compared to books, as I found this piece of writing at this web site.

  41. #41 by Psychoterapeuci Gorzow Wlkp on 16 de julho de 2017 - 6:41 pm

    What i do not understood is in truth how you’re now not really a lot more neatly-favored than you may be now. You are so intelligent. You recognize thus considerably relating to this topic, produced me for my part consider it from a lot of numerous angles. Its like men and women are not fascinated unless it’s something to accomplish with Lady gaga! Your personal stuffs excellent. Always handle it up!

  42. #42 by http://www.cheapmoncler.xyz/ on 16 de julho de 2017 - 7:28 pm

    This one supplement was at that great amount I do not considered the actual excellence is and so excellent. Its striking. The mother will likely adore it on top of Christmas time early morning after she opens up present and it appearances as though I devoted a great deal more, although rates ended up being only awesome!!

  43. #43 by Liberty Dentist on 16 de julho de 2017 - 7:51 pm

    Hola! I’ve been following your website for some time now and finally got the bravery to go ahead and give you a shout out from Atascocita Texas! Just wanted to say keep up the excellent job! Is it OK to share on Tumblr? Keep up the amazing work!

  44. #44 by emogetst on 16 de julho de 2017 - 8:23 pm

    』施設の中庭が見渡せる通路を歩きながら、帰れる安堵感からセイカがミコトをからかう。 Microsoft Office 2010からはOutlookがなくなったようで、代わりにOneNoteというのが入っています。 [url=http://www.key7jp.com/office2013-pro-32-22.html]ms office 2013 personal[/url]
    画面は、「スタート」(右クリック)→「コントロールパネル」→「システムとセキュリティ」→「Windows Update」で表示される。 なお、新しいプロバイダは、ソフトバンクで、どこでも持ち運べる最新のデータ通信カードです^^vこれは、価格24000円を、4800円で購入できました^^Microsoft.Office.Specialist2003ですから、だいぶ古い資格になってしまいました。
    [url=http://www.key7jp.com/microsoft-office365-proplus-3-56.html]office2013 personal 価格[/url] では、IE11を・・・これも超・超動きが遅くなり使い物にならない。 製品概要によりAtrust製品を深く知るのに加え、実機をご用意し、設定や管理の操作をご来場者さま自ら行っていただき、その高い管理性や用意な設定を体感することが可能です。
    [url=http://www.key7jp.com/microsoft-office365-proplus-5-57.html]office2013 メディア 購入[/url]
    上記Itmedia記事にもあるように、「クリップ・アート」検索でなくマイクロソフトのBing検索を使えば、以前と同じように、豊富な画像が検索できるのである。 内部スペックと言えば、より高速化されて Appleの独自CPUとなるA10Xプロセッサを搭載する可能性が高い。 [url=http://www.key7jp.com/Project-Professional-2016-51.html]ms office 2016 personal[/url]
    ウイルスメールの添付ファイル対策一般的に 『不審なファイルを開かない』 といった精神論的なウイルスメール対策は誰でも思いつきます。 でも、動作は前作より軽く推奨動作環境も変わりません。
    [url=http://www.key7jp.com/microsoft-windows-server2012-r2-7.html]windows sever 2012 永続[/url] この原因が分かるまで、3時間ぐらい 「あーでもない、こーでもない」ってやってました(汗)IME2007に変更すると、全く問題なくPhotoshop Elementsでスキャナが使えるようになりました。 まず、間違えなく、MySQL と Excel のバージョンの問題のようだ。
    [url=http://www.key7jp.com/office2013-5pc-60.html]office2010 personal 価格[/url]

  45. #45 by Cartier Love Bracelet Replica on 16 de julho de 2017 - 8:24 pm

    I’ve purchased it brand name concerning bracelet some instances. Every a person is extremely adorable, created well, cannot tarnish furthermore meaningful based on which a person you buy to just who you give this towards.

  46. #46 by CharlesDiado on 16 de julho de 2017 - 8:28 pm

    wh0cd638762 [url=http://costofcialis.us.com/]cialis cost[/url]

  47. #47 by CharlesDiado on 16 de julho de 2017 - 10:39 pm

    wh0cd712235 [url=http://karela.world/]generic karela[/url] [url=http://duphaston.world/]duphaston[/url] [url=http://hyzaar.world/]hyzaar[/url] [url=http://decadron.reisen/]decadron eye drops[/url] [url=http://desyrel.pro/]check out your url[/url] [url=http://micronase.reisen/]micronase[/url] [url=http://chloroquine.world/]buy chloroquine[/url]

(não será publicado)