/// <summary>
        /// Converts the domain model into an entity.
        /// </summary>
        /// <returns>The entity.</returns>
        /// <param name="mob">Mob.</param>
        internal static MobEntity ToEntity(this Mob mob)
        {
            MobEntity mobEntity = new MobEntity
            {
                Id          = mob.Id,
                Name        = mob.Name,
                Description = mob.Description,
                Command     = mob.Command,

                IsAttackable = mob.IsAttackable,
                IsAggressive = mob.IsAggressive,

                RespawnTime = mob.RespawnTime,
                CombatStyle = mob.CombatStyle.ToString(),
                Drops       = mob.Drops?.ToEntities().ToArray(),

                AttackLevel    = mob.AttackLevel,
                HitpointsLevel = mob.HitpointsLevel,
                StrengthLevel  = mob.StrengthLevel,
                DefenceLevel   = mob.DefenceLevel,
                RangedLevel    = mob.RangedLevel,
                MagicLevel     = mob.MagicLevel,
            };

            return(mobEntity);
        }
        /// <summary>
        /// Converts the entity into a domain model.
        /// </summary>
        /// <returns>The domain model.</returns>
        /// <param name="mobEntity">Mob entity.</param>
        internal static Mob ToDomainModel(this MobEntity mobEntity)
        {
            Mob mob = new Mob
            {
                Id          = mobEntity.Id,
                Name        = mobEntity.Name,
                Description = mobEntity.Description,
                Command     = mobEntity.Command,

                IsAttackable = mobEntity.IsAttackable,
                IsAggressive = mobEntity.IsAggressive,

                RespawnTime = mobEntity.RespawnTime,
                CombatStyle = (CombatStyle)Enum.Parse(typeof(CombatStyle), mobEntity.CombatStyle),
                Drops       = mobEntity.Drops?.ToDomainModels().ToArray(),

                AttackLevel    = mobEntity.AttackLevel,
                HitpointsLevel = mobEntity.HitpointsLevel,
                StrengthLevel  = mobEntity.StrengthLevel,
                DefenceLevel   = mobEntity.DefenceLevel,
                RangedLevel    = mobEntity.RangedLevel,
                MagicLevel     = mobEntity.MagicLevel
            };

            return(mob);
        }
示例#3
0
    public override void ApplyEvent(GameWorldController gameWorldController, GameEvent.OnEventCompleteDelegate onComplete)
    {
        RoomData currentRoom = gameWorldController.Model.CurrentGame.CurrentRoom;

        base.ApplyEvent(gameWorldController, onComplete);

        if (currentRoom.RoomKey.Equals(m_mobState.CurrentRoomKey))
        {
            // Add the mob state to the current game state
            currentRoom.SetMobById(m_mobState.mob_id, m_mobState);

            // Create a new mob entity using the mob data just set in the game state
            {
                MobEntity mobEntity = new MobEntity(m_mobState.mob_id);

                mobEntity.AddToGameWorld(gameWorldController);
            }
        }

        // Completes immediately
        if (onComplete != null)
        {
            onComplete();
        }
    }
    public override void ApplyEvent(GameWorldController gameWorldController, GameEvent.OnEventCompleteDelegate onComplete)
    {
        RoomData currentRoom = gameWorldController.Model.CurrentGame.CurrentRoom;

        base.ApplyEvent(gameWorldController, onComplete);

        if (currentRoom.RoomKey.Equals(m_mobState.CurrentRoomKey))
        {
            // Add the mob state to the current game state
            currentRoom.SetMobById(m_mobState.mob_id, m_mobState);

            // Create a new mob entity using the mob data just set in the game state
            {
                MobEntity mobEntity = new MobEntity(m_mobState.mob_id);

                mobEntity.AddToGameWorld(gameWorldController);
            }
        }

        // Completes immediately
        if (onComplete != null)
        {
            onComplete();
        }
    }
示例#5
0
    public override void ApplyEvent(GameWorldController gameWorldController, GameEvent.OnEventCompleteDelegate onComplete)
    {
        base.ApplyEvent(gameWorldController, onComplete);

        EnergyTankEntity energyTankEntity = gameWorldController.Model.GetEnergyTankEntity(EnergyTankId);

        energyTankEntity.Energy = (uint)Math.Max((int)energyTankEntity.Energy - EnergyDrained, 0);

        if (DrainerFaction == GameConstants.eFaction.ai)
        {
            MobEntity mobEntity = gameWorldController.Model.GetMobEntity(DrainerId);

            mobEntity.Energy = mobEntity.Energy + EnergyDrained;
        }
        else if (DrainerFaction == GameConstants.eFaction.player)
        {
            CharacterEntity characterEntity = gameWorldController.Model.GetCharacterEntity(DrainerId);

            characterEntity.Energy = characterEntity.Energy + EnergyDrained;
        }

        // Completes immediately
        if (onComplete != null)
        {
            onComplete();
        }
    }
