Example #1
0
        public void init(MainWindow mw, SerifuWindow sw, ebifry ebi)
        {
            syn      = mw;
            voice    = SeyanaVoice.SeyanaVoiceFactory;
            this.sw  = sw;
            this.ebi = ebi;
            clk      = new Clock();
            clk.Show();

            nowMoveMode = moveMode.STAND;

            queue = new Queue <qtask>();

            moveSeyana(MainWindow.x, MainWindow.y);
            moveTask.start();
            thinkTask.start();
        }
Example #2
0
        /// <summary>
        /// キーイベント
        /// </summary>
        /// <param name="k">押されたキー</param>
        public void keyPressed(KeyEventArgs k)
        {
            switch (k.Key)
            {
            case Key.C:
            {
                openConfig();
                break;
            }

            case Key.E:
            {
                syn.createEbi();
                break;
            }

            case Key.Q:
            {
                syn.Quit_Clicked(null, null);
                break;
            }

            case Key.T:
            {
                clk.Timer_Click(null, null);
                clk.Activate();
                break;
            }

            case Key.Z:
            {
                manpukudo = 5 * FPS;
                if (nowMoveMode == moveMode.RANDOMWALK)
                {
                    nowMoveMode = moveMode.STAND;
                }
                break;
            }
            }
        }
Example #3
0
    // Use this for initialization
    void Start()
    {
        aiMovementMode       = moveMode.Command;
        agent.updatePosition = false;
        agent.updateRotation = false;

        vehicleType = controller.vehicle.type;
        switch (vehicleType)
        {
        case Vehicle.vehicleType.Tank:
            attackController = GetComponentInChildren <TankTurretControl>();
            break;

        case Vehicle.vehicleType.Truck:
            break;

        case Vehicle.vehicleType.Heli:
            break;

        case Vehicle.vehicleType.Spy:
            break;

        case Vehicle.vehicleType.Base:
            break;

        default:
            attackController = GetComponentInChildren <WeaponControl>();
            break;
        }

        Vehicle v = GetComponent <VehicleController>().vehicle;

        attackRange = v.attackRange;
        sightRange  = v.sightRange;

        oldPos = transform.position;
    }
Example #4
0
        /// <summary>
        /// 思考ルーチン
        /// </summary>
        private void run()
        {
            // エビフライを食べた後大人しくしている時間(秒)
            int ebisize = 12;

            thinkTask.getToken().ThrowIfCancellationRequested();

            try {
                while (true)
                {
                    if (thinkTask.cancellationRequest())
                    {
                        thinkTask.getToken().ThrowIfCancellationRequested();
                    }

                    // queue処理
                    #region queue
                    if (queue.Count != 0)
                    {
                        var top = queue.Peek();
                        switch (top)
                        {
                        case qtask.JUMP:
                        {
                            switch (nowMoveMode)
                            {
                            case moveMode.JUMP:
                            {
                                break;
                            }

                            default:
                            {
                                queue.Dequeue();
                                nowMoveMode = moveMode.JUMP;
                                move_t      = 0;
                                break;
                            }
                            }
                            break;
                        }

                        case qtask.EBI_ARABURI:
                            // エビを食べている
                            nowMoveMode = moveMode.ARABURI;
                            if (ebi.live)
                            {
                                manpukudo = ebisize * FPS;

                                int dx = (MainWindow.x + syn.w / 2) - (ebi.x + ebi.w / 2);
                                int dy = (MainWindow.y + syn.h / 2) - (ebi.y + ebi.h / 2);
                                if (dx * dx + dy * dy < 75 * 75)
                                {
                                    ebi.eaten();
                                }
                            }
                            else
                            {
                                nowMoveMode = moveMode.STAND;
                                queue.Dequeue();
                            }

                            break;

                        case qtask.TIMER_ARABURI:
                            // タイマー終了通知
                            nowMoveMode = moveMode.ARABURI;
                            voice.playSeyana();
                            break;
                        }
                    }
                    #endregion
                    else // queueが空の処理
                    {
                        // エビフライ判定
                        // 画面内にエビフライがあればそっちに向かう
                        if (ebi.live)
                        {
                            nowMoveMode = moveMode.EBI;
                            voice.playEbifry();
                        }
                        // ランダムウォーク判定
                        // 移動中でないかつランダムウォーク判定に成功するとランダムウォークが起こる
                        else if (nowMoveMode == moveMode.STAND && Util.rnd.NextDouble() < randomWalkThreshold && manpukudo <= 0)
                        {
                            randomWalk();
                        }
                    }


                    if (manpukudo > 0)
                    {
                        manpukudo--;
                    }

                    syn.setScale();
                    System.Threading.Thread.Sleep(1000 / FPS);
                }
            }catch (OperationCanceledException) { }
        }
