Exemple #1
0
        public override void OnActivated()
        {
            var sprites = (ISpriteSheets)Game.Services.GetService (typeof(ISpriteSheets));

            m_life = sprites.GetSprite ("health_01");
            m_antitod = sprites.GetSprite ("antitod_potion_01");

            var infoEnt = CreateEntity ();
            infoEnt.Register (new Execute ());
            var infoMsg = new Loop (new ActionEntity(infoEnt, (_) => {
                UpdateInfoMessage (infoEnt);
            }));
            infoEnt.Get<Execute> ().Add (infoMsg, "info_loop");

            var feedbackEnt = CreateEntity ("hud_feedback");
            feedbackEnt.Register (new Execute ());
            feedbackEnt.Register (new Text (sprites.GetFont ("SpriteFont1")));
            feedbackEnt.Register (new Drawable (new Vector2 (570, Globals.CELL_HEIGHT * Globals.WORLD_HEIGHT), Color.Yellow));

            var hudIcon = CreateEntity ();
            hudIcon.Register (new Sprite (sprites.GetSprite("health_01")));
            hudIcon.Register (new Drawable (new Vector2 (0, Globals.CELL_HEIGHT * Globals.WORLD_HEIGHT)));

            hudIcon = CreateEntity ();
            hudIcon.Register (new Sprite (sprites.GetSprite("money_01")));
            hudIcon.Register (new Drawable (new Vector2 (100, Globals.CELL_HEIGHT * Globals.WORLD_HEIGHT)));

            hudIcon = CreateEntity ();
            hudIcon.Register (new Sprite (sprites.GetSprite("weapon_01")));
            hudIcon.Register (new Drawable (new Vector2 (200, Globals.CELL_HEIGHT * Globals.WORLD_HEIGHT)));

            hudIcon = CreateEntity ();
            hudIcon.Register (new Sprite (sprites.GetSprite("armor_01")));
            hudIcon.Register (new Drawable (new Vector2 (300, Globals.CELL_HEIGHT * Globals.WORLD_HEIGHT)));

            var textMsg = CreateEntity ("hud_health");
            textMsg.Register (new Text(sprites.GetFont ("SpriteFont1")));
            textMsg.Register (new Drawable (new Vector2 (40, Globals.CELL_HEIGHT * Globals.WORLD_HEIGHT), Color.Green));

            textMsg = CreateEntity ("hud_weapon");
            textMsg.Register (new Text(sprites.GetFont ("SpriteFont1")));
            textMsg.Register (new Drawable (new Vector2 (240, Globals.CELL_HEIGHT * Globals.WORLD_HEIGHT), Color.Green));

            textMsg = CreateEntity ("hud_money");
            textMsg.Register (new Text(sprites.GetFont ("SpriteFont1")));
            textMsg.Register (new Drawable (new Vector2 (140, Globals.CELL_HEIGHT * Globals.WORLD_HEIGHT), Color.Green));

            textMsg = CreateEntity ("hud_armor");
            textMsg.Register (new Text(sprites.GetFont ("SpriteFont1")));
            textMsg.Register (new Drawable (new Vector2 (340, Globals.CELL_HEIGHT * Globals.WORLD_HEIGHT), Color.Green));

            textMsg = CreateEntity ("hud_time");
            textMsg.Register (new Text(sprites.GetFont ("SpriteFont1")));
            textMsg.Register (new Drawable (new Vector2 (440, Globals.CELL_HEIGHT * Globals.WORLD_HEIGHT), Color.Green));
        }
Exemple #2
0
 public void TryPoison(Entity attacker, Entity defender)
 {
     if (attacker.Has<Poison> ()) {
         if (defender.Has<Health> ()) {
             float poisonChanceMult = defender.Has<PoisonChanceMultiplier> () ? defender.Get<PoisonChanceMultiplier> ().Multiplier : 1;
             if (Utils.DropChance ((int)(attacker.Get<Poison> ().Chance * poisonChanceMult))) {
                 if (defender.Has<Execute> ()) {
                     var poisonLoop = new Loop (new DoPoisonEntity (defender, attacker.Get<Poison> ().Damage, m_onPoisoned),
                                             attacker.Get<Poison> ().Speed);
                     defender.Get<Execute> ().AddNew (poisonLoop, "poison_effect");
                     IsPoisoned = true;
                 }
             }
         }
     }
 }
