예제 #1
0
        public void EnemyJumping(int index, bool direction, Vector pos, int width, int jumpPower, Vector target)
        {
            if (!BlockCheck.BlockCheckTop(pos.X, pos.Y, width, jumpPower))
            {
                if (pos.Y - SystemOperator.PixelPerSecond(jumpPower) > 0)
                {
                    lstEnemyData[index].jumpCount++;

                    lstEnemyData[index].isJumping = true;
                }
            }


            if (lstEnemyData[index].isJumping)
            {
                if (lstEnemyData[index].jumpTotalLength < lstEnemyData[index].jumpMaxHeight)
                {
                    lstEnemyData[index].position.Y      -= SystemOperator.PixelPerSecond(jumpPower);
                    lstEnemyData[index].jumpTotalLength += SystemOperator.PixelPerSecond(jumpPower);
                }
                else
                {
                    lstEnemyData[index].isJumping       = false;
                    lstEnemyData[index].jumpTotalLength = 0;
                }
            }
        }
예제 #2
0
        public static void SubWeaponPosUpdate(Canvas canvas)
        {
            if (ImageData.imgSubWeapon.Count == 1)
            {
                double posX = Canvas.GetLeft(ImageData.imgSubWeapon[0]);
                double posY = Canvas.GetTop(ImageData.imgSubWeapon[0]);

                if (subWeaponTotalDistance < subWeaponRange)
                {
                    if (!subWeaponDirection)
                    {
                        posX -= SystemOperator.PixelPerSecond(subWeaponSpeed);
                    }
                    else
                    {
                        posX += SystemOperator.PixelPerSecond(subWeaponSpeed);
                    }

                    subWeaponTotalDistance += (int)SystemOperator.PixelPerSecond(subWeaponSpeed);
                    Canvas.SetLeft(ImageData.imgSubWeapon[0], posX);
                    Canvas.SetZIndex(ImageData.imgSubWeapon[0], ImageZindex.subWeapon);
                }
                else
                {
                    subWeaponTotalDistance         = 0;
                    ImageData.imgSubWeapon[0].Name = "";
                    canvas.Children.Remove(ImageData.imgSubWeapon[0]);
                    ImageData.imgSubWeapon.Remove(ImageData.imgSubWeapon[0]);
                }
            }
        }
예제 #3
0
        private static void EnemyHorizontalMove(int index, bool direction, Vector pos, Vector size,
                                                int speed, bool wait)
        {
            if (!lstEnemyData[index].valueSetComp)
            {
                EnemyBehaviorValuesSetup(index);
            }

            if (lstEnemyData[index].totalDistance.X < lstEnemyData[index].targetDistance.X)
            {
                if (!direction)
                {
                    if (!BlockCheck.BlockCheckLeft(pos.X, pos.Y, (int)size.Y, speed) &&
                        pos.X > 0)
                    {
                        if (pos.X - SystemOperator.PixelPerSecond(speed) > 0)
                        {
                            pos.X -= SystemOperator.PixelPerSecond(speed);
                        }
                        else
                        {
                            lstEnemyData[index].targetDistance = new Vector(0, lstEnemyData[index].targetDistance.Y);
                            lstEnemyData[index].direction      = true;
                        }
                    }
                }
                else
                {
                    if (!BlockCheck.BlockCheckRight(pos.X, pos.Y, (int)size.X, (int)size.Y, speed) &&
                        pos.X + size.X < 1024 - lstEnemyData[index].size.X)
                    {
                        if (pos.X + SystemOperator.PixelPerSecond(speed) < 992)
                        {
                            pos.X += SystemOperator.PixelPerSecond(speed);
                        }
                        else
                        {
                            lstEnemyData[index].targetDistance = new Vector(0, lstEnemyData[index].targetDistance.Y);
                            lstEnemyData[index].direction      = false;
                        }
                    }
                }

                lstEnemyData[index].position.X       = pos.X;
                lstEnemyData[index].totalDistance.X += SystemOperator.PixelPerSecond(speed);
            }
            else
            {
                if (wait)
                {
                    lstEnemyData[index].isWaiting      = true;
                    lstEnemyData[index].totalWaitTime  = 0;
                    lstEnemyData[index].targetWaitTime = 2000;
                }

                lstEnemyData[index].targetDistance = new Vector(0, 0);
                lstEnemyData[index].totalDistance  = new Vector(0, 0);
                lstEnemyData[index].valueSetComp   = false;
            }
        }