示例#6
0
    public override void UndoEvent(GameWorldController gameWorldController)
    {
        base.UndoEvent(gameWorldController);

        MobEntity entity = gameWorldController.Model.GetMobEntity(MobID);

        entity.SnapTo(FromPosition, FromAngle);
    }
示例#7
0
        public override void Initialize()
        {
            HistoryLog.Initialize(_assetManager.Font, 400, _assetManager);

            HistoryLog.Instance.SortOrder = Camera2D.SortUI + 100;
            HistoryLog.Instance.Hidden    = false;
            AddAndInitializeRootEntity(HistoryLog.Instance, _assetManager);

            var cursorSprite = _assetManager[AssetManager.CrosshairCursor];

            var crosshairCursor = CreateRootEntity(Camera2D.SortUI + 10000);

            crosshairCursor.Renderer = new SpriteRenderer(cursorSprite);
            crosshairCursor.AddComponent(() => {
                crosshairCursor.Position = InputManager.Instance.MousePosition.ToVector2() -
                                           cursorSprite.Bounds.Size.ToVector2() / 2;
            });

            Camera2D.Instance.Translate = new Vector3(600, 400, 0);

            var gameBoardEntity = CreateRootEntity(Camera2D.SortBackground);

            gameBoardEntity.AddComponent(() => {
                if (InputManager.Instance.IsKeyJustPressed(Keys.P))
                {
                    Terminate();
                }
            });

            _gameBoardController = new GameBoardController(_game,
                                                           crosshairCursor,
                                                           this,
                                                           _replay);

            _gameBoardController.GameFinishedCallback = () => GameFinishedCallback?.Invoke();

            gameBoardEntity.AddComponent(_gameBoardController);
            gameBoardEntity.CustomBatch = true;

            BuildUi();

            foreach (var mobId in _game.MobManager.Mobs)
            {
                var mobAnimationController = new MobAnimationController(_game);
                var mobEntity = new MobEntity(mobId, _game)
                {
                    SortOrder = Camera2D.SortMobs,
                    Renderer  = new MobRenderer(_game, mobId, mobAnimationController),
                    Transform = () => Camera2D.Instance.Transform
                };
                mobEntity.AddComponent(mobAnimationController);

                AddAndInitializeRootEntity(mobEntity, _assetManager);
                MobEntities[mobId] = mobEntity;
            }
        }
 public void AddMobEntity(MobEntity mobEntity)
 {
     if (m_mobEntities.ContainsKey(mobEntity.MyMobData.mob_id))
     {
         m_mobEntities[mobEntity.MyMobData.mob_id] = mobEntity;
     }
     else
     {
         m_mobEntities.Add(mobEntity.MyMobData.mob_id, mobEntity);
     }
 }
示例#9
0
        /// <summary>
        /// Converts the entity into a domain model.
        /// </summary>
        /// <returns>The domain model.</returns>
        /// <param name="mobEntity">Mob entity.</param>
        internal static MobDefinition ToDomainModel(this MobEntity mobEntity)
        {
            MobDefinition mob = new MobDefinition
            {
                Id          = mobEntity.Id,
                Name        = mobEntity.Name,
                Description = mobEntity.Description
            };

            return(mob);
        }
示例#10
0
        /// <summary>
        /// Converts the domain model into an entity.
        /// </summary>
        /// <returns>The entity.</returns>
        /// <param name="mob">Mob.</param>
        internal static MobEntity ToEntity(this MobDefinition mob)
        {
            MobEntity mobEntity = new MobEntity
            {
                Id          = mob.Id,
                Name        = mob.Name,
                Description = mob.Description
            };

            return(mobEntity);
        }
