Esempio n. 1
0
        public static SpriteSheetRectName TurnOff(this SpriteSheetRectName thingy)
        {
            switch (thingy)
            {
            case SpriteSheetRectName.WallLightOn_N:
                return(SpriteSheetRectName.WallLightOff_N);

            case SpriteSheetRectName.WallLightOn_W:
                return(SpriteSheetRectName.WallLightOff_W);

            case SpriteSheetRectName.Portal_E:
                return(SpriteSheetRectName.PortalOff_E);

            case SpriteSheetRectName.Portal_W:
                return(SpriteSheetRectName.PortalOff_W);

            case SpriteSheetRectName.Portal_N:
                return(SpriteSheetRectName.PortalOff_N);

            case SpriteSheetRectName.Portal_S:
                return(SpriteSheetRectName.PortalOff_S);

            default:
                return(thingy);
            }
        }
Esempio n. 2
0
 public static SpriteSheetRectName ReleaseFloorSwitch(this SpriteSheetRectName floorswitch)
 {
     switch (floorswitch)
     {
     case SpriteSheetRectName.ButtonPressed_E:
         return(SpriteSheetRectName.Button_E);
     }
     return(floorswitch);
 }
Esempio n. 3
0
        public static bool IsClose(this SpriteSheetRectName door)
        {
            switch (door)
            {
            case SpriteSheetRectName.WallDoorClosed_W:
            case SpriteSheetRectName.WallDoorClosed_N:
                return(true);

            default:
                return(false);
            }
        }
Esempio n. 4
0
        public static SpriteSheetRectName CloseDoor(this SpriteSheetRectName door)
        {
            switch (door)
            {
            case SpriteSheetRectName.WallDoorOpen_W:
                return(SpriteSheetRectName.WallDoorClosed_W);

            case SpriteSheetRectName.WallDoorOpen_N:
                return(SpriteSheetRectName.WallDoorClosed_N);
            }
            return(door);
        }
Esempio n. 5
0
        public static bool IsFloorSwitch(this SpriteSheetRectName spriteSheetRectName)
        {
            switch (spriteSheetRectName)
            {
            case SpriteSheetRectName.ButtonPressed_E:
            case SpriteSheetRectName.Button_E:
                return(true);

            default:
                return(false);
            }
        }
Esempio n. 6
0
        public static bool IsLight(this SpriteSheetRectName light)
        {
            switch (light)
            {
            case SpriteSheetRectName.WallLightOff_N:
            case SpriteSheetRectName.WallLightOff_W:
            case SpriteSheetRectName.WallLightOn_N:
            case SpriteSheetRectName.WallLightOn_W:
                return(true);

            default:
                return(false);
            }
        }
Esempio n. 7
0
        public static bool IsLever(this SpriteSheetRectName lever)
        {
            switch (lever)
            {
            case SpriteSheetRectName.WallSwitchOff_N:
            case SpriteSheetRectName.WallSwitchOff_W:
            case SpriteSheetRectName.WallSwitchOn_N:
            case SpriteSheetRectName.WallSwitchOn_W:
                return(true);

            default:
                return(false);
            }
        }
Esempio n. 8
0
        public static bool IsRetracted(this SpriteSheetRectName piston)
        {
            switch (piston)
            {
            case SpriteSheetRectName.PistolRetracted_N:
            case SpriteSheetRectName.PistolRetracted_W:
            case SpriteSheetRectName.PistolRetracted_S:
            case SpriteSheetRectName.PistolRetracted_E:
                return(true);

            default:
                return(false);
            }
        }
Esempio n. 9
0
        public static SpriteSheetRectName FlipSwitch(this SpriteSheetRectName swt)
        {
            switch (swt)
            {
            case SpriteSheetRectName.WallSwitchOff_W:
                return(SpriteSheetRectName.WallSwitchOn_W);

            case SpriteSheetRectName.WallSwitchOff_N:
                return(SpriteSheetRectName.WallSwitchOn_N);

            case SpriteSheetRectName.WallSwitchOn_W:
                return(SpriteSheetRectName.WallSwitchOff_W);

            case SpriteSheetRectName.WallSwitchOn_N:
                return(SpriteSheetRectName.WallSwitchOff_N);
            }
            return(swt);
        }