예제 #4
0
        public static void MainWeaponAttack(Canvas canvas)
        {
            double posx = Canvas.GetLeft(ImageData.imgPlayer);
            double posy = Canvas.GetTop(ImageData.imgPlayer);

            Canvas.SetLeft(imgMainWeapon, posx);
            Canvas.SetTop(imgMainWeapon, posy);

            if (PlayerStatus.meleeDirection)
            {
                if (rtMainWeapon.Angle < 360 + 45)
                {
                    double temp = SystemOperator.PixelPerSecond(PlayerStatus.meleeSpeed);


                    rtMainWeapon.Angle += Math.Round(temp, 0);

                    double radian = rtMainWeapon.Angle * Math.PI / 180;

                    for (int i = 0; i < lstMainWeaponCollider.Count; i++)
                    {
                        lstMainWeaponCollider[i] = new Vector(posx + 32 * (i + 1) * Math.Cos(radian),
                                                              posy + 32 * (i + 1) * Math.Sin(radian));
                    }
                }
                else
                {
                    rtMainWeapon.Angle        = 270;
                    imgMainWeapon.Visibility  = Visibility.Hidden;
                    PlayerStatus.isMainAttack = false;
                }
            }
            else
            {
                if (rtMainWeapon.Angle >= 180 - 45)
                {
                    double temp = SystemOperator.PixelPerSecond(PlayerStatus.meleeSpeed);


                    rtMainWeapon.Angle -= Math.Round(temp, 0);

                    double radian = rtMainWeapon.Angle * Math.PI / 180;


                    for (int i = 0; i < lstMainWeaponCollider.Count; i++)
                    {
                        lstMainWeaponCollider[i] = new Vector(posx + 32 * (i + 1) * Math.Cos(radian),
                                                              posy + 32 * (i + 1) * Math.Sin(radian));
                    }
                }
                else
                {
                    rtMainWeapon.Angle        = 270;
                    imgMainWeapon.Visibility  = Visibility.Hidden;
                    PlayerStatus.isMainAttack = false;
                }
            }
        }
예제 #5
0
        public static void FallingPlayer()
        {
            if (!isLadder && !isPlat && !jumping)
            {
                if (!BlockCheck.BlockCheckBottom(playerPos.X, playerPos.Y, (int)playerSize.X, (int)playerSize.Y, weight))
                {
                    if (!isKnockBack)
                    {
                        playerPos.Y += SystemOperator.PixelPerSecond(weight);
                        SystemOperator.moveCommonAmountY = SystemOperator.PixelPerSecond(weight);
                    }

                    if (!fallingStart)
                    {
                        fallingStartPoint = playerPos.Y;
                    }

                    fallingStart = true;
                    isGround     = false;
                }
                else
                {
                    if (!isGround)
                    {
                        playerPos.Y = Math.Floor(playerPos.Y + SystemOperator.PixelPerSecond(weight) / 32) - 1;
                    }

                    if (fallingStart)
                    {
                        int block = 0;

                        block = (int)(playerPos.Y - fallingStartPoint) / 32;

                        if (block > fallingEndure)
                        {
                            Sound.SoundEffectSelector(SeName.Player_Damage);

                            Sound.SoundEffectPlayer(SeName.Player_Damage);
                        }
                    }

                    fallingStart = false;
                    isGround     = true;
                    jumpCount    = 0;
                }
            }

            Canvas.SetTop(ImageData.imgPlayer, playerPos.Y);
        }
예제 #6
0
        public static void FallingItems()
        {
            for (int i = 0; i < lstItemData.Count; i++)
            {
                double posX = Canvas.GetLeft(lstItemData[i].imgItem);
                double posY = Canvas.GetTop(lstItemData[i].imgItem);

                if (!BlockCheck.BlockCheckBottom(posX, posY, (int)lstItemData[i].size.X, (int)lstItemData[i].size.Y, lstItemData[i].weight))
                {
                    posY += SystemOperator.PixelPerSecond(lstItemData[i].weight);
                }

                Canvas.SetTop(lstItemData[i].imgItem, posY);
            }
        }
