示例#1
0
        public void SetOccupied(Vector2Int position, CollisionLayer layer)
        {
            if (!_bounds.Contains(position))
            {
                return;
            }

            var tile = AddOrGetTile(position);

            tile.OccupiedLayer |= (tile.CollisionLayerIncrement == CollisionLayer.None ? layer : tile.CollisionLayerIncrement);
        }
示例#2
0
        private static int GetLowestLayerIndex(CollisionLayer layer)
        {
            var value = (int)layer;
            for (var i = 0; i < LayerCount; i++)
            {
                if (((value >> i) & 1) != 0)
                    return i;
            }

            return 1;
        }
示例#3
0
 public void SetOccupied(Vector2Int position, CollisionLayer layer)
 {
     if (_occupiedTiles.TryGetValue(position, out CollisionLayer occupied))
     {
         occupied |= layer;
     }
     else
     {
         _occupiedTiles[position] = layer;
     }
 }
示例#4
0
        private void TileEntered(Vector2Int position)
        {
            var tile = WorldManager.Instance.FindTile(position);

            if (tile != null && tile.LayerChange != CollisionLayer.None)
            {
                MovementLayer = tile.LayerChange;
            }

            WorldManager.Instance.SetOccupied(position, MovementLayer);
            WorldManager.Instance.AddInteraction(position, _interaction);
        }
示例#5
0
        public virtual void WarpToPosition(Vector2Int position, Vector2 direction, CollisionLayer layer)
        {
            UnoccupyCurrentTiles();

            transform.position   = position + PositionOffset;
            CurrentGridPosition  = position;
            PreviousGridPosition = CurrentGridPosition;
            CollisionLayer       = layer;
            _willWarp            = true;

            OccupyCurrentTiles();
        }
示例#6
0
        protected virtual void TileEntered(Vector2Int position)
        {
            if (CurrentZone != null)
            {
                var tile = CurrentZone.Tilemap.GetTile(position);

                if (tile != null && tile.CollisionLayerIncrement != CollisionLayer.None)
                {
                    CollisionLayer = tile.CollisionLayerIncrement;
                }
            }
        }
示例#7
0
        protected virtual void UpdateSorting(CollisionLayer layer, bool usePosition)
        {
            var index        = GetLowestLayerIndex(layer) + 1;
            var sortingOrder = index * 100000;

            if (usePosition)
            {
                sortingOrder += (int)(50000 - (transform.position.y * 100));
            }

            _renderer.sortingOrder = sortingOrder;
        }
示例#8
0
        public void SetUnoccupied(Vector2Int position, CollisionLayer layer)
        {
            if (_occupiedTiles.TryGetValue(position, out CollisionLayer occupied))
            {
                var tile = FindTile(position);
                occupied &= ~layer;

                if (occupied == CollisionLayer.None)
                {
                    _occupiedTiles.Remove(position);
                }
            }
        }
        private void removeCollLayerButton_Click(object sender, EventArgs e)
        {
            string filename = CollLayerListBox.SelectedItem as string;

            if (CollLayerListBox.SelectedItem != null)
            {
                tileMap.colLayers.Remove(currentCollisionLayer);
                collDict.Remove(filename);
                CollLayerListBox.Items.Remove(CollLayerListBox.SelectedItem);

                currentCollisionLayer = null;
            }
        }
示例#10
0
        public Weapon(Game1 game, IPositionable entity, float angle = 0.0f)
        {
            const float SECONDS_IN_MINUTE = 60f;
            const float RATE_OF_FIRE      = 200f;

            _laserSpawnTime         = TimeSpan.FromSeconds(SECONDS_IN_MINUTE / RATE_OF_FIRE);
            _previousLaserSpawnTime = TimeSpan.Zero;
            _game            = game;
            _entity          = entity;
            _state           = State.Ready;
            _itMustFire      = false;
            _weaponAngle     = angle;
            _collisionLayers = CollisionLayer.PowerUp | CollisionLayer.Enemy | CollisionLayer.Laser;
        }