Esempio n. 10
0
        public static bool IsPortal(this SpriteSheetRectName portal)
        {
            switch (portal)
            {
            case SpriteSheetRectName.PortalOff_E:
            case SpriteSheetRectName.PortalOff_W:
            case SpriteSheetRectName.PortalOff_N:
            case SpriteSheetRectName.PortalOff_S:
            case SpriteSheetRectName.Portal_E:
            case SpriteSheetRectName.Portal_W:
            case SpriteSheetRectName.Portal_N:
            case SpriteSheetRectName.Portal_S:
                return(true);

            default:
                return(false);
            }
        }
Esempio n. 11
0
        public static SpriteSheetRectName RetractPiston(this SpriteSheetRectName piston)
        {
            switch (piston)
            {
            case SpriteSheetRectName.PistolExtended_N:
                return(SpriteSheetRectName.PistolRetracted_N);

            case SpriteSheetRectName.PistolExtended_W:
                return(SpriteSheetRectName.PistolRetracted_W);

            case SpriteSheetRectName.PistolExtended_S:
                return(SpriteSheetRectName.PistolRetracted_S);

            case SpriteSheetRectName.PistolExtended_E:
                return(SpriteSheetRectName.PistolRetracted_E);

            default:
                return(piston);
            }
        }
Esempio n. 12
0
        public static Direction GetSpriteDirection(this SpriteSheetRectName spriteSheetRectName)
        {
            var spritename = spriteSheetRectName.ToString();
            var lc         = spritename.Substring(spritename.Length - 1);

            switch (lc)
            {
            case "E":
                return(Direction.right);

            case "W":
                return(Direction.left);

            case "N":
                return(Direction.up);

            case "S":
                return(Direction.down);
            }
            return(Direction.none);
        }
Esempio n. 13
0
        public static bool IsOff(this SpriteSheetRectName swt)
        {
            switch (swt)
            {
            case SpriteSheetRectName.WallSwitchOff_W:
            case SpriteSheetRectName.WallSwitchOff_N:

            case SpriteSheetRectName.WallLightOff_W:
            case SpriteSheetRectName.WallLightOff_N:

            case SpriteSheetRectName.PortalOff_E:
            case SpriteSheetRectName.PortalOff_W:
            case SpriteSheetRectName.PortalOff_N:
            case SpriteSheetRectName.PortalOff_S:

            case SpriteSheetRectName.Button_E:
                return(true);

            default:
                return(false);
            }
        }