Example #5
0
        /// <summary>
        /// 移動ルーチン
        /// </summary>
        private void move()
        {
            moveTask.getToken().ThrowIfCancellationRequested();
            int x = MainWindow.x;
            int y = MainWindow.y;

            try {
                while (true)
                {
                    if (moveTask.cancellationRequest())
                    {
                        moveTask.getToken().ThrowIfCancellationRequested();
                    }

                    switch (nowMoveMode)
                    {
                    case moveMode.STAND:
                    {
                        //System.Threading.Thread.Sleep(Util.rnd.Next(100, 500));
                        syn.faceToCursor();
                        moveSeyana(MainWindow.x, MainWindow.y);
                        break;
                    }

                    case moveMode.EBI:
                    {
                        int    dx  = (ebi.x + ebi.w / 2) - (x + syn.w / 2);
                        int    dy  = (ebi.y + ebi.h / 2) - (y + syn.h / 2);
                        double dst = Math.Sqrt(dx * dx + dy * dy);
                        if (dst > 70)
                        {
                            double dir = Math.Atan2(dy, dx);
                            x = (int)(x + speed * Math.Cos(dir));
                            y = (int)(y + speed * Math.Sin(dir));

                            if (Math.Cos(dir) > 0)
                            {
                                syn.faceRight();
                            }
                            else
                            {
                                syn.faceLeft();
                            }

                            moveSeyana(x, y);
                        }
                        else
                        {
                            centX = ebi.x + ebi.w / 2;
                            centY = ebi.y + ebi.h / 2;
                            queue.Enqueue(qtask.EBI_ARABURI);
                        }

                        sw.hide();
                        if (Util.rnd.NextDouble() < 0.05)
                        {
                            voice.playEbifry();
                        }
                        break;
                    }

                    case moveMode.RANDOMWALK:
                    {
                        double dx  = toX - x;
                        double dy  = toY - y;
                        double dir = Math.Atan2(dy, dx);
                        double dst = Math.Sqrt(dx * dx + dy * dy);

                        if (dst > 10)
                        {
                            x += (int)(speed * Math.Cos(dir));
                            y += (int)(speed * Math.Sin(dir));

                            if (Math.Cos(dir) > 0)
                            {
                                syn.faceRight();
                            }
                            else
                            {
                                syn.faceLeft();
                            }

                            moveSeyana(x, y);
                        }
                        else
                        {
                            nowMoveMode = moveMode.STAND;
                        }

                        sw.hide();
                        break;
                    }

                    case moveMode.JUMP:
                    {
                        // 重力加速度,ジャンプ力
                        double g  = 1.2;
                        double v0 = 20;

                        double dx = 0;
                        double dy = -v0 + g * move_t;

                        x += (int)dx;
                        y += (int)dy;

                        if (g * move_t > 2 * v0)
                        {
                            nowMoveMode = moveMode.STAND;
                        }
                        else
                        {
                            moveOnlySeyana(x, y);
                        }
                        break;
                    }

                    case moveMode.ARABURI:
                    {
                        if (queue.Count == 0 || !(queue.Peek() == qtask.EBI_ARABURI || queue.Peek() == qtask.TIMER_ARABURI))
                        {
                            nowMoveMode = moveMode.STAND;
                        }
                        if (!(centX == ebi.x + ebi.w / 2 && centY == ebi.y + ebi.h / 2) && (queue.Count > 0 && queue.Peek() == qtask.EBI_ARABURI))
                        {
                            Console.WriteLine("move");
                            nowMoveMode = moveMode.EBI;
                            voice.playEbifry();
                            queue.Dequeue();
                            break;
                        }
                        double dst = Util.rnd.NextDouble() * 60;
                        double dir = Util.rnd.NextDouble() * 2 * Math.PI;
                        x = (int)(centX + dst * Math.Cos(dir) - syn.w / 2);
                        y = (int)(centY + dst * Math.Sin(dir) - syn.h / 2);

                        moveOnlySeyana(x, y);

                        sw.hide();
                        break;
                    }

                    default: break;
                    }

                    move_t++;
                    System.Threading.Thread.Sleep((int)(1000 / FPS / (nowMoveMode == moveMode.EBI ? 1.7 : 1.0)));
                }
            }catch (OperationCanceledException) { }
        }
Example #6
0
 private void randomWalk()
 {
     toX         = Util.rnd.Next(syn.w, Util.screenwidth - syn.w);
     toY         = Util.rnd.Next(syn.h, Util.screenheight - syn.h);
     nowMoveMode = moveMode.RANDOMWALK;
 }