示例#11
0
        private int GetLowestLayerIndex(CollisionLayer layer)
        {
            var value = (int)layer;

            for (var i = 0; i < CollisionLayerData.LayerCount; i++)
            {
                if (((value >> i) & 1) != 0)
                {
                    return(i);
                }
            }

            return(0);
        }
        private void saveToolStripMenuItem_Click(object sender, EventArgs e)
        {
            List <string> tileNameList = new List <string>();
            List <string> collNameList = new List <string>();

            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                foreach (var tileName in layerDict)
                {
                    tileNameList.Add(tileName.Key);
                }

                foreach (var colName in collDict)
                {
                    collNameList.Add(colName.Key);
                }


                foreach (var layer in layerDict)
                {
                    TileLayer tileLayer = layer.Value;

                    Dictionary <int, string> utilizedTextures = new Dictionary <int, string>();

                    foreach (string textureName in textureListBox.Items)
                    {
                        int index = tileLayer.isUsingTexture(textureDict[textureName]);

                        if (index != -1)
                        {
                            utilizedTextures.Add(index, textureName);
                        }
                    }
                    List <string> utilizedTextureList = new List <string>();

                    for (int i = 0; i < utilizedTextures.Count; i++)
                    {
                        utilizedTextureList.Add(utilizedTextures[i]);
                    }

                    tileMap.Save(saveFileDialog1.FileName, collNameList.ToArray(), tileNameList.ToArray());
                    tileLayer.Save(contentPathTextBox.Text + "\\Layers\\" + layer.Key, utilizedTextureList.ToArray());
                }
                foreach (var colLayer in collDict)
                {
                    CollisionLayer collLayer = colLayer.Value;
                    collLayer.Save(contentPathTextBox.Text + "\\Layers\\" + colLayer.Key);
                }
            }
        }
示例#13
0
        public void Add(ICollidable collidable)
        {
            CollisionLayer group = collidable.CollisionGroup;

            lock (_collidableLists)
            {
                if (!_collidableLists.ContainsKey(group))
                {
                    _collidableLists.Add(group, new List <ICollidable>());
                }

                _collidableLists[group].Add(collidable);
            }
        }
示例#14
0
 public MapData(
     string mapName,
     List <TilesetData> tilesets,
     AnimatedTilesetData animatedSet,
     List <MapLayerData> layers,
     CollisionLayer collisionLayer,
     AnimatedTileLayer animatedLayer)
 {
     MapName         = mapName;
     AnimatedTileset = animatedSet;
     Tilesets        = tilesets.ToArray();
     Layers          = layers.ToArray();
     Collisions      = collisionLayer;
     AnimatedTiles   = animatedLayer;
 }
示例#15
0
        protected LayerMask LayerMaskForCollisionLayer(CollisionLayer layer, ISceneContext context)
        {
            switch (layer)
            {
            case CollisionLayer.Background: return(context.GetBackgroundLayer());

            case CollisionLayer.StaticForeground: return(context.GetStaticForegroundLayer());

            case CollisionLayer.DynamicForeground: return(context.GetDynamicForegroundLayer());

            case CollisionLayer.Wall: return(LayerMask.NameToLayer("Wall"));

            default: throw new System.ArgumentException("Unknown collision layer type");
            }
        }