Esempio n. 14
0
        public static bool IsOn(this SpriteSheetRectName swt)
        {
            switch (swt)
            {
            case SpriteSheetRectName.WallSwitchOn_W:
            case SpriteSheetRectName.WallSwitchOn_N:

            case SpriteSheetRectName.WallLightOn_W:
            case SpriteSheetRectName.WallLightOn_N:

            case SpriteSheetRectName.Portal_E:
            case SpriteSheetRectName.Portal_W:
            case SpriteSheetRectName.Portal_N:
            case SpriteSheetRectName.Portal_S:

            case SpriteSheetRectName.ButtonPressed_E:
                return(true);

            default:
                return(false);
            }
        }
        private static Humper.Base.RectangleF GetCollsionBox(Vector2 pos, SpriteSheetRectName spriteSheetRectName)
        {
            var          result       = new Humper.Base.RectangleF();
            CollisionTag collisionTag = spriteSheetRectName.GetCollisionTag();
            var          dir          = spriteSheetRectName.GetSpriteDirection();

            switch (collisionTag)
            {
            case CollisionTag.DoorClosed:
            case CollisionTag.DoorOpened:
            case CollisionTag.Wall:

                switch (dir)
                {
                case Direction.up:
                    result.X      = pos.X - 0.3f;
                    result.Y      = pos.Y - 0.3f;
                    result.Width  = 1;
                    result.Height = 0.3f;
                    break;

                case Direction.left:
                    result.X      = pos.X - 0.3f;
                    result.Y      = pos.Y - 0.3f;
                    result.Width  = 0.3f;
                    result.Height = 1;
                    break;

                case Direction.down:
                    result.X      = pos.X - 0.3f;
                    result.Y      = pos.Y + 0.4f;
                    result.Width  = 1;
                    result.Height = 0.3f;
                    break;

                case Direction.right:
                    result.X      = pos.X + 0.4f;
                    result.Y      = pos.Y - 0.3f;
                    result.Width  = 0.3f;
                    result.Height = 1;
                    break;
                }
                break;

            case CollisionTag.Block:
                result.X      = pos.X - 0.3f;
                result.Y      = pos.Y - 0.3f;
                result.Width  = 1;
                result.Height = 1;
                break;

            case CollisionTag.PushableBlock:
                result.X      = pos.X;
                result.Y      = pos.Y;
                result.Width  = 0.3f;
                result.Height = 0.3f;
                break;

            case CollisionTag.FloorSwitch:
                result.X      = pos.X - 0.1f;
                result.Y      = pos.Y - 0.1f;
                result.Width  = 0.5f;
                result.Height = 0.5f;
                break;

            case CollisionTag.Lever:
                result.X      = pos.X - 0.1f;
                result.Y      = pos.Y - 0.1f;
                result.Width  = 0.5f;
                result.Height = 0.5f;
                break;

            case CollisionTag.Slab:
                break;

            case CollisionTag.None:
                result.X      = pos.X - 0.3f;
                result.Y      = pos.Y - 0.3f;
                result.Width  = 1;
                result.Height = 1;
                break;

            case CollisionTag.EndPoint:
                result.X      = pos.X - 0.3f;
                result.Y      = pos.Y - 0.3f;
                result.Width  = 1;
                result.Height = 1;
                break;

            case CollisionTag.Portal:
                switch (dir)
                {
                case Direction.up:
                    result.X      = pos.X - 0.1f;
                    result.Y      = pos.Y - 0.15f;
                    result.Width  = 0.5f;
                    result.Height = 0.1f;
                    break;

                case Direction.left:
                    result.X      = pos.X - 0.15f;
                    result.Y      = pos.Y - 0.1f;
                    result.Width  = 0.1f;
                    result.Height = 0.5f;
                    break;

                case Direction.down:
                    result.X      = pos.X - 0.1f;
                    result.Y      = pos.Y + 0.45f;
                    result.Width  = 0.5f;
                    result.Height = 0.1f;
                    break;

                case Direction.right:
                    result.X      = pos.X + 0.45f;
                    result.Y      = pos.Y - 0.1f;
                    result.Width  = 0.1f;
                    result.Height = 0.5f;
                    break;
                }
                break;

            case CollisionTag.PistonRetracted:
                switch (dir)
                {
                case Direction.up:
                    result.X      = pos.X - 0.35f;
                    result.Y      = pos.Y - 0.1f;
                    result.Width  = 0.75f;
                    result.Height = 0.2f;
                    break;

                case Direction.left:
                    result.X      = pos.X - 0.1f;
                    result.Y      = pos.Y - 0.35f;
                    result.Width  = 0.2f;
                    result.Height = 0.75f;
                    break;

                case Direction.down:
                    result.X      = pos.X - 0.2f;
                    result.Y      = pos.Y + 0.1f;
                    result.Width  = 0.75f;
                    result.Height = 0.2f;
                    break;

                case Direction.right:
                    result.X      = pos.X + 0.1f;
                    result.Y      = pos.Y - 0.2f;
                    result.Width  = 0.2f;
                    result.Height = 0.75f;
                    break;
                }
                break;

            case CollisionTag.PistonExtended:
                switch (dir)
                {
                case Direction.up:
                    result.X      = pos.X - 0.45f;
                    result.Y      = pos.Y + 0.35f;
                    result.Width  = 0.75f;
                    result.Height = 0.2f;
                    break;

                case Direction.left:
                    result.X      = pos.X + 0.35f;
                    result.Y      = pos.Y - 0.45f;
                    result.Width  = 0.2f;
                    result.Height = 0.75f;
                    break;

                case Direction.down:
                    result.X      = pos.X - 0.25f;
                    result.Y      = pos.Y - 0.55f;
                    result.Width  = 0.75f;
                    result.Height = 0.2f;
                    break;

                case Direction.right:
                    result.X      = pos.X - 0.55f;
                    result.Y      = pos.Y - 0.25f;
                    result.Width  = 0.2f;
                    result.Height = 0.75f;
                    break;
                }
                break;
            }

            return(result);
        }