示例#11
0
        /// <summary>
        /// Sends a MobUpdate message(Health) to
        /// the entity's GridCell and it's neighbours.
        ///
        /// </summary>
        /// <param name="entity">The updated entity.</param>
        public void SendEntityUpdate(MobEntity entity)
        {
            NetBuffer buffer = new NetBuffer();

            buffer.Write((byte)MessageType.MobUpdate);

            buffer.Write(entity.Id);
            buffer.Write((ushort)entity.Health.Value, 16);

            SendDataToNeigbours(buffer.Data, entity.GridCell, NetDeliveryMethod.UnreliableSequenced);
        }
    public override void ApplyEvent(GameWorldController gameWorldController, GameEvent.OnEventCompleteDelegate onComplete)
    {
        base.ApplyEvent(gameWorldController, onComplete);

        MobEntity entity = gameWorldController.Model.GetMobEntity(MobId);

        entity.PostDialogEvent(Dialog);

        // Completes immediately
        if (onComplete != null)
        {
            onComplete();
        }
    }
示例#13
0
        //------------------------------------------------------------
        //MOB message handling
        //------------------------------------------------------------

        /// <summary>
        /// Sends entity respawn message to
        /// the entity's GridCell and it's neighbours.
        /// </summary>
        /// <param name="entity">The entity that respawned</param>
        public void SendEntityRespawn(MobEntity entity)
        {
            if (entity.GridCell == null)
            {
                return;
            }

            NetBuffer data = new NetBuffer();

            data.Write((byte)MessageType.MobRespawn);
            data.Write(CreateMobRespawnPackage(entity));

            SendDataToNeigbours(data.Data, entity.GridCell);
        }
示例#14
0
        public void OnNewMapLoaded(Game game)
        {
            UpdateScore();
            string[] models = { "sheep", "pig", "skeleton", "zombie", "creeper", "spider" };
            for (int i = 0; i < 254; i++)
            {
                MobEntity fail = new MobEntity(game, models[rnd.Next(models.Length)]);
                float     x    = rnd.Next(0, game.World.Width) + 0.5f;
                float     z    = rnd.Next(0, game.World.Length) + 0.5f;

                Vector3 pos = Respawn.FindSpawnPosition(game, x, z, fail.Size);
                fail.SetLocation(LocationUpdate.MakePos(pos, false), false);
                game.Entities[i] = fail;
            }
        }
示例#15
0
    public override void UndoEvent(GameWorldController gameWorldController)
    {
        RoomData currentRoom = gameWorldController.Model.CurrentGame.CurrentRoom;

        if (currentRoom.RoomKey.Equals(m_mobState.CurrentRoomKey))
        {
            MobEntity mobEntity = gameWorldController.Model.GetMobEntity(m_mobState.mob_id);

            // Clean up the entity
            mobEntity.RemoveFromGameWorld(gameWorldController);

            // Remove the mob data from the current game state
            currentRoom.SetMobById(m_mobState.mob_id, null);
        }

        base.UndoEvent(gameWorldController);
    }
示例#16
0
        void IGameComponent.OnNewMapLoaded(Game game)
        {
            UpdateScore();
            wasOnGround             = true;
            showedDeathScreen       = false;
            game.LocalPlayer.Health = 20;
            string[] models = { "sheep", "pig", "skeleton", "zombie", "creeper", "spider" };

            for (int i = 0; i < 254; i++)
            {
                MobEntity fail = new MobEntity(game, models[rnd.Next(models.Length)]);
                float     x    = rnd.Next(0, game.World.Width) + 0.5f;
                float     z    = rnd.Next(0, game.World.Length) + 0.5f;

                Vector3 pos = Respawn.FindSpawnPosition(game, x, z, fail.Size);
                fail.SetLocation(LocationUpdate.MakePos(pos, false), false);
                game.Entities.List[i] = fail;
            }
        }
