Beispiel #1
0
        public override void onAddedToScene()
        {
            // TODO - this should happen automatically
            scale = new Vector2(5, 5);

            var gameScene           = (HandyScene)scene;
            var animationDefinition = gameScene.AnimationDefinitions[AsepriteFiles.SPACEMAN_SHIELD];

            var sprite = new AnimatableSprite(animationDefinition.SpriteDefinition.Subtextures);

            sprite.renderLayer = RenderLayers.PRIMARY;

            var animation = new AnimationComponent(sprite, animationDefinition, SpacemanAnimations.SHIELD);

            var collider = new BoxCollider(5 * 1.5f, 5 * 5.5f);

            collider.localOffset = new Vector2(5, 0);
            Flags.setFlagExclusive(ref collider.physicsLayer, PhysicsLayers.BACK_WALLS);
            Flags.setFlag(ref collider.collidesWithLayers, PhysicsLayers.BALL);

            var events = new EventComponent();

            events.SetTriggers(_triggers);

            addComponent(sprite);
            addComponent(animation);
            addComponent(events);
            addComponent(collider);

            position = new Vector2(position.X + 5 * 15, position.Y);
        }
Beispiel #2
0
        public override void onAddedToScene()
        {
            var gameScene = (HandyScene)scene;
            AnimationDefinition animationDefinition;

            Vector2[] lightPoints;
            Vector2[] heavyPoints;
            switch (Settings.Character)
            {
            case Gameplay.Character.KNIGHT:
                _state = new KnightStateMachineComponent(new KnightState());
                _events.SetTriggers(_knightEventTriggers);
                animationDefinition = gameScene.AnimationDefinitions[AsepriteFiles.KNIGHT];
                lightPoints         = scene.content.Load <Polygon>(Hitboxes.KNIGHT_HITBOX_LIGHT).points;
                heavyPoints         = scene.content.Load <Polygon>(Hitboxes.KNIGHT_HITBOX_HEAVY).points;
                break;

            case Gameplay.Character.WIZARD:
                _state = new WizardStateMachineComponent(new WizardState());
                _events.SetTriggers(_wizardEventTriggers);
                animationDefinition = gameScene.AnimationDefinitions[AsepriteFiles.WIZARD];
                lightPoints         = scene.content.Load <Polygon>(Hitboxes.WIZARD_HITBOX_LIGHT).points;
                heavyPoints         = scene.content.Load <Polygon>(Hitboxes.WIZARD_HITBOX_HEAVY).points;

                break;

            case Gameplay.Character.SPACEMAN:
                _state = new SpacemanStateMachineComponent(new SpacemanState());
                _events.SetTriggers(_spacemanEventTriggers);
                animationDefinition = gameScene.AnimationDefinitions[AsepriteFiles.SPACEMAN];
                lightPoints         = scene.content.Load <Polygon>(Hitboxes.KNIGHT_HITBOX_LIGHT).points;
                heavyPoints         = scene.content.Load <Polygon>(Hitboxes.KNIGHT_HITBOX_HEAVY).points;

                break;

            case Gameplay.Character.ALIEN:
                throw new NotImplementedException();

            case Gameplay.Character.PIRATE:
                throw new NotImplementedException();

            case Gameplay.Character.SKELETON:
                throw new NotImplementedException();

            default:
                throw new ArgumentOutOfRangeException();
            }
            _mainPlayerBodySprite             = new AnimatableSprite(animationDefinition.SpriteDefinition.Subtextures);
            _mainPlayerBodySprite.renderLayer = RenderLayers.PRIMARY;
            _mainBodyAnimation = new AnimationComponent(_mainPlayerBodySprite, animationDefinition, KnightAnimations.IDLE_HORIZONTAL);
            // must generate collider after we create the sprite,
            // otherwise the collider doesn't know how big it is (that's how it default works)
            _collider      = new BoxCollider(15, 10);
            _collider.name = ComponentNames.PLAYER_COLLIDER;
            Flags.setFlagExclusive(ref _collider.physicsLayer, PhysicsLayers.PLAYER);
            _collider.collidesWithLayers = 0;
            Flags.setFlag(ref _collider.collidesWithLayers, PhysicsLayers.BACK_WALLS);
            Flags.setFlag(ref _collider.collidesWithLayers, PhysicsLayers.SIDE_WALLS);
            Flags.setFlag(ref _collider.collidesWithLayers, PhysicsLayers.ENVIRONMENT);
            Flags.setFlag(ref _collider.collidesWithLayers, PhysicsLayers.NET);


            // Aim Indicator
            var aimIndicator = new AimIndicator(this);

            scene.addEntity(aimIndicator);

            addComponent(_state);
            // _hitbox = new PolygonCollider([]);
            addComponent(_mainPlayerBodySprite);
            addComponent(_mainBodyAnimation);

            addComponent(_collider);
            if (_stateComponent.side == Gameplay.Side.RIGHT)
            {
                _mainPlayerBodySprite.flipX = true;
                // TODO - this is horrible but it's the only solution that worked
                Vector2 lightOffset = new Vector2();
                Vector2 heavyOffset = new Vector2();
                switch (Settings.Character)
                {
                case Gameplay.Character.KNIGHT:
                    lightOffset = new Vector2(-8.5f, -1.5f);
                    heavyOffset = new Vector2(-25, 2.5f);
                    break;

                case Gameplay.Character.WIZARD:
                    lightOffset = new Vector2(0.333f, 1f);
                    heavyOffset = new Vector2(-.286f, 0.429f);
                    break;

                case Gameplay.Character.SPACEMAN:
                    break;

                case Gameplay.Character.ALIEN:
                    break;

                case Gameplay.Character.PIRATE:
                    break;

                case Gameplay.Character.SKELETON:
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }

                lightPoints = lightPoints.Reverse().Select(point => new Vector2(-point.X + lightOffset.X, point.Y + lightOffset.Y)).ToArray();
                heavyPoints = heavyPoints.Reverse().Select(point => new Vector2(-point.X + heavyOffset.X, point.Y + heavyOffset.Y)).ToArray();
            }
            _lightHitbox           = new PolygonCollider(lightPoints);
            _lightHitbox.isTrigger = true;
            _lightHitbox.name      = ComponentNames.HITBOX_COLLIDER_LIGHT;
            addComponent(_lightHitbox);
            _heavyHitbox           = new PolygonCollider(heavyPoints);
            _heavyHitbox.isTrigger = true;
            _heavyHitbox.name      = ComponentNames.HITBOX_COLLIDER_HEAVY;
            addComponent(_heavyHitbox);

            // Circle and cooldowns
            var subtextures = Util.ExtractSubtextures(gameScene.Textures[Sprites.CHARACTER_CIRCLE], 1, 1);
            var circle      = new SpritesheetComponent(subtextures);

            circle.name         = ComponentNames.CHARACTER_CIRCLE;
            circle.renderLayer  = RenderLayers.BACKGROUND;
            circle.localOffset  = new Vector2(0, 15);
            circle.renderOffset = 1;
            addComponent(circle);

            subtextures = Util.ExtractSubtextures(gameScene.Textures[Sprites.LEFT_COOLDOWN], 1, 15);
            var left = new SpritesheetComponent(subtextures);

            left.name         = ComponentNames.LEFT_COOLDOWN;
            left.renderLayer  = RenderLayers.BACKGROUND;
            left.localOffset  = new Vector2(0, 15);
            left.renderOffset = 1;
            addComponent(left);

            subtextures = Util.ExtractSubtextures(gameScene.Textures[Sprites.RIGHT_COOLDOWN], 1, 15);
            var right = new SpritesheetComponent(subtextures);

            right.name         = ComponentNames.RIGHT_COOLDOWN;
            right.renderLayer  = RenderLayers.BACKGROUND;
            right.localOffset  = new Vector2(0, 15);
            right.renderOffset = 1;
            addComponent(right);

            addComponent(new SpriteDepthComponent {
                BaseRenderLayer = RenderLayers.PRIMARY
            });

            SetupSound();
        }