Esempio n. 16
0
        public static CollisionTag GetCollisionTag(this SpriteSheetRectName spriteSheetRectName)
        {
            var result = CollisionTag.None;

            switch (spriteSheetRectName)
            {
            case SpriteSheetRectName.None:
                result = CollisionTag.None;
                break;

            case SpriteSheetRectName.BlockHuge_E:
            case SpriteSheetRectName.BlockLarge_E:
                result = CollisionTag.Block;
                break;

            case SpriteSheetRectName.BlockSmall_E:
                result = CollisionTag.PushableBlock;
                break;

            case SpriteSheetRectName.Button_E:
            case SpriteSheetRectName.ButtonPressed_E:
                result = CollisionTag.FloorSwitch;
                break;

            case SpriteSheetRectName.Floor_E:
                result = CollisionTag.None;
                break;

            case SpriteSheetRectName.SlabQuarter_S:
                result = CollisionTag.EndPoint;
                break;

            case SpriteSheetRectName.WallDoorClosed_N:
            case SpriteSheetRectName.WallDoorClosed_W:
                result = CollisionTag.DoorClosed;
                break;

            case SpriteSheetRectName.WallDoorOpen_N:
            case SpriteSheetRectName.WallDoorOpen_W:
                result = CollisionTag.DoorOpened;
                break;

            case SpriteSheetRectName.WallDoorway_N:
                result = CollisionTag.None;
                break;

            case SpriteSheetRectName.WallStraight_N:
            case SpriteSheetRectName.WallStraight_W:
            case SpriteSheetRectName.WallStraight_S:
            case SpriteSheetRectName.WallStraight_E:
                result = CollisionTag.Wall;
                break;

            case SpriteSheetRectName.WallSwitchOff_N:
            case SpriteSheetRectName.WallSwitchOff_W:
            case SpriteSheetRectName.WallSwitchOn_N:
            case SpriteSheetRectName.WallSwitchOn_W:
                result = CollisionTag.Lever;
                break;

            case SpriteSheetRectName.WallWindow_N:
            case SpriteSheetRectName.WallWindow_W:
                result = CollisionTag.Wall;
                break;

            case SpriteSheetRectName.Portal_N:
            case SpriteSheetRectName.Portal_W:
            case SpriteSheetRectName.Portal_S:
            case SpriteSheetRectName.Portal_E:
            case SpriteSheetRectName.PortalOff_E:
            case SpriteSheetRectName.PortalOff_W:
            case SpriteSheetRectName.PortalOff_N:
            case SpriteSheetRectName.PortalOff_S:
                result = CollisionTag.Portal;
                break;

            case SpriteSheetRectName.PistolExtended_N:
            case SpriteSheetRectName.PistolExtended_W:
            case SpriteSheetRectName.PistolExtended_S:
            case SpriteSheetRectName.PistolExtended_E:
                result = CollisionTag.PistonExtended;
                break;

            case SpriteSheetRectName.PistolRetracted_N:
            case SpriteSheetRectName.PistolRetracted_W:
            case SpriteSheetRectName.PistolRetracted_S:
            case SpriteSheetRectName.PistolRetracted_E:
                result = CollisionTag.PistonRetracted;
                break;

            case SpriteSheetRectName.Trigger:
                result = CollisionTag.Trigger;
                break;
            }
            return(result);
        }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            string              objname      = string.Empty;
            Vector3             worldpos     = Vector3.Zero;
            Vector2             spriteorigin = Vector2.Zero;
            SpriteSheetRectName tiletype     = SpriteSheetRectName.None;

            Humper.Base.RectangleF boundingbox  = Humper.Base.RectangleF.Empty;
            CollisionTag           collisionTag = CollisionTag.None;
            string onactivate   = string.Empty;
            string ondeactivate = string.Empty;
            object metadata     = null;

            while (reader.Read())
            {
                if (reader.TokenType != JsonToken.PropertyName)
                {
                    break;
                }

                string propertyName = (string)reader.Value;
                if (!reader.Read())
                {
                    continue;
                }

                switch (propertyName)
                {
                case "Name":
                    objname = serializer.Deserialize <string>(reader);
                    break;

                case "WorldPos":
                    worldpos = serializer.Deserialize <Vector3>(reader);
                    break;

                case "SpriteOrigin":
                    spriteorigin = serializer.Deserialize <Vector2>(reader);
                    break;

                case "TiltType":
                    tiletype = (SpriteSheetRectName)serializer.Deserialize <int>(reader);
                    break;

                case "BoundingBox":
                    boundingbox = serializer.Deserialize <Humper.Base.RectangleF>(reader);
                    break;

                case "CollisionTag":
                    collisionTag = (CollisionTag)serializer.Deserialize <int>(reader);
                    break;

                case "OnActivate":
                    onactivate = serializer.Deserialize <string>(reader);
                    break;

                case "OnDeactivate":
                    ondeactivate = serializer.Deserialize <string>(reader);
                    break;

                case "Metadata":
                    metadata = serializer.Deserialize <object>(reader);
                    break;
                }
            }

            return(new Object()
            {
                Name = objname,
                WorldPos = worldpos,
                SpriteOrigin = spriteorigin,
                TileType = tiletype,
                BoundingBox = boundingbox,
                CollisionTag = collisionTag,
                OnActivate = onactivate,
                OnDeactivate = ondeactivate,
                Memory = new Stack <string>(),
                MetaData = metadata
            });
        }
 public Object FindObject(SpriteSheetRectName obj)
 {
     return(Objects.FirstOrDefault(x => x.Value.TileType == obj).Value);
 }
        public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
        {
            Map result;
            int width = 0, height = 0, depth = 0;

            SpriteSheetRectName[,] floors = null;
            SpriteSheetRectName[,] walls  = null;
            List <Object> objects = new List <Object>();

            Humper.Base.RectangleF[] collisions  = null;
            List <Annotation>        annotations = new List <Annotation>();

            bool isWidth  = false;
            bool isHeight = false;

            while (reader.Read())
            {
                if (reader.TokenType != JsonToken.PropertyName)
                {
                    break;
                }

                string propertyName = (string)reader.Value;
                if (!reader.Read())
                {
                    continue;
                }

                if (isWidth && isHeight && floors is null && walls is null)
                {
                    floors = new SpriteSheetRectName[height, width];
                    walls  = new SpriteSheetRectName[height, width];
                }

                switch (propertyName)
                {
                case "Width":
                    width   = serializer.Deserialize <int>(reader);
                    isWidth = true;
                    break;

                case "Height":
                    height   = serializer.Deserialize <int>(reader);
                    isHeight = true;
                    break;

                case "Depth":
                    depth = serializer.Deserialize <int>(reader);
                    break;

                case "Floor":
                    var t = HelperMethod.Make2DArray(serializer.Deserialize <int[]>(reader), height, width);
                    for (int x = 0; x < width; x++)
                    {
                        for (int y = 0; y < height; y++)
                        {
                            floors[y, x] = (SpriteSheetRectName)t[y, x];
                        }
                    }
                    break;

                case "Wall":
                    var tt = HelperMethod.Make2DArray(serializer.Deserialize <int[]>(reader), height, width);
                    for (int x = 0; x < width; x++)
                    {
                        for (int y = 0; y < height; y++)
                        {
                            walls[y, x] = (SpriteSheetRectName)tt[y, x];
                        }
                    }
                    break;

                case "Objects":
                    objects = serializer.Deserialize <List <Object> >(reader);
                    break;

                case "Collisions":
                    collisions = serializer.Deserialize <Humper.Base.RectangleF[]>(reader);
                    break;

                case "Annotations":
                    annotations = serializer.Deserialize <List <Annotation> >(reader);
                    break;
                }
            }

            result = new Map(width, height, depth, floors, walls, objects, collisions, annotations);
            return(result);
        }