private void UpdateLife()
        {
            float life_rate = actor_controller_.GetActorParameter().Life / actor_controller_.GetActorParameter().MaxLife;
            var   scale     = cover_.localScale;
            var   position  = cover_.localPosition;

            scale.x              = life_rate;
            position.x           = (life_rate - 1f) * 0.5f;
            cover_.localScale    = scale;
            cover_.localPosition = position;
        }
Ejemplo n.º 2
0
        // 乗り移ってるときに魂ゲージを減る
        private void ReduceSoulAmount(ActorController actor_controller)
        {
            soul_amount_ -= actor_controller.GetActorParameter().SoulDamage *Time.deltaTime;

            SoulGaugeController.Instance.SetLifeRate(soul_amount_ / kMaxSoulAmount);

            if (soul_amount_ <= 0f)
            {
                soul_amount_ = 0f;

                if (actor_controller.GetActorType() == ActorController.ActorType.kSoul)
                {
                    CameraController camera = Camera.main.GetComponent <CameraController>();
                    if (camera != null)
                    {
                        camera.SetTarget(null);
                    }

                    if (MinimapSystem.Instance)
                    {
                        MinimapSystem.Instance.Camera.SetTarget(null);
                    }

                    Destroy(gameObject);
                    GameFlowController.Instance.GameOver();
                }
            }
        }
Ejemplo n.º 3
0
        // 魂に戻る処理
        private void ReturnToSoul(ActorController actor_controller)
        {
            if (return_ == false ||
                actor_controller.GetActorType() == ActorController.ActorType.kSoul)
            {
                return;
            }

            if (actor_controller.GetActorParameter().CanSwimming == true &&
                is_swimming_ == true)
            {
                is_swimming_ = false;
                return;
            }

            // Soul
            soul_.SetBrainType(ActorController.BrainType.kPlayer);
            var soul_state = soul_.gameObject.AddComponent <SoulReturnState>();

            soul_state.SetSoulAmount(soul_amount_);
            soul_state.transform.SetPositionAndRotation(transform.position, transform.rotation);
            soul_state.SetReturnPoint(transform.position + transform.right * 2f);
            soul_.ChangeState(soul_state);

            // This
            ChangeStateToNpc(actor_controller);
        }
Ejemplo n.º 4
0
 /// <summary>
 /// 水に入った処理
 /// </summary>
 /// <param name="actor_controller"></param>
 public override void Swim(ActorController actor_controller)
 {
     if (actor_controller.GetActorParameter().CanSwimming == true)
     {
         is_swimming_ = true;
     }
 }
Ejemplo n.º 5
0
        public override void Act(ActorController actor_controller)
        {
            Patrol(actor_controller);

            if (actor_controller.GetActorParameter().Life <= 0f)
            {// 肉体が死ぬ
                Destroy(gameObject);
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// 岩を押す処理
        /// </summary>
        /// <param name="actor_controller"></param>
        public override void OnPushEnter(ActorController actor_controller)
        {
            speed_rate_ = actor_controller.GetActorParameter().PushStrength;
            speed_rate_ = speed_rate_ == 0f ? 1f : speed_rate_;

            if (!animator_)
            {
                return;
            }
            animator_.SetBool("push", true);
        }
Ejemplo n.º 7
0
        /// <summary>
        /// 火に入った処理
        /// </summary>
        /// <param name="actor_controller"></param>
        public override void Burn(ActorController actor_controller)
        {
            if (actor_controller.GetActorType() != ActorController.ActorType.kSoul)
            {
                return;
            }

            // 魂を燃やす
            soul_amount_ = Mathf.Clamp(soul_amount_ - actor_controller.GetActorParameter().FireDamage
                                       , 0f, kMaxSoulAmount);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// 初期化処理
        /// </summary>
        /// <param name="actor_controller"></param>
        public override void Init(ActorController actor_controller)
        {
            if (soul_ == null)
            {// 魂のコントローラを保存しておく
                soul_ = actor_controller;
            }

            CameraController camera = Camera.main.GetComponent <CameraController>();

            if (camera != null)
            {
                camera.SetTarget(transform);
            }

            if (MinimapSystem.Instance)
            {
                MinimapSystem.Instance.Camera.SetTarget(transform);
            }

            animator_ = GetComponentInChildren <Animator>();

            gameObject.tag = "Player";

            var rely_detector_object = new GameObject("RelyDetector");

            rely_detector_object.transform.SetParent(transform);
            rely_detector_ = rely_detector_object.AddComponent <RelyDetector>();

            var parameter = actor_controller.GetActorParameter();

            nav_mesh_agent_                = GetComponent <NavMeshAgent>();
            nav_mesh_agent_.velocity       = Vector3.zero;
            nav_mesh_agent_.angularSpeed   = parameter.TurnSpeed;
            nav_mesh_agent_.updatePosition = true;
            nav_mesh_agent_.updateRotation = false;

            var rigidbody = GetComponent <Rigidbody>();

            rigidbody.angularVelocity = Vector3.zero;
            rigidbody.velocity        = Vector3.zero;

            if (kActorLifeUiPrefab == null)
            {
                kActorLifeUiPrefab = (GameObject)Resources.Load("Prefabs/ActorLifeUi", typeof(GameObject));
            }

            if (actor_controller.GetActorType() != ActorController.ActorType.kSoul)
            {// Life ui
                life_ui_ = GameObject.Instantiate(kActorLifeUiPrefab).GetComponent <ActorLifeUiController>();
                life_ui_.SetTarget(transform);
            }
        }
Ejemplo n.º 9
0
        /// <summary>
        /// 行動処理
        /// </summary>
        /// <param name="actor_controller"></param>
        public override void Act(ActorController actor_controller)
        {
            UpdateInput();

            if (actor_controller.GetActorParameter().Life <= 0f ||
                soul_amount_ <= 0f)
            {
                return_ = true;
            }

            Move(actor_controller);
            RelyOnTarget(actor_controller);
            ReturnToSoul(actor_controller);
            ReduceSoulAmount(actor_controller);
        }
Ejemplo n.º 10
0
        public override void Init(ActorController actor_controller)
        {
            patrol_points_ = GetComponent <PatrolPoints>();
            patrol_points_.RecalculatePoints();

            animator_     = GetComponentInChildren <Animator>();
            wait_counter_ = kWaitTime;

            var parameter = actor_controller.GetActorParameter();

            nav_mesh_agent_                = GetComponent <NavMeshAgent>();
            nav_mesh_agent_.speed          = parameter.MoveSpeed;
            nav_mesh_agent_.angularSpeed   = parameter.TurnSpeed;
            nav_mesh_agent_.updatePosition = true;
            nav_mesh_agent_.updateRotation = true;
        }
Ejemplo n.º 11
0
        // 移動処理
        private void Move(ActorController actor_controller)
        {
            float direction_magnitude = direction_.magnitude;

            if (animator_)
            {
                animator_.SetFloat("movement", direction_magnitude);
            }

            if (direction_magnitude == 0.0f)
            {
                return;
            }

            ActorParameter parameter = actor_controller.GetActorParameter();

            nav_mesh_agent_.Move(direction_ * parameter.MoveSpeed * speed_rate_ * Time.deltaTime);

            // 物理演算の時の回転を切ったのため直接にtransformで回転する
            direction_ = transform.InverseTransformDirection(direction_);
            var turn_amount = Mathf.Atan2(direction_.x, direction_.z);

            transform.Rotate(0f, turn_amount * parameter.TurnSpeed * Time.deltaTime, 0f);
        }