public bool MobDrainEnergyTank(EnergyTank energyTank, int desiredDrainAmount) { bool success = true; float min_distance_squared = WorldConstants.ROOM_TILE_SIZE * WorldConstants.ROOM_TILE_SIZE; // Move to the energy tank first if it's too far away if (Point3d.DistanceSquared(mob.Position, energyTank.Position) > min_distance_squared) { success = MoveMob(energyTank.Position); } if (success) { int energyDrained = Math.Min(energyTank.Energy, desiredDrainAmount); // Drain the energy from the tank energyTank.Energy -= energyDrained; // Give energy to the mob mob.Energy = Math.Min(mob.Energy + energyDrained, mob.MobType.MaxEnergy); // Post an event that we moved output_game_events.Add( new GameEvent_EnergyTankDrained() { energy_tank_id = energyTank.ID, drainer_id = mob.ID, drainer_faction = GameConstants.eFaction.ai, energy_drained = energyDrained }); } return(success); }
private bool UpdateEnergyTankState( RequestCache requestCache, out string result_code) { bool success = false; EnergyTank energyTank = requestCache.GetEnergyTank(m_current_room_key, m_energy_tank_id); if (energyTank != null) { switch (energyTank.Faction) { case GameConstants.eFaction.ai: energyTank.Faction = GameConstants.eFaction.neutral; break; case GameConstants.eFaction.neutral: case GameConstants.eFaction.player: energyTank.Faction = GameConstants.eFaction.player; break; } result_code = SuccessMessages.GENERAL_SUCCESS; success = true; } else { result_code = ErrorMessages.CACHE_ERROR + "(Unable to update energy tank ownership)"; success = false; } return(success); }
public EnergyTankState(EnergyTank tank) { _tank = tank; Sprite = ItemSpriteFactory.Instance.CreateEnergyTankSprite(); Sprite.X = (int)tank.Position.X; Sprite.Y = (int)tank.Position.Y; Sprite.Visible = true; }
private bool VerifyEnergyTank( RequestCache requestCache, out bool out_is_touching, out string result_code) { bool success = false; out_is_touching = false; // Make sure the portal actually exists in the room the player is in m_energy_tank = requestCache.GetEnergyTank(m_current_room_key, m_energy_tank_id); if (m_energy_tank != null) { // Remember how much energy the tank had before we drained it m_energy_tank_old_energy = m_energy_tank.Energy; switch (m_energy_tank.Faction) { case GameConstants.eFaction.player: result_code = SuccessMessages.GENERAL_SUCCESS; success = true; break; case GameConstants.eFaction.ai: case GameConstants.eFaction.neutral: result_code = ErrorMessages.ENERGY_TANK_NOT_PLAYER_OWNED; success = false; break; default: result_code = ErrorMessages.DB_ERROR + "(Invalid energy tank faction)"; success = false; break; } if (success && m_energy_tank.Energy <= 0) { result_code = ErrorMessages.ENERGY_TANK_EMPTY; success = false; } if (success) { float min_distance_squared = WorldConstants.ROOM_TILE_SIZE * WorldConstants.ROOM_TILE_SIZE; float distance = Point3d.DistanceSquared(m_current_character_position, m_energy_tank.Position); out_is_touching = distance <= min_distance_squared; } } else { result_code = ErrorMessages.INVALID_REQUEST; } return(success); }
public static EnergyTank GetEnergyTank( AsyncRPGDataContext db_context, int energyTankID) { return (EnergyTank.CreateEnergyTank( (from e in db_context.EnergyTanks where e.EnergyTankID == energyTankID select e).Single())); }
public void Execute(IGameObject gameObject, IGameObject collidedWith) { EnergyTank energyTank = (EnergyTank)gameObject; foreach (var player in _currentLevel.Players) { var samus = (Samus) player; samus.MaxHealth += 100; } energyTank.Obtain(); //((Samus)collidedWith).MaxHealth += 100; }
public EnergyTank GetEnergyTank(AsyncRPGDataContext db_context, int energyTankID) { EnergyTank energyTank = null; if (!m_energyTanks.TryGetValue(energyTankID, out energyTank)) { energyTank = EnergyTankQueries.GetEnergyTank(db_context, energyTankID); m_energyTanks.Add(energyTankID, energyTank); } return(energyTank); }
private void UpdateEnergyTankPropVisibility( MobUpdateContext context) { Mob ownerMob = context.mob; NavMesh navMesh = context.moveRequest.Room.runtime_nav_mesh; foreach (EntityProp prop in energy_tank_props) { Point3d oldPropPosition = prop.GetPosition(); // Find the energy tank associated with the player id EnergyTank energyTank = context.moveRequest.EnergyTanks.Find(e => e.ID == prop.target_object_id); // Can the mob see the player at their current location bool canSee = CanMobSeePoint(navMesh, ownerMob, energyTank.Position); TypedFlags <EntityProp.ePropVisibilityFlags> oldVisibilityFlags = new TypedFlags <EntityProp.ePropVisibilityFlags>(prop.visibilityFlags); prop.visibilityFlags.Set(EntityProp.ePropVisibilityFlags.canSee, canSee); prop.visibilityFlags.Set(EntityProp.ePropVisibilityFlags.caughtGlimpse, canSee); prop.visibilityFlags.Set(EntityProp.ePropVisibilityFlags.stationary, true); if (canSee) { // If so, we get to pull the entity properties prop.RefeshEntityProperties(ownerMob, energyTank); prop.visibilityFlags.Set(EntityProp.ePropVisibilityFlags.seenAtLeastOnce, true); } // Update the status of the prop based on the current visibility UpdatePropStatus(ownerMob, prop); // Post an event if we just spotted an energy that we've never seen before if (!oldVisibilityFlags.Test(EntityProp.ePropVisibilityFlags.canSee) && !oldVisibilityFlags.Test(EntityProp.ePropVisibilityFlags.seenAtLeastOnce) && (prop.visibilityFlags.Test(EntityProp.ePropVisibilityFlags.canSee) || prop.visibilityFlags.Test(EntityProp.ePropVisibilityFlags.caughtGlimpse))) { context.output_game_events.Add( new GameEvent_MobEnergyTankPropSpotted() { mob_id = ownerMob.ID, energy_tank_id = prop.target_object_id }); } } }
public static void UpdateEnergyTankOwnership( AsyncRPGDataContext db_context, EnergyTank energyTank, GameConstants.eFaction newOwnership) { var energyTankQuery = (from e in db_context.EnergyTanks where e.EnergyTankID == energyTank.ID select e).SingleOrDefault(); energyTankQuery.Ownership = (int)newOwnership; db_context.SubmitChanges(); energyTank.Faction = newOwnership; }
public HackEnergyTankRequestProcessor( int character_id, int energy_tank_id) { m_character_id = character_id; m_energy_tank_id = energy_tank_id; m_world = null; m_room = null; m_energy_tank = null; m_current_room_key = null; m_current_character_position = new Point3d(); m_current_character_angle = 0.0f; m_game_id = -1; m_move_to_target = false; m_ai_relevant_events = new List <GameEventParameters>(); m_result_event_list = null; }
public static List <EnergyTank> GetEnergyTanks( AsyncRPGDataContext db_context, RoomKey roomKey) { List <EnergyTank> energyTanks = new List <EnergyTank>(); var roomEnergyTankQuery = from e in db_context.EnergyTanks where e.GameID == roomKey.game_id && e.RoomX == roomKey.x && e.RoomY == roomKey.y && e.RoomZ == roomKey.z select e; foreach (EnergyTanks dbEnergyTank in roomEnergyTankQuery) { EnergyTank energyTank = EnergyTank.CreateEnergyTank(dbEnergyTank); energyTanks.Add(energyTank); } return(energyTanks); }
public static void UpdateEnergyTank( AsyncRPGDataContext db_context, EnergyTank energyTank) { var dbEnergyTank = (from e in db_context.EnergyTanks where e.EnergyTankID == energyTank.ID select e).SingleOrDefault(); dbEnergyTank.GameID = energyTank.RoomKey.game_id; dbEnergyTank.RoomX = energyTank.RoomKey.x; dbEnergyTank.RoomY = energyTank.RoomKey.y; dbEnergyTank.RoomZ = energyTank.RoomKey.z; dbEnergyTank.X = energyTank.Position.x; dbEnergyTank.Y = energyTank.Position.y; dbEnergyTank.Z = energyTank.Position.z; dbEnergyTank.Ownership = (int)energyTank.Faction; dbEnergyTank.Energy = energyTank.Energy; db_context.SubmitChanges(); }
private bool UpdateEnergyTankState( RequestCache requestCache, out string result_code) { bool success = false; EnergyTank energyTank = requestCache.GetEnergyTank(m_current_room_key, m_energy_tank_id); if (energyTank != null) { energyTank.Energy = 0; result_code = SuccessMessages.GENERAL_SUCCESS; success = true; } else { result_code = ErrorMessages.CACHE_ERROR + "(Unable to update energy tank state)"; success = false; } return(success); }
public override void Perform(MobUpdateContext context) { EntityProp energyTankProp = context.mob.AIState.perception_data.GetEnergyTankTargetProp(); EnergyTank energyTank = context.moveRequest.EnergyTanks.Find(e => e.ID == energyTankProp.target_object_id); if (energyTank.Faction == GameConstants.eFaction.ai) { // We can only drain up to what we can take and whats left in the energy tank int drainAmount = Math.Min(energyTank.Energy, context.mob.MobType.Abilities.energy_tank_drain_per_turn); context.MobDrainEnergyTank(energyTank, drainAmount); context.MobPostDialog("Sweet Sweet Energy..."); } else { context.MoveMob(energyTank.Position); context.MobPostDialog("What?! Someone hacked this! Grrr..."); } // Update the energy on the prop energyTankProp.energy = energyTank.Energy; }
public bool MobHackEnergyTank(EnergyTank energyTank) { bool success = true; float min_distance_squared = WorldConstants.ROOM_TILE_SIZE * WorldConstants.ROOM_TILE_SIZE; // Move to the energy tank first if it's too far away if (Point3d.DistanceSquared(mob.Position, energyTank.Position) > min_distance_squared) { success = MoveMob(energyTank.Position); } if (success) { // If the energy tank's faction was player it's now neutral // If the energy tank's faction was neutral it's now ai GameConstants.eFaction newFaction = (energyTank.Faction == GameConstants.eFaction.player) ? GameConstants.eFaction.neutral : GameConstants.eFaction.ai; // Update the faction on the energy tank energyTank.Faction = newFaction; // Post an event that we moved output_game_events.Add( new GameEvent_EnergyTankHacked() { energy_tank_id = energyTank.ID, energy_tank_faction = newFaction, hacker_id = mob.ID, hacker_faction = GameConstants.eFaction.ai }); } return(success); }
public override void Perform(MobUpdateContext context) { EntityProp energyTankProp = context.mob.AIState.perception_data.GetEnergyTankTargetProp(); EnergyTank energyTank = context.moveRequest.EnergyTanks.Find(e => e.ID == energyTankProp.target_object_id); if (energyTank.Faction == GameConstants.eFaction.player) { context.MobHackEnergyTank(energyTank); context.MobPostDialog("Which team owns one less energy tank? Team Player!"); } else if (energyTank.Faction == GameConstants.eFaction.neutral) { context.MobHackEnergyTank(energyTank); context.MobPostDialog("Energy Tank claimed for the AI Team!"); } else if (energyTank.Faction == GameConstants.eFaction.ai) { context.MobHackEnergyTank(energyTank); context.MobPostDialog("Oh! I guess we already owned this energy tank"); } // Update the faction on the prop energyTankProp.faction = energyTank.Faction; }