示例#17
0
    public override void UndoEvent(GameWorldController gameWorldController)
    {
        EnergyTankEntity energyTankEntity = gameWorldController.Model.GetEnergyTankEntity(EnergyTankId);

        energyTankEntity.Energy = energyTankEntity.Energy + (uint)EnergyDrained;

        if (DrainerFaction == GameConstants.eFaction.ai)
        {
            MobEntity mobEntity = gameWorldController.Model.GetMobEntity(DrainerId);

            mobEntity.Energy = mobEntity.Energy - EnergyDrained;
        }
        else if (DrainerFaction == GameConstants.eFaction.player)
        {
            CharacterEntity characterEntity = gameWorldController.Model.GetCharacterEntity(DrainerId);

            characterEntity.Energy = characterEntity.Energy - EnergyDrained;
        }

        base.UndoEvent(gameWorldController);
    }
        private static void killWorms(long x0, long y0, long z0, int size)
        {
            int count = MobManager.instance.mActiveMobs.Count;

            for (int index = 0; index < count; index++)
            {
                MobEntity e = MobManager.instance.mActiveMobs[index];
                if (e != null && e.mType == MobType.WormBoss && e.mnHealth > 0)
                {
                    Vector3 vec = Vector3.zero;
                    vec.x = (float)(e.mnX - x0);
                    vec.y = (float)(e.mnY - y0);
                    vec.z = (float)(e.mnZ - z0);
                    if (vec.magnitude <= size * 1.25)
                    {
                        e.TakeDamage(Int32.MaxValue);                 //DIE DIE DIE DIE DIE
                        FloatingCombatTextManager.instance.QueueText(e.mnX, e.mnY + 4L, e.mnZ, 1.5f, "Worm Killed!", Color.magenta, 2F, 4096F);
                    }
                }
            }
        }
        public void OnNewMapLoaded(Game game)
        {
            for (int i = 0; i < ((int)((oldlength + oldwidth / 2) / 5)); i++)
            {
                game.Entities[i] = null;
            }

            game.Chat.Add("&fScore: &e" + score, MessageType.Status1);
            string[] models = { "sheep", "pig", "skeleton", "zombie", "creeper", "spider" };
            for (int i = 0; i < ((int)((game.World.Length + game.World.Width / 2) / 5)); i++)
            {
                MobEntity fail = new MobEntity(game, models[rnd.Next(models.Length)]);
                float     x    = rnd.Next(0, game.World.Width) + 0.5f;
                float     z    = rnd.Next(0, game.World.Length) + 0.5f;

                Vector3 pos = Respawn.FindSpawnPosition(game, x, z, fail.Size);
                fail.SetLocation(LocationUpdate.MakePos(pos, false), false);
                game.Entities[i]        = fail;
                game.Entities[i].Health = 10;
            }
            oldwidth  = game.World.Width;
            oldlength = game.World.Length;
        }
示例#20
0
    public override void ApplyEvent(GameWorldController gameWorldController, OnEventCompleteDelegate onComplete)
    {
        base.ApplyEvent(gameWorldController, onComplete);

        MobEntity entity = gameWorldController.Model.GetMobEntity(MobID);

        if (onComplete != null)
        {
            entity.RequestMoveTo(ToPosition, ToAngle, (PathComputer.eResult resultCode) =>
            {
                if (resultCode != PathComputer.eResult.success)
                {
                    Debug.Log("GameEvent_CharacterMoved:apply_event - Failed to compute path to event target, ResultCode=" + resultCode);
                    entity.SnapTo(ToPosition, ToAngle);
                }

                onComplete();
            });
        }
        else
        {
            entity.SnapTo(ToPosition, ToAngle);
        }
    }
示例#21
0
文件: SpawnMob.cs 项目: Tobi406/SM3
 public SpawnMob(MobEntity entity)
 {
     Entity = entity;
 }
示例#22
0
 /// <summary>
 ///     Generic machine inventory class with list inventory support
 /// </summary>
 /// <param name="mobentity">For associating the owner mob</param>
 /// <param name="storagecapacity">The storage capacity of the inventory</param>
 public MachineInventory(MobEntity mobentity, int storagecapacity)
 {
     this.Mob             = mobentity;
     this.StorageCapacity = storagecapacity;
     this.Inventory       = new List <ItemBase>();
 }
示例#23
0
 public void RemoveMobEntity(MobEntity mobEntity)
 {
     m_mobEntities.Remove(mobEntity.MyMobData.mob_id);
 }