예제 #7
0
        private static void EnemyFalling(int index, bool direction, Vector pos, Vector size, int speed, Vector target)
        {
            if (!lstEnemyData[index].isLadder)
            {
                if ((!BlockCheck.BlockCheckBottom(pos.X, pos.Y, (int)size.X, (int)size.Y, lstEnemyData[index].weight)))
                {
                    lstEnemyData[index].position.Y += SystemOperator.PixelPerSecond(lstEnemyData[index].weight);

                    if (!lstEnemyData[index].isFalling)
                    {
                        lstEnemyData[index].fallingStartPoint = pos.Y;
                    }

                    lstEnemyData[index].isFalling = true;
                }
                else
                {
                    if (lstEnemyData[index].isFalling)
                    {
                        int block = 0;

                        block = (int)(pos.Y - lstEnemyData[index].fallingStartPoint) / 32;

                        if (block > lstEnemyData[index].fallingEndure)
                        {
                            Sound.SoundEffectSelector(SeName.Shock);
                            Sound.SoundEffectPlayer(SeName.Shock);

                            lstEnemyData[index].life -= 1;
                        }
                    }

                    lstEnemyData[index].isFalling = false;
                    lstEnemyData[index].jumpCount = 0;
                }
            }
        }
예제 #8
0
        public static void MovePlayer(Canvas canvas)
        {
            if (KeyController.keyLeft)
            {
                if (!BlockCheck.BlockCheckLeft(playerPos.X, playerPos.Y, (int)playerSize.Y, moveSpeed) &&
                    !ObjectChecker.obstacleLeft)
                {
                    if (playerPos.X - SystemOperator.PixelPerSecond(moveSpeed) > 0)
                    {
                        playerPos.X -= SystemOperator.PixelPerSecond(moveSpeed);
                        SystemOperator.moveCommonAmountX = moveSpeed;
                    }
                    playerDirection = false;
                }
            }

            if (KeyController.keyRight)
            {
                if (!BlockCheck.BlockCheckRight(playerPos.X, playerPos.Y, (int)playerSize.X, (int)playerSize.Y, moveSpeed) &&
                    !ObjectChecker.obstacleRight)
                {
                    if (playerPos.X + SystemOperator.PixelPerSecond(moveSpeed) < 992)
                    {
                        playerPos.X += SystemOperator.PixelPerSecond(moveSpeed);
                        SystemOperator.moveCommonAmountX = moveSpeed;
                    }
                    playerDirection = true;
                }
            }

            if (KeyController.keyLeft || KeyController.keyRight)
            {
                isMove = true;
            }
            else
            {
                isMove = false;
            }


            if (KeyController.keyUp && !TalkCommander.isTalk &&
                !ObjectChecker.obstacleUp)
            {
                if (isLadder)
                {
                    if (playerPos.Y - SystemOperator.PixelPerSecond(moveSpeed) > 0)
                    {
                        playerPos.Y -= SystemOperator.PixelPerSecond(moveSpeed);
                        SystemOperator.moveCommonAmountY = moveSpeed;
                    }
                }
            }

            if (KeyController.keyDown && !TalkCommander.isTalk &&
                !ObjectChecker.obstacleDown)
            {
                if (isLadder)
                {
                    if (playerPos.Y + SystemOperator.PixelPerSecond(moveSpeed) < 768)
                    {
                        playerPos.Y += SystemOperator.PixelPerSecond(moveSpeed);
                        SystemOperator.moveCommonAmountY = moveSpeed;
                    }
                }

                if (isPlat)
                {
                    if (playerPos.Y + SystemOperator.PixelPerSecond(moveSpeed) < 768)
                    {
                        playerPos.Y += SystemOperator.PixelPerSecond(moveSpeed);
                        SystemOperator.moveCommonAmountY = moveSpeed;
                    }
                }

                if (!isLadder)
                {
                    isSquat = true;
                }
            }
            else
            {
                isSquat = false;
            }

            //jump
            if (KeyController.keySpace && jumpCount == 0)
            {
                if (playerPos.Y - jumpPower > 0)
                {
                    jumpCount++;

                    jumping = true;
                }
            }

            if (jumping)
            {
                if (jumpTotalLength < jumpMaxHeight &&
                    !BlockCheck.BlockCheckTop(playerPos.X, playerPos.Y, (int)playerSize.X, jumpPower) &&
                    !ObjectChecker.obstacleUp)
                {
                    playerPos.Y -= SystemOperator.PixelPerSecond(jumpPower);
                    SystemOperator.moveCommonAmountY = SystemOperator.PixelPerSecond(jumpPower);

                    jumpTotalLength += SystemOperator.PixelPerSecond(jumpPower);
                }
                else
                {
                    jumping         = false;
                    jumpTotalLength = 0;
                }
            }


            //itemget
            if (KeyController.keyA)
            {
                PlayerItemGetting(canvas);
            }

            //Attack
            if (KeyController.keyS)
            {
                SubWeapon.SubWeaponGenerate(canvas, playerPos.X, playerPos.Y);
            }

            if (KeyController.keyD)
            {
                if (!isMainAttack)
                {
                    MainWeapon.imgMainWeapon.Visibility = Visibility.Visible;
                    meleeDirection = playerDirection;
                    isMainAttack   = true;
                }
            }

            if (KeyController.keyE)
            {
                if (ObjectChecker.isTrigger && !TalkCommander.isTalk)
                {
                    ObjectBehavior.OnTriggerReactEvent();
                }
            }

            if (isKnockBack)
            {
                SystemOperator.BoundObject(ref playerPos, boundDirectionX, ref knockBackTotalDis, knockBackTargetDis,
                                           ref knockBackBps, ref coefficient, ref boundDirectionY,
                                           weight, moveSpeed, jumpPower, playerSize, ref isKnockBack);
            }

            //image change
            if (GameTransition.gameTransition == GameTransitionType.StageDuring)
            {
                if (KeyController.keyLeft || KeyController.keyRight)
                {
                    if (!playerDirection)
                    {
                        ImageData.imgPlayer.Source = ImageData.ImageSourceSelector(CategoryName.Player, StageData.lstDbPlayer.spriteMoveL);
                    }
                    else
                    {
                        ImageData.imgPlayer.Source = ImageData.ImageSourceSelector(CategoryName.Player, StageData.lstDbPlayer.spriteMoveR);
                    }
                }
                else
                {
                    if (!playerDirection)
                    {
                        ImageData.imgPlayer.Source = ImageData.ImageSourceSelector(CategoryName.Player, StageData.lstDbPlayer.spriteIdleL);
                    }
                    else
                    {
                        ImageData.imgPlayer.Source = ImageData.ImageSourceSelector(CategoryName.Player, StageData.lstDbPlayer.spriteIdleR);
                    }
                }


                if (isSquat)
                {
                    if (!playerDirection)
                    {
                        ImageData.imgPlayer.Source = ImageData.ImageSourceSelector(CategoryName.Player, StageData.lstDbPlayer.spriteSquatL);
                    }
                    else
                    {
                        ImageData.imgPlayer.Source = ImageData.ImageSourceSelector(CategoryName.Player, StageData.lstDbPlayer.spriteSquatR);
                    }
                }

                if (jumping)
                {
                    if (!playerDirection)
                    {
                        ImageData.imgPlayer.Source = ImageData.ImageSourceSelector(CategoryName.Player, StageData.lstDbPlayer.spriteJumpL);
                    }
                    else
                    {
                        ImageData.imgPlayer.Source = ImageData.ImageSourceSelector(CategoryName.Player, StageData.lstDbPlayer.spriteJumpR);
                    }
                }

                if (isLadder && (KeyController.keyUp || KeyController.keyDown))
                {
                    ImageData.imgPlayer.Source = ImageData.ImageSourceSelector(CategoryName.Player, StageData.lstDbPlayer.spriteLadder);
                }
            }

            Canvas.SetLeft(ImageData.imgPlayer, playerPos.X);
            Canvas.SetTop(ImageData.imgPlayer, playerPos.Y);
        }