Exemple #3
0
        public override void OnActivated()
        {
            var sprites = (ISpriteSheets)Game.Services.GetService (typeof(ISpriteSheets));
            var world = (IWorld)Game.Services.GetService (typeof(IWorld));
            var gameState = (IGameState)Game.Services.GetService (typeof(IGameState));

            var mapGrid = world.GetLevel(gameState.Level);

            var player = CreateEntity ("player");

            player.Register (new State<PlayerState> (PlayerState.Idle));
            player.Register (new Health (gameState.PlayerHealth, gameState.PlayerHealthMax,
                                            () => OnHealthChanged(player)));
            player.Register (new Attack (Archetypes.Weapons[gameState.PlayerWeaponID]["attack"], Archetypes.Weapons[gameState.PlayerWeaponID]["attack_distance"], gameState.PlayerWeaponID));
            player.Register (new PointLight ((PointLight.DistanceType)gameState.PlayerViewDistanceType, Color.White));
            player.Register (new MoveSpeed (gameState.PlayerMoveSpeed));
            player.Register (new IFFSystem (Globals.IFF_PLAYER_ID, 2));
            player.Register (new Attackable (OnAttacked));
            player.Register (new Position (mapGrid.StairDown.X, mapGrid.StairDown.Y));
            player.Register (new Execute ());
            player.Register (new Poisonable (OnPoisoned));
            player.Register (new Sprite (sprites.GetSprite (string.Format("player_{0:D2}", gameState.PlayerSpriteID))));
            player.Register (new Drawable (new Vector2(mapGrid.StairDown.X * Globals.CELL_WIDTH, mapGrid.StairDown.Y * Globals.CELL_HEIGHT)));
            player.Register (new Clickable (new Rectangle (0, 0, Globals.CELL_WIDTH * Globals.WORLD_WIDTH, Globals.CELL_HEIGHT * Globals.WORLD_HEIGHT)));
            player.Register (new Consumable<ConsumableTypes> ());
            player.Register (new CriticalHit ());
            player.Register (new MoneyMultiplier (gameState.PlayerMoneyMultiplier));
            player.Register (new AttackMultiplier (gameState.PlayerAttackMultiplier));
            player.Register (new PoisonChanceMultiplier (gameState.PlayerPoisonChanceMultiplier));
            player.Register (new AttackDistanceMultiplier (gameState.PlayerAttackDistanceMultiplier));
            player.Register (new AttackSpeed (gameState.PlayerAttackSpeed));

            if (gameState.PlayerArmorID >= 0) {
                player.Register (new Armor (Archetypes.Armors [gameState.PlayerArmorID] ["defence"], gameState.PlayerArmorID));
            }
            player.Get<Consumable<ConsumableTypes>> ().Refill (ConsumableTypes.Money, gameState.PlayerMoney);
            player.Get<Consumable<ConsumableTypes>> ().Refill (ConsumableTypes.Antitod, gameState.PlayerAntitodPotions);

            player.Get<Clickable> ().OnMoved += OnMoveToPosition;
            player.Get<Clickable> ().OnTouched += OnAction;

            var seq = new Sequence ();
            seq.Add (new ActionEntity (player, OnEnterToLevel));
            var blink = new Loop(new ActionEntity(player, (_) => {
                if (player.Get<Drawable>().DrawAlpha == 0.0f) {
                    player.Get<Drawable>().DrawAlpha = 1.0f;
                } else {
                    player.Get<Drawable>().DrawAlpha = 0.0f;
                }
            }), 250);
            seq.Add (new Timeline (blink, Globals.PLAYER_SPAWN_SEC * 1000));
            seq.Add (new ActionEntity (player, (_AppDomain) => {
                player.Get<Drawable>().DrawAlpha = 1.0f;
            }));
            seq.Add (new Loop (new ActionEntity (player, (_) => {
                UpdatePlayer (player);
            })));
            player.Get<Execute>().Add(seq, "player_update_loop");

            m_toMove = mapGrid.StairDown;
            StartIdle (player);
        }