示例#24
0
 public void AddMobEntity(MobEntity mobEntity)
 {
     if (m_mobEntities.ContainsKey(mobEntity.MyMobData.mob_id))
     {
         m_mobEntities[mobEntity.MyMobData.mob_id]= mobEntity;
     }
     else
     {
         m_mobEntities.Add(mobEntity.MyMobData.mob_id, mobEntity);
     }
 }
    public void OnRoomLoaded(RoomKey roomKey)
    {
        RoomData currentRoom = m_gameWorldModel.GetRoomData(roomKey);

        // Get a list of all the characters that are in the same room as my character
        List<int> characterIDList = m_gameWorldModel.GetCharacterIDListInRoom(roomKey);

        // Remove any existing character
        List<int> allCharacterIds = new List<int>(m_gameWorldModel.GetCharacterEntityMap().Keys);
        foreach (int characterEntityId in allCharacterIds)
        {
            CharacterEntity characterEntity= m_gameWorldModel.GetCharacterEntity(characterEntityId);

            characterEntity.RemoveFromGameWorld(this);
        }

        // (Re)Create character entities for each character in the room
        foreach (int characterID in characterIDList)
        {
            CharacterEntity newCharacterEntity = new CharacterEntity(characterID);

            newCharacterEntity.AddToGameWorld(this);
        }

        // Remove any existing mobs
        List<int> allMobIds = new List<int>(m_gameWorldModel.GetMobEntityMap().Keys);
        foreach (int mobEntityId in allMobIds)
        {
            MobEntity mobEntity = m_gameWorldModel.GetMobEntity(mobEntityId);

            mobEntity.RemoveFromGameWorld(this);
        }

        // (Re)Create mob entities for each mob in the room
        foreach (MobData mobData in currentRoom.MobMap.Values)
        {
            MobEntity newMobEntity = new MobEntity(mobData.mob_id);

            newMobEntity.AddToGameWorld(this);
        }

        // Remove any existing energy tanks
        List<int> allEnergyTankIds = new List<int>(m_gameWorldModel.GetEnergyTankEntityMap().Keys);
        foreach (int energyTankId in allEnergyTankIds)
        {
            EnergyTankEntity energyTankEntity = m_gameWorldModel.GetEnergyTankEntity(energyTankId);

            energyTankEntity.RemoveFromGameWorld(this);
        }

        // (Re)Create energy tank entities for each energy tank in the room
        foreach (EnergyTankData energyTankData in currentRoom.EnergyTankMap.Values)
        {
            EnergyTankEntity newEnergyTankEntity = new EnergyTankEntity(energyTankData.energy_tank_id);

            newEnergyTankEntity.AddToGameWorld(this);
        }

        // generate all of the terrain tiles and static objects in the room
        gameWorldView.RebuildRoom(currentRoom);

        // Notify the overlay of a room reload
        m_contextOverlayController.OnRoomLoaded(currentRoom);
    }
    public void OnRoomLoaded(RoomKey roomKey)
    {
        RoomData currentRoom = m_gameWorldModel.GetRoomData(roomKey);

        // Get a list of all the characters that are in the same room as my character
        List <int> characterIDList = m_gameWorldModel.GetCharacterIDListInRoom(roomKey);

        // Remove any existing character
        List <int> allCharacterIds = new List <int>(m_gameWorldModel.GetCharacterEntityMap().Keys);

        foreach (int characterEntityId in allCharacterIds)
        {
            CharacterEntity characterEntity = m_gameWorldModel.GetCharacterEntity(characterEntityId);

            characterEntity.RemoveFromGameWorld(this);
        }

        // (Re)Create character entities for each character in the room
        foreach (int characterID in characterIDList)
        {
            CharacterEntity newCharacterEntity = new CharacterEntity(characterID);

            newCharacterEntity.AddToGameWorld(this);
        }

        // Remove any existing mobs
        List <int> allMobIds = new List <int>(m_gameWorldModel.GetMobEntityMap().Keys);

        foreach (int mobEntityId in allMobIds)
        {
            MobEntity mobEntity = m_gameWorldModel.GetMobEntity(mobEntityId);

            mobEntity.RemoveFromGameWorld(this);
        }

        // (Re)Create mob entities for each mob in the room
        foreach (MobData mobData in currentRoom.MobMap.Values)
        {
            MobEntity newMobEntity = new MobEntity(mobData.mob_id);

            newMobEntity.AddToGameWorld(this);
        }

        // Remove any existing energy tanks
        List <int> allEnergyTankIds = new List <int>(m_gameWorldModel.GetEnergyTankEntityMap().Keys);

        foreach (int energyTankId in allEnergyTankIds)
        {
            EnergyTankEntity energyTankEntity = m_gameWorldModel.GetEnergyTankEntity(energyTankId);

            energyTankEntity.RemoveFromGameWorld(this);
        }

        // (Re)Create energy tank entities for each energy tank in the room
        foreach (EnergyTankData energyTankData in currentRoom.EnergyTankMap.Values)
        {
            EnergyTankEntity newEnergyTankEntity = new EnergyTankEntity(energyTankData.energy_tank_id);

            newEnergyTankEntity.AddToGameWorld(this);
        }

        // generate all of the terrain tiles and static objects in the room
        gameWorldView.RebuildRoom(currentRoom);

        // Notify the overlay of a room reload
        m_contextOverlayController.OnRoomLoaded(currentRoom);
    }
 void Awake()
 {
     parentEntity = GetComponentInParent <MobEntity>();
 }
 public void RemoveMobEntity(MobEntity mobEntity)
 {
     m_mobEntities.Remove(mobEntity.MyMobData.mob_id);
 }