예제 #9
0
//frameupdate
        protected void FrameUpdateTimer_Update(object sender, ElapsedEventArgs e)
        {
            try
            {
                this.Dispatcher.Invoke(() =>
                {
                    //TimeManagement
                    this.GetNowTime();
                    elapsedTime = nowTime - lastTime;

                    //debug
                    lblDebugA.Content = PlayerStatus.playerPos.X + "," + PlayerStatus.playerPos.Y;
                    lblDebugB.Content = SystemOperator.PixelPerSecond(PlayerStatus.weight);

                    if (elapsedTime < 0)
                    {
                        elapsedTime += 59999;
                    }


                    KeyController.KeyInterval();

                    //GameTransition
                    if (!GameTransition.duringTransition)
                    {
                        GameTransition.GameTransitionController(Canvas, CaLife, CaMana);
                    }

                    //EventAction



                    if (GameTransition.eventStart)
                    {
                        if (GameTransition.lstEventTask.Count > 0)
                        {
                            GameTransition.EventTaskCommander();
                        }


                        if (GameTransition.charaRenderStart)
                        {
                            GameTransition.CharaRender();
                        }

                        if (GameTransition.screenFadeStart)
                        {
                            GameTransition.ScreenFade(Canvas);
                        }

                        if (!GameTransition.eventBalloonIsOpen)
                        {
                            if (GameTransition.eventCount < StageEvent.listEvent.Count)
                            {
                                GameTransition.EventController(Canvas);
                            }
                        }
                        else
                        {
                            if (KeyController.keyReturn)
                            {
                                EnterKeyAction(Canvas);
                            }
                        }
                    }

                    if (KeyController.keyReturn)
                    {
                        EnterKeyAction(Canvas);
                    }

                    //got to Edit Mode
                    if (GameTransition.gameTransition == GameTransitionType.Title)
                    {
                        if (KeyController.keyE)
                        {
                            mainCanvas.Children.Remove(ImageData.imgTitle[0]); mainCanvas.Children.Remove(ImageData.imgTitle[1]);
                            countTime = 0;
                            GameTransition.gameTransition = GameTransitionType.EditMode;
                            timerFrameUpdate.Stop();
                            btnViewStageEditorWindow.IsEnabled = true;
                            btnViewMaterialBrowser.IsEnabled   = true;
                            btnViewImageManager.IsEnabled      = true;
                            btnViewDatabaseWindow.IsEnabled    = true;

                            lblMode.Content = "ゲームモード:エディット";
                        }
                    }

                    //StageDuring game play
                    if (GameTransition.gameTransition == GameTransitionType.StageDuring &&
                        !isDeactivated)
                    {
                        Animator.AnimationItem();
                        Animator.AnimationObject();

                        if (ObjectChecker.isTrigger && !TalkCommander.isTalk)
                        {
                            ObjectBehavior.OnTriggerTouchEvent();
                        }

                        if (TalkCommander.isTalk && !TalkCommander.isTalkOpenBalloon)
                        {
                            TalkCommander.TalkWithNpc(Canvas);
                        }

                        if (TalkCommander.isTalkSelecting)
                        {
                            TalkCommander.TalkSelecting(Canvas);
                        }

                        //first action,last Processing including deletion of list
                        SystemOperator.moveCommonAmountX = 0;
                        SystemOperator.moveCommonAmountY = 0;

                        ObjectChecker.CollisionPtoActionCollider();
                        PlayerBehavior.CollisionPtoE();

                        PlayerBehavior.MovePlayer(Canvas);
                        PlayerBehavior.FallingPlayer();

                        Item.FallingItems();

                        EnemyBehavior.EnemyAction();
                        Animator.AnimationEnemy();

                        SubWeapon.SubWeaponPosUpdate(Canvas);

                        if (PlayerStatus.isMainAttack)
                        {
                            MainWeapon.MainWeaponAttack(Canvas);
                            MainWeapon.MainWeaponCollision(Canvas);
                        }


                        SubWeapon.CollisionSubWeapon(Canvas);

                        PlayerStatus.PlayerStatusUpdate();
                        PlayerBehavior.DamageInvinsibleTimer();

                        SpawnEnemy.RemoveEnemy(Canvas);
                        SpawnEnemy.ReSpawnEnemy(Canvas);
                    }

                    if (Sound.seStop)
                    {
                        if (Sound.sePlayTime < 60)
                        {
                            Sound.sePlayTime++;
                        }
                        else
                        {
                            Sound.sePlayTime = 0;
                            Sound.seStop     = false;
                        }
                    }

                    lastTime = nowTime;
                });
            }
            catch (TaskCanceledException)
            {
            }
        }