コード例 #1
0
        public override void Initialize(GameScreen parentScreen)
        {
            base.Initialize(parentScreen);

            AimTexture = new Texture2D(ParentScreen.ParentGame.GraphicsDevice, 1, 1);
            AimTexture.SetData <Color>(new Color[] { Color.White });

            // find fire durations
            ClipInstance.Play(BOMB_FIRE_CLIP_NAME);
            bombReloadTime = ClipInstance.CurrentAnim.DurationInSeconds;
            ClipInstance.Play(BOW_FIRE_CLIP_NAME);
            bowReloadTime = ClipInstance.CurrentAnim.DurationInSeconds;

            // set state and current clip
            state = PrincessState.IdleBow;
            ClipInstance.Play(BOW_IDLE_CLIP_NAME);
        }
コード例 #2
0
    IEnumerator CheckPrincessState()
    {
        while (!isDie)
        {
            yield return(new WaitForSeconds(0.2f));

            float dist = Vector3.Distance(PrinceTr.position, PrincessTr.position);
            if (dist <= jumpDist)
            {
                princessState = PrincessState.jump;
                Debug.Log("왕자를 만났어");
                GameOver();
            }
            else if (dist <= traceDist)
            {
                princessState = PrincessState.run;
            }
            else
            {
                princessState = PrincessState.idle;
            }
        }
    }
コード例 #3
0
        private void Fire()
        {
            dragVector = dragStart - dragEnd;
            if (dragVector.Length() > 250f)
            {
                dragVector.Normalize();
                dragVector *= 250f;
            }
            dragVector *= POWER;

            this.LevelScreen.FireProjectile(this.Position + fireOffset, dragVector, 0, currentProjectileType);
            timeSinceLastFired = 0;

            if (currentProjectileType == ProjectileType.Arrow)
            {
                state = PrincessState.FiringBow;
                ClipInstance.Play(BOW_FIRE_CLIP_NAME);
            }
            else
            {
                state = PrincessState.ThrowingBomb;
                ClipInstance.Play(BOMB_FIRE_CLIP_NAME);
            }
        }
