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)); }
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; } } } } }
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); }
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; } } }