示例#16
0
        /// <summary>
        /// initializes with collison layer and creates a simple shadow.
        /// </summary>
        public override void Initialize()
        {
            base.Initialize();

            colLayerMoveWorld =
                RobotGameGame.CurrentGameLevel.CollisionLayerMoveWorld;

            colLayerHitWorld =
                RobotGameGame.CurrentGameLevel.CollisionLayerHitWorld;

            colLayerFriendlyMech =
                RobotGameGame.CurrentGameLevel.CollisionLayerFriendlyMech;

            colLayerEnemyMech =
                RobotGameGame.CurrentGameLevel.CollisionLayerEnemyMech;

            colLayerAllMech =
                RobotGameGame.CurrentGameLevel.CollisionLayerAllMech;

            colLayerItems =
                RobotGameGame.CurrentGameLevel.CollisionLayerItems;

            colLayerVersusTeam = RobotGameGame.CurrentGameLevel.CollisionVersusTeam;

            //  creates a simple shadow.
            GameResourceTexture2D resource =
                FrameworkCore.ResourceManager.LoadTexture("Textures/shadow");

            simpleShadow = new GameQuad(new Vector3(0.0f, 0.02f, 0.0f),
                                        Vector3.Up, Vector3.Forward, 3.0f, 3.0f);

            simpleShadow.Name                   = "simple shadow";
            simpleShadow.Texture                = resource.Texture2D;
            simpleShadow.LightingEnabled        = false;
            simpleShadow.Alpha                  = 0.6f;
            simpleShadow.AlphaBlendEnable       = true;
            simpleShadow.ReferenceAlpha         = 0;
            simpleShadow.DepthBufferEnable      = true;
            simpleShadow.DepthBufferWriteEnable = true;
            simpleShadow.DepthBufferFunction    = CompareFunction.Less;
            simpleShadow.SourceBlend            = Blend.SourceAlpha;
            simpleShadow.DestinationBlend       = Blend.InverseSourceAlpha;
            simpleShadow.BlendFunction          = BlendFunction.Add;
            simpleShadow.AlphaFunction          = CompareFunction.Greater;
            simpleShadow.CullMode               = CullMode.CullCounterClockwiseFace;

            this.AddChild(simpleShadow);
        }
示例#17
0
        /// <summary>
        /// Construit une carte de jeu selon une liste de tilesets et une liste de couches de carte
        /// </summary>
        /// <param name="tilesets"></param>
        /// <param name="mapLayers"></param>
        public TileMap(List <Tileset> tilesets, List <MapLayer> mapLayers)
        {
            // Ajout des tilesets
            this.tilesets = tilesets;

            // Ajout des maplayers
            this.MapLayers = mapLayers;

            // Ajout de la collision
            collisionLayer       = new CollisionLayer(mapLayers[0].Height, mapLayers[0].Width);
            bulletCollisionLayer = new CollisionLayer(mapLayers[0].Height, mapLayers[0].Width);
            foreach (MapLayer maplayer in mapLayers)
            {
                ProcessColisionLayer(maplayer);
            }
        }
示例#18
0
        // Token: 0x0600001A RID: 26 RVA: 0x00003070 File Offset: 0x00001270
        private Vector2 GetPlayerAimPointController(Vector2 aimBase, Vector2 aimDirection)
        {
            Func <SpeculativeRigidbody, bool> rigidbodyExcluder = (SpeculativeRigidbody otherRigidbody) => otherRigidbody.minorBreakable && !otherRigidbody.minorBreakable.stopsBullets;
            Vector2        result  = aimBase + aimDirection * 10f;
            CollisionLayer layer   = CollisionLayer.EnemyHitBox;
            int            rayMask = CollisionMask.LayerToMask(CollisionLayer.HighObstacle, CollisionLayer.BulletBlocker, layer, CollisionLayer.BulletBreakable);
            RaycastResult  raycastResult;
            bool           flag = PhysicsEngine.Instance.Raycast(aimBase, aimDirection, 50f, out raycastResult, true, true, rayMask, null, false, rigidbodyExcluder, null);

            if (flag)
            {
                result = aimBase + aimDirection * raycastResult.Distance;
            }
            RaycastResult.Pool.Free(ref raycastResult);
            return(result);
        }
示例#19
0
        public void SetUnoccupied(Vector2Int position, CollisionLayer layer)
        {
            var tile = GetTile(position);

            if (tile == null)
            {
                return;
            }

            tile.OccupiedLayer &= (tile.CollisionLayerIncrement == CollisionLayer.None ? ~layer : ~tile.CollisionLayerIncrement);

            if (tile.IsEmpty())
            {
                _tiles.Remove(position);
            }
        }