コード例 #4
0
        public override void Update(float dt)
        {
            timeSinceLastFired += dt;

            if (Input.MouseDown(MouseButton.Left))
            {
                if (!isDragging && timeSinceLastFired > (currentProjectileType == ProjectileType.Arrow ? bowReloadTime : bombReloadTime))
                {
                    if (Vector2.Distance(this.Position - LevelScreen.Camera2D.Position, new Vector2(Input.MouseX, Input.MouseY)) < DRAG_RADIUS)
                    {
                        isDragging = true;
                        dragStart  = new Vector2(Input.MouseX, Input.MouseY);
                    }
                }

                dragEnd      = new Vector2(Input.MouseX, Input.MouseY);
                dragDistance = MathHelper.Clamp(Vector2.Distance(dragStart, dragEnd), 0, MAX_DRAG_DISTANCE);

                // TODO update drag distance sound
                // TODO update drag distance animation

                angle = (float)Math.Atan2(dragStart.Y - dragEnd.Y, dragStart.X - dragEnd.X);
            }
            else if (Input.MouseJustUp(MouseButton.Left) && isDragging)
            {
                isDragging = false;

                if (dragDistance < MIN_DRAG_DISTANCE)
                {
                    // do nothing...
                }
                else
                {
                    Fire();
                }
            }

            float fear = 0.0f;

            foreach (Unit u in LevelScreen.Units.ActiveUnits)
            {
                if (u.UnitType != UnitType.Knight && u.Health > 0.0f)
                {
                    float distToPrincess = Math.Abs(u.Physics.Bodies[0].Position.X - Physics.Bodies[0].Position.X);
                    fear += FEAR_STRENGTH / (distToPrincess * distToPrincess);
                }
            }
            fearFactorTarget = fear;
            FearFactor      += (fearFactorTarget - FearFactor) * dt * FEAR_RATE_OF_CHANGE;
            FearFactor       = Math.Min(1.0f, FearFactor);

            if (Input.MouseDW != lastScrollPos && updatesSinceWeaponChange > 30)
            {
                // change current project type, state and clip
                if (currentProjectileType == ProjectileType.Bomb)
                {
                    currentProjectileType = ProjectileType.Arrow;
                    state = PrincessState.IdleBow;
                    ClipInstance.Play(BOW_IDLE_CLIP_NAME);
                }
                else
                {
                    currentProjectileType = ProjectileType.Bomb;
                    state = PrincessState.IdleBomb;
                    ClipInstance.Play(BOMB_IDLE_CLIP_NAME);
                }

                lastScrollPos            = Input.MouseDW;
                updatesSinceWeaponChange = 0;
            }
            else
            {
                updatesSinceWeaponChange++;
                lastScrollPos = Input.MouseDW;
            }

            // Update state and the current clip, if need be. NOTE: The only other state/clip transitions are when changing gun and in Fire().
            switch (state)
            {
            case PrincessState.IdleBomb:
            {
                if (isDragging)
                {
                    state = PrincessState.AimingBomb;
                    ClipInstance.Play(BOMB_AIM_CLIP_NAME);
                }
            }
            break;

            case PrincessState.IdleBow:
            {
                if (isDragging)
                {
                    state = PrincessState.PullingBackBow;
                    ClipInstance.Play(BOW_AIM_CLIP_NAME);
                }
            }
            break;

            case PrincessState.AimingBomb:
            {
                if (!isDragging)
                {
                    state = PrincessState.IdleBomb;
                    ClipInstance.Play(BOMB_IDLE_CLIP_NAME);
                }
            }
            break;

            case PrincessState.PullingBackBow:
            {
                if (!isDragging)
                {
                    state = PrincessState.IdleBow;
                    ClipInstance.Play(BOW_IDLE_CLIP_NAME);
                }
            }
            break;

            case PrincessState.ThrowingBomb:
            {
                if (timeSinceLastFired > bombReloadTime)
                {
                    state = PrincessState.IdleBomb;
                    ClipInstance.Play(BOMB_IDLE_CLIP_NAME);
                }
            }
            break;

            case PrincessState.FiringBow:
            {
                if (timeSinceLastFired > bowReloadTime)
                {
                    state = PrincessState.IdleBow;
                    ClipInstance.Play(BOW_IDLE_CLIP_NAME);
                }
            }
            break;
            }

            base.Update(dt);
        }
コード例 #5
0
ファイル: Princess.cs プロジェクト: gnomicstudios/GGJ13
        private void Fire()
        {
            dragVector = dragStart - dragEnd;
            if (dragVector.Length() > 250f)
            {
                dragVector.Normalize();
                dragVector *= 250f;
            }
            dragVector *= POWER;

            this.LevelScreen.FireProjectile(this.Position + fireOffset, dragVector, 0, currentProjectileType);
            timeSinceLastFired = 0;

            if (currentProjectileType == ProjectileType.Arrow)
            {
                state = PrincessState.FiringBow;
                ClipInstance.Play(BOW_FIRE_CLIP_NAME);
            }
            else
            {
                state = PrincessState.ThrowingBomb;
                ClipInstance.Play(BOMB_FIRE_CLIP_NAME);
            }
        }