Exemple #4
0
        public void DropLoot(Point pos, Dictionary<string, int>[] loots, int maxWeight)
        {
            var sprites = (ISpriteSheets)Game.Services.GetService (typeof(ISpriteSheets));

            loots.Shuffle ();

            foreach (var arch in loots) {
                var w = Utils.ThrowDice (maxWeight);
                var lootType = (LootTypes)arch ["loot_type"];

                if (arch ["spawn_weight"] >= w && arch["spawn_weight"] <= maxWeight) {
                    var ent = CreateEntity ();
                    ent.Register (new Drawable (new Vector2 (pos.X * Globals.CELL_WIDTH, pos.Y * Globals.CELL_HEIGHT)));
                    ent.Register (new Position (pos.X, pos.Y));
                    ent.Register (new PointLight (PointLight.DistanceType.Small, Color.Gold));
                    ent.Register (new State<LootTypes> (lootType));
                    ent.Register (new Execute ());

                    var seq = new Sequence ();
                    seq.Add (new Delay (arch ["lifetime_sec"] * 1000));
                    seq.Add (new ActionEntity (ent, (_) => {
                        var blink = new Loop(new ActionEntity(ent, (__) => {
                            if (ent.Get<Drawable>().DrawAlpha == 0.0f) {
                                ent.Get<Drawable>().DrawAlpha = 1.0f;
                            } else {
                                ent.Get<Drawable>().DrawAlpha = 0.0f;
                            }
                        }), 250);
                        ent.Get<Execute>().Add(blink, "blink_loop");
                    }));
                    seq.Add (new Delay (arch ["lifetime_sec"] * 500));
                    seq.Add (new ActionEntity (ent, (_) => {
                        RemoveEntityByTag(ent.Tag);
                    }));
                    ent.Get<Execute> ().Add (seq, "lifetime");

                    if (lootType == LootTypes.Money) {
                        ent.Register (new Sprite (sprites.GetSprite ("money_01")));
                        ent.Register (new Triggerable ((from) => OnMoneyTriggered (ent, from)));
                        ent.Register (new Loot (arch["money"]));
                    } else if (lootType == LootTypes.Health) {
                        ent.Register (new Sprite (sprites.GetSprite ("health_potion_01")));
                        ent.Register (new Triggerable ((from) => OnHealthTriggered (ent, from)));
                        ent.Register (new Loot (arch ["health"]));
                    } else if (lootType == LootTypes.Armor) {
                        var armorSprite = string.Format ("armor_{0:D2}", Archetypes.Armors [arch ["armor_index"]] ["sprite_index"]);
                        ent.Register (new Sprite (sprites.GetSprite (armorSprite)));
                        ent.Register (new Triggerable ((from) => OnArmorTriggered (ent, from)));
                        ent.Register (new Loot (arch ["armor_index"]));
                        ent.Register (new Price (arch ["price"]));
                    } else if (lootType == LootTypes.Weapon) {
                        var weaponSprite = string.Format ("weapon_{0:D2}", Archetypes.Weapons [arch ["weapon_index"]] ["sprite_index"]);
                        ent.Register (new Sprite (sprites.GetSprite (weaponSprite)));
                        ent.Register (new Triggerable ((from) => OnWeaponTriggered (ent, from)));
                        ent.Register (new Loot (arch ["weapon_index"]));
                        ent.Register (new Price (arch ["price"]));
                    } else {
                        ent.Register (new Sprite (sprites.GetSprite ("antitod_potion_01")));
                        ent.Register (new Triggerable ((from) => OnAntitodTriggered (ent, from)));
                    }
                    break;
                }
            }
        }