示例#20
0
        private JobHandle BuildRadarLayer(FactionMember factionMember, out CollisionLayer layer, JobHandle inputDeps)
        {
            m_radars.SetSharedComponentFilter(factionMember);
            int count  = m_radars.CalculateEntityCount();
            var bodies = new NativeArray <ColliderBody>(count, Allocator.TempJob);
            var aabbs  = new NativeArray <Aabb>(count, Allocator.TempJob);
            var jh     = Entities.WithAll <AiRadarTag>().WithSharedComponentFilter(factionMember).WithStoreEntityQueryInField(ref m_radars)
                         .ForEach((Entity e, int entityInQueryIndex, in AiShipRadar radar, in LocalToWorld ltw) =>
            {
                var transform = new RigidTransform(quaternion.LookRotationSafe(ltw.Forward, ltw.Up), ltw.Position);
                var sphere    = new SphereCollider(0f, radar.distance);
                if (radar.cosFov < 0f)
                {
                    //Todo: Create tighter bounds here too.
                    aabbs[entityInQueryIndex] = Physics.CalculateAabb(sphere, transform);
                }
                else
                {
                    //Compute aabb of vertex and spherical cap points which are extreme points
                    float3 forward            = math.forward(transform.rot);
                    bool3 positiveOnSphereCap = forward > radar.cosFov;
                    bool3 negativeOnSphereCap = -forward > radar.cosFov;
                    float3 min = math.select(0f, -radar.distance, negativeOnSphereCap);
                    float3 max = math.select(0f, radar.distance, positiveOnSphereCap);
                    Aabb aabb  = new Aabb(min, max);

                    //Compute aabb of circle base
                    float4 cos                = new float4(forward, radar.cosFov);
                    float4 sinSq              = 1f - (cos * cos);
                    float4 sin                = math.sqrt(sinSq);
                    float3 center             = forward * radar.distance * radar.cosFov;
                    float radius              = radar.distance * sin.w;
                    float3 extents            = sin.xyz * radius;
                    min                       = center - extents;
                    max                       = center + extents;
                    aabb.min                  = math.min(aabb.min, min) + transform.pos;
                    aabb.max                  = math.max(aabb.max, max) + transform.pos;
                    aabbs[entityInQueryIndex] = aabb;
                }

                bodies[entityInQueryIndex] = new ColliderBody
                {
                    collider  = sphere,
                    entity    = e,
                    transform = transform
                };
            }).ScheduleParallel(inputDeps);
示例#21
0
        public object Clone()
        {
            Map map = new Map();

            map.AssetName = AssetName;
            map.baseLayer = BaseLayer.Clone() as int[];
            foreach (MapEntry <Chest> chestEntry in chestEntries)
            {
                MapEntry <Chest> mapEntry = new MapEntry <Chest>();
                mapEntry.Content     = chestEntry.Content.Clone() as Chest;
                mapEntry.ContentName = chestEntry.ContentName;
                mapEntry.Count       = chestEntry.Count;
                mapEntry.Direction   = chestEntry.Direction;
                mapEntry.MapPosition = chestEntry.MapPosition;
                map.chestEntries.Add(mapEntry);
            }
            map.chestEntries.AddRange(ChestEntries);
            map.collisionLayer     = CollisionLayer.Clone() as int[];
            map.combatMusicCueName = CombatMusicCueName;
            map.combatTexture      = CombatTexture;
            map.combatTextureName  = CombatTextureName;
            map.fixedCombatEntries.AddRange(FixedCombatEntries);
            map.fringeLayer = FringeLayer.Clone() as int[];
            map.innEntries.AddRange(InnEntries);
            map.mapDimensions = MapDimensions;
            map.musicCueName  = MusicCueName;
            map.name          = Name;
            map.objectLayer   = ObjectLayer.Clone() as int[];
            map.playerNpcEntries.AddRange(PlayerNpcEntries);
            map.portals.AddRange(Portals);
            map.portalEntries.AddRange(PortalEntries);
            map.questNpcEntries.AddRange(QuestNpcEntries);
            map.randomCombat = new RandomCombat();
            map.randomCombat.CombatProbability = RandomCombat.CombatProbability;
            map.randomCombat.Entries.AddRange(RandomCombat.Entries);
            map.randomCombat.FleeProbability   = RandomCombat.FleeProbability;
            map.randomCombat.MonsterCountRange = RandomCombat.MonsterCountRange;
            map.spawnMapPosition = SpawnMapPosition;
            map.storeEntries.AddRange(StoreEntries);
            map.texture     = Texture;
            map.textureName = TextureName;
            map.tileSize    = TileSize;
            map.tilesPerRow = tilesPerRow;

            return(map);
        }
示例#22
0
        private void LoadTiles(CollisionLayer colLayer)
        {
            globalX = colLayer.Width;
            globalY = colLayer.Height;

            tiles = new Tile[colLayer.Width, colLayer.Height];

            for (int x = 0; x < colLayer.Width; ++x)
            {
                for (int y = 0; y < colLayer.Height; ++y)
                {
                    tiles[x, y] = LoadTile(colLayer.GetCellIndex(x, y), x, y);
                }
            }

            //if (exits.Count == 0)
            //    throw new NotSupportedException("A level must have an exit.");
        }
示例#23
0
        /// <summary>
        /// Construit une carte de jeu avec un tileset et une carte de jeu
        /// </summary>
        /// <param name="tileset"></param>
        /// <param name="mapLayer"></param>
        public TileMap(Tileset tileset, MapLayer mapLayer)
        {
            // Ajout du tileset
            tilesets = new List <Tileset>();
            tilesets.Add(tileset);

            // Ajout des maplayers
            MapLayers = new List <MapLayer>();
            MapLayers.Add(mapLayer);

            // Ajout de la collision
            collisionLayer       = new CollisionLayer(MapLayers[0].Height, MapLayers[0].Width);
            bulletCollisionLayer = new CollisionLayer(MapLayers[0].Height, MapLayers[0].Width);
            foreach (MapLayer maplayer in MapLayers)
            {
                ProcessColisionLayer(maplayer);
            }
        }
示例#24
0
        private bool GetCanMove(Vector2Int position, MovementDirection direction, CollisionLayer layer, out bool jump)
        {
            jump = false;

            if (WorldManager.Instance.IsOccupied(position, layer))
            {
                return(false);
            }

            var tile = WorldManager.Instance.FindTile(position);

            if (tile != null)
            {
                jump = tile.IsJumpable(direction);
                return(!tile.HasCollision(layer) && !tile.IsEdge(direction) && !WorldManager.Instance.IsOccupied(tile.Position, tile.LayerChange));
            }

            return(true);
        }
示例#25
0
        /// <summary>
        /// drops weapon at specified position.
        /// </summary>
        /// <param name="position">new drop position</param>
        /// <param name="parent">new scene node</param>
        /// <param name="layer">new collision layer</param>
        public void Drop(Vector3 position, NodeBase parent, CollisionLayer layer)
        {
            //  Detached scene node from owner
            AttachOwner(parent);

            //  Add a collision
            if (layer != null)
            {
                layer.AddCollide(this.Collide);
            }

            DroppedModel.SetRootAxis(
                Matrix.CreateRotationX(MathHelper.ToRadians(-90.0f)));

            this.Position  = position;
            this.isDropped = true;
            this.Enabled   = true;
            this.Visible   = true;
        }
示例#26
0
        /// <summary>
        /// Initialize members.
        /// </summary>
        public void Initialize()
        {
            Clear();

            //  Add collision layers
            collisionLayerMoveWorld =
                FrameworkCore.CollisionContext.AddLayer("Collision MoveWorld");

            //  Add collision layers
            collisionLayerHitWorld =
                FrameworkCore.CollisionContext.AddLayer("Collision HitWorld");

            //  Add collision layers
            collisionLayerAllMech =
                FrameworkCore.CollisionContext.AddLayer("Collision AllMech");

            //  Add collision layers
            collisionLayerItems =
                FrameworkCore.CollisionContext.AddLayer("Collision Items");

            if (Info.GamePlayType == GamePlayTypeId.Versus)
            {
                collisionVersusTeam = new CollisionLayer[2];

                //  Add two collision layers
                for (int i = 0; i < 2; i++)
                {
                    collisionVersusTeam[i] =
                        FrameworkCore.CollisionContext.AddLayer(
                            "Collision Versus Team");
                }
            }
            else
            {
                //  Add collision layers
                collisionLayerFriendlyMech =
                    FrameworkCore.CollisionContext.AddLayer("Collision FriendlyMech");

                //  Add collision layers
                collisionLayerEnemyMech =
                    FrameworkCore.CollisionContext.AddLayer("Collision EnemyMech");
            }
        }
        private void AddCollLayerButton_Click(object sender, EventArgs e)
        {
            newCollisionLayerForm form2 = new newCollisionLayerForm();

            form2.ShowDialog();

            if (form2.OKColpressed)
            {
                CollisionLayer collisionLayer = new CollisionLayer(
                    int.Parse(form2.collWidth.Text),
                    int.Parse(form2.collHeight.Text));

                collDict.Add(form2.collName.Text + ".collayer", collisionLayer);
                tileMap.colLayers.Add(collisionLayer);
                CollLayerListBox.Items.Add(form2.collName.Text + ".collayer");

                AdjustScrollBars();
            }
        }
示例#28
0
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        protected override void LoadContent()
        {
            //use base.Content to load your game content here
            //load map0 layers and backbuffer
            base.Maps[0].CollisionLayer      = CollisionLayer.FromFile("Content/Layers/Map1/collision.lyr");
            base.Maps[0].TacticalLayer       = TileLayer.FromFile(Content, "Content/Layers/Map1/tactical_map.lyr");
            base.Maps[0].TacticalLayer.Alpha = 1.0f;
            base.Maps[0].Layers.Add(TileLayer.FromFile(Content, "Content/Layers/Map1/map1.lyr"));
            base.Maps[0].Layers[0].Alpha = 1f;

            //player setup
            AnimatedSprite pas = new AnimatedSprite(base.Content.Load <Texture2D>("sprites/ship"), null);

            pas.AddAnimation(1, 64, 64, 0, 0, 1, "Idle");
            pas.Animations["Idle"].UpdateType = UpdateType.Forward;
            pas.CurrentAnimationName          = "Idle";
            PlayerObject player = new PlayerObject("Player", new Vector2(0, 0), pas, base.Content.Load <Texture2D>("particles/particle_base"));

            player.CurrentMap = CurrentMap;
        }
示例#29
0
        public CollisionSpawner(CollisionLayer periphery)
        {
            _secondsToMaximumValues        = 300f;
            _timeSinceStart                = 0.0f;
            _minimumTimeSinceLastBirdSpawn = 0.6f;
            _maximumTimeSinceLastBirdSpawn = 3f;
            _timeSinceLastBirdSpawn        = 0.0f;
            _minimumBirdSpeed              = 150f;
            _maximumBirdSpeed              = 700f;
            _isSpawning             = false;
            _layer                  = periphery;
            TimeInbetweenBirdSpawns = 1.0f;

            _timeSinceLastGroundUnitSpawn = 0.0f;
            TimeInbetweenGroundUnitSpawns = 8f;

            _timeSinceLastBatterySpawn        = 0.0f;
            _minimumTimeSinceLastBatterySpawn = 15f;
            _maximumTimeSinceLastBatterySpawn = 45f;
            TimeInbetweenBatterySpawns        = 15f;
        }
示例#30
0
        public void AddLaser(IMovement movement, CollisionLayer collision_layers)
        {
            Animation laserAnimation = new Animation();

            // initlize the laser animation
            laserAnimation.Initialize(laserTexture,
                                      _player.Position,
                                      46,
                                      16,
                                      1,
                                      30,
                                      Color.White,
                                      1f,
                                      true);

            laserBeams.Add().Initialize(this, laserAnimation, movement, collision_layers);

            var instance = laserSoundEffect.CreateInstance();

            instance.Play();
        }