コード例 #6
0
ファイル: Princess.cs プロジェクト: gnomicstudios/GGJ13
        public override void Update(float dt)
        {
            timeSinceLastFired += dt;

            if (Input.MouseDown(MouseButton.Left))
            {
                if (!isDragging && timeSinceLastFired > (currentProjectileType == ProjectileType.Arrow ? bowReloadTime : bombReloadTime))
                {
                    if (Vector2.Distance(this.Position - LevelScreen.Camera2D.Position, new Vector2(Input.MouseX, Input.MouseY)) < DRAG_RADIUS)
                    {
                        isDragging = true;
                        dragStart = new Vector2(Input.MouseX, Input.MouseY);
                    }
                }

                dragEnd = new Vector2(Input.MouseX, Input.MouseY);
                dragDistance = MathHelper.Clamp(Vector2.Distance(dragStart, dragEnd), 0, MAX_DRAG_DISTANCE);

                // TODO update drag distance sound
                // TODO update drag distance animation

                angle = (float)Math.Atan2(dragStart.Y - dragEnd.Y, dragStart.X - dragEnd.X);

            }
            else if (Input.MouseJustUp(MouseButton.Left) && isDragging)
            {
                isDragging = false;

                if (dragDistance < MIN_DRAG_DISTANCE)
                {
                    // do nothing...
                }
                else
                {
                    Fire();
                }
            }

            float fear = 0.0f;
            foreach (Unit u in LevelScreen.Units.ActiveUnits)
            {
                if (u.UnitType != UnitType.Knight && u.Health > 0.0f)
                {
                    float distToPrincess = Math.Abs(u.Physics.Bodies[0].Position.X - Physics.Bodies[0].Position.X);
                    fear += FEAR_STRENGTH / (distToPrincess * distToPrincess);
                }
            }
            fearFactorTarget = fear;
            FearFactor += (fearFactorTarget - FearFactor) * dt * FEAR_RATE_OF_CHANGE;
            FearFactor = Math.Min(1.0f, FearFactor);

            if (Input.MouseDW != lastScrollPos && updatesSinceWeaponChange > 30)
            {
                // change current project type, state and clip
                if (currentProjectileType == ProjectileType.Bomb)
                {
                    currentProjectileType = ProjectileType.Arrow;
                    state = PrincessState.IdleBow;
                    ClipInstance.Play(BOW_IDLE_CLIP_NAME);
                }
                else
                {
                    currentProjectileType = ProjectileType.Bomb;
                    state = PrincessState.IdleBomb;
                    ClipInstance.Play(BOMB_IDLE_CLIP_NAME);
                }

                lastScrollPos = Input.MouseDW;
                updatesSinceWeaponChange = 0;
            }
            else
            {
                updatesSinceWeaponChange++;
                lastScrollPos = Input.MouseDW;
            }

            // Update state and the current clip, if need be. NOTE: The only other state/clip transitions are when changing gun and in Fire().
            switch (state)
            {
                case PrincessState.IdleBomb:
                    {
                        if (isDragging)
                        {
                            state = PrincessState.AimingBomb;
                            ClipInstance.Play(BOMB_AIM_CLIP_NAME);
                        }
                    }
                    break;
                case PrincessState.IdleBow:
                    {
                        if (isDragging)
                        {
                            state = PrincessState.PullingBackBow;
                            ClipInstance.Play(BOW_AIM_CLIP_NAME);
                        }
                    }
                    break;
                case PrincessState.AimingBomb:
                    {
                        if (!isDragging)
                        {
                            state = PrincessState.IdleBomb;
                            ClipInstance.Play(BOMB_IDLE_CLIP_NAME);
                        }
                    }
                    break;
                case PrincessState.PullingBackBow:
                    {
                        if (!isDragging)
                        {
                            state = PrincessState.IdleBow;
                            ClipInstance.Play(BOW_IDLE_CLIP_NAME);
                        }
                    }
                    break;
                case PrincessState.ThrowingBomb:
                    {
                        if (timeSinceLastFired > bombReloadTime)
                        {
                            state = PrincessState.IdleBomb;
                            ClipInstance.Play(BOMB_IDLE_CLIP_NAME);
                        }
                    }
                    break;
                case PrincessState.FiringBow:
                    {
                        if (timeSinceLastFired > bowReloadTime)
                        {
                            state = PrincessState.IdleBow;
                            ClipInstance.Play(BOW_IDLE_CLIP_NAME);
                        }
                    }
                    break;
            }

            base.Update(dt);
        }
コード例 #7
0
ファイル: Princess.cs プロジェクト: gnomicstudios/GGJ13
        public override void Initialize(GameScreen parentScreen)
        {
            base.Initialize(parentScreen);

            AimTexture = new Texture2D(ParentScreen.ParentGame.GraphicsDevice, 1, 1);
            AimTexture.SetData<Color>(new Color[] { Color.White });

            // find fire durations
            ClipInstance.Play(BOMB_FIRE_CLIP_NAME);
            bombReloadTime = ClipInstance.CurrentAnim.DurationInSeconds;
            ClipInstance.Play(BOW_FIRE_CLIP_NAME);
            bowReloadTime = ClipInstance.CurrentAnim.DurationInSeconds;

            // set state and current clip
            state = PrincessState.IdleBow;
            ClipInstance.Play(BOW_IDLE_CLIP_NAME);
        }