/// <summary>
    /// this method 1) determines if the colliding object is a player
    /// that we will do something about, and 2) stores the collider and
    /// player event handler that will be manipulated. a dictionary is
    /// used to remember past players so we don't have to scan their
    /// hierarchy for an event handler every time
    /// </summary>
    public bool GetPlayer(Collider col)
    {
        if ((col.gameObject.layer != vp_Layer.LocalPlayer) &&
            (col.gameObject.layer != vp_Layer.RemotePlayer))
        {
            return(false);
        }

        // see if this is a valid player object, or auto-approve
        // if it has been recently validated
        if (!m_KnownPlayers.ContainsKey(col))
        {
            vp_PlayerEventHandler player = col.transform.root.GetComponent <vp_PlayerEventHandler>();

            if (player == null)
            {
                return(false);
            }

            m_KnownPlayers.Add(col, player);
        }

        if (!m_KnownPlayers.TryGetValue(col, out m_PlayerToPush))
        {
            return(false);
        }

        m_PlayerCollider = col;

        return(true);
    }
예제 #2
0
 public override void OnAwake()
 {
     agent = gameObject.GetComponent<vp_PlayerEventHandler>();
     if (rotateWeapon.Value) {
         weaponHandler = gameObject.GetComponent<vp_WeaponHandler>();
     }
 }
예제 #3
0
    /// <summary>
    /// tries to add 'Health' to the player
    /// </summary>
    protected override bool TryGive(vp_PlayerEventHandler player)
    {
        if (player.Health.Get() < 0.0f)
        {
            return(false);
        }

        if (player.Health.Get() >= player.MaxHealth.Get())
        {
            return(false);
        }

        // if this is singleplayer or we are a multiplayer master, update health
        if (vp_Gameplay.IsMaster)
        {
            player.Health.Set(Mathf.Min(player.MaxHealth.Get(), (player.Health.Get() + Health)));
        }

        // a multiplayer master transmits the health across the network
        if ((vp_Gameplay.IsMultiplayer) && (vp_Gameplay.IsMaster))
        {
            vp_GlobalEvent <Transform, Transform, float> .Send("TransmitDamage", player.transform.root, transform.root, -Health);
        }

        // returning true here even if we're a multiplayer client (and health hasn't changed locally yet)
        // to prevent a fail sound from playing before master has allowed the health to be added
        return(true);
    }
예제 #4
0
    /// <summary>
    ///
    /// </summary>
    protected virtual void Awake()
    {
        m_Audio = GetComponent <AudioSource>();

        // store the first player event handler found in the top of our transform hierarchy
        m_Player = (vp_PlayerEventHandler)transform.root.GetComponentInChildren(typeof(vp_PlayerEventHandler));
    }
예제 #5
0
	/// <summary>
	/// 
	/// </summary>
	protected virtual void Awake()
	{

		// store the first player event handler found in the top of our transform hierarchy
		m_Player = (vp_PlayerEventHandler)transform.root.GetComponentInChildren(typeof(vp_PlayerEventHandler));

	}
예제 #6
0
    /// <summary>
    /// this is triggered when an object enters the collider and
    /// InteractType is set to trigger
    /// </summary>
    protected virtual void OnTriggerEnter(Collider col)
    {
        // only do something if the trigger is of type Trigger
        if (InteractType != vp_InteractType.Trigger)
        {
            return;
        }

        // see if the colliding object was a valid recipient
        foreach (string s in RecipientTags)
        {
            if (col.gameObject.tag == s)
            {
                goto isRecipient;
            }
        }
        return;

isRecipient:

        m_Player = col.gameObject.GetComponent <vp_PlayerEventHandler>();

        if (m_Player == null)
        {
            return;
        }

        // calls the TryInteract method which is hopefully on the inherited class
        TryInteract(m_Player);
    }
    /// <summary>
    /// this method 1) determines if the colliding object is a player
    /// that we will do something about, and 2) stores the collider and
    /// player event handler that will be manipulated. a dictionary is
    /// used to remember past players so we don't have to scan their
    /// hierarchy for an event handler every time
    /// </summary>
    public bool GetPlayer(Collider col)
    {
        if (
            (col.gameObject.layer != vp_Layer.IgnoreBullets) &&                         // typical layer for the trigger collider of local player
            (col.gameObject.layer != vp_Layer.LocalPlayer) &&                           // for local players that have no collision trigger
            (col.gameObject.layer != vp_Layer.RemotePlayer)                             // multiplayer remote players
            )
        {
            return(false);
        }

        // see if this is a valid player object, or auto-approve if it has been recently validated
        if (!m_KnownPlayers.ContainsKey(col))
        {
            vp_PlayerEventHandler player = col.transform.root.GetComponent <vp_PlayerEventHandler>();

            if (player == null)
            {
                return(false);
            }

            m_KnownPlayers.Add(col, player);
        }

        if (!m_KnownPlayers.TryGetValue(col, out m_PlayerToPush))
        {
            return(false);
        }

        m_PlayerCollider = col;

        return(true);
    }
예제 #8
0
 public override void OnAwake()
 {
     if (agent == null)
     {
         agent = gameObject.GetComponent <vp_PlayerEventHandler>();
     }
 }
    /// <summary>
    /// try to interact with this object
    /// </summary>
    public override bool TryInteract(vp_PlayerEventHandler player)
    {
        if (Target == null)
        {
            return(false);
        }

        if (m_Player == null)
        {
            m_Player = player;
        }

        PlaySound();

        if (string.IsNullOrEmpty(TargetValue))
        {
            Target.SendMessage(TargetMethod, SendMessageOptions.DontRequireReceiver);
        }
        else
        {
            Target.SendMessage(TargetMethod, TargetValue, SendMessageOptions.DontRequireReceiver);
        }

        return(true);
    }
	/// <summary>
	/// try to press this platform switch. this will have effect
	/// in singleplayer, but only in multiplayer if we're the
	/// master / server. sounds will always play and timers will
	/// be maintained in case of a master client handover
	/// </summary>
	public override bool TryInteract(vp_PlayerEventHandler player)
	{

		if(Platform == null)
			return false;
		
		if(m_Player == null)
			m_Player = player;
		
		if(Time.time < m_Timeout)
			return false;

		PlaySound();

		// only try to actually operate the platform if we're the master.
		// if we're just a client the master should detect the trigger enter
		// too, and should activate the platform remotely
		if (vp_Gameplay.isMaster)
			Platform.SendMessage("GoTo", Platform.TargetedWaypoint == 0 ? 1 : 0, SendMessageOptions.DontRequireReceiver);
		else if (InteractType == vp_InteractType.Normal)
			this.SendMessage("ClientTryInteract");
		
		m_Timeout = Time.time + SwitchTimeout;
		
		m_IsSwitched = !m_IsSwitched;
		
		return true;
		
	}
예제 #11
0
    /// <summary>
    ///
    /// </summary>
    public override bool TryInteract(vp_PlayerEventHandler player)
    {
        if (!enabled)
        {
            return(false);
        }

        if (!(player is vp_FPPlayerEventHandler))
        {
            return(false);
        }

        if (Time.time < m_CanClimbAgain)
        {
            return(false);
        }

        if (m_IsClimbing)
        {
            m_Player.Climb.TryStop();
            return(false);
        }

        if (m_Player == null)
        {
            m_Player = player;
        }

        if (m_Player.Interactable.Get() != null)
        {
            return(false);
        }

        if (m_Controller == null)
        {
            m_Controller = m_Player.GetComponent <vp_FPController>();
        }

        if (m_Player.Velocity.Get().magnitude > MinVelocityToClimb)
        {
            return(false);
        }

        if (m_Camera == null)
        {
            m_Camera = m_Player.GetComponentInChildren <vp_FPCamera>();
        }

        if (Sounds.AudioSource == null)
        {
            Sounds.AudioSource = m_Player.GetComponent <AudioSource>();
        }

        m_Player.Register(this);

        m_Player.Interactable.Set(this);         // sets what the player is currently interacting with

        return(m_Player.Climb.TryStart());
    }
예제 #12
0
 public override void OnAwake()
 {
     agent = gameObject.GetComponent <vp_PlayerEventHandler>();
     if (rotateWeapon.Value)
     {
         weaponHandler = gameObject.GetComponent <vp_WeaponHandler>();
     }
 }
예제 #13
0
    /// <summary>
    /// this is triggered when an object enters the collider
    /// </summary>
    protected virtual void OnTriggerEnter(Collider col)
    {
        // only do something if the trigger is still active
        if (m_Depleted)
        {
            return;
        }

        // see if the colliding object was a valid recipient
        foreach (string s in RecipientTags)
        {
            if (col.gameObject.tag == s)
            {
                goto isRecipient;
            }
        }
        return;

isRecipient:

        // if collider is not the same as last time we were picked up
        // (or this is the first time) scan the collider gameobject for
        // a player event handler
        if (col != m_LastCollider)
        {
            m_Recipient = col.gameObject.GetComponent <vp_PlayerEventHandler>();
        }

        if (m_Recipient == null)
        {
            return;
        }

        if (TryGive(m_Recipient))
        {
            m_Audio.pitch = PickupSoundSlomo ? Time.timeScale : 1.0f;
            m_Audio.Play();
            m_Renderer.enabled = false;
            m_Depleted         = true;
            if (m_Recipient is vp_FPPlayerEventHandler)
            {
                (m_Recipient as vp_FPPlayerEventHandler).HUDText.Send(GiveMessage);
            }
        }
        else if (!m_AlreadyFailed)
        {
            if (!vp_Gameplay.IsMultiplayer || (vp_Gameplay.IsMultiplayer && (m_Recipient is vp_FPPlayerEventHandler)))
            {
                m_Audio.pitch = FailSoundSlomo ? Time.timeScale : 1.0f;
                m_Audio.PlayOneShot(PickupFailSound);
            }
            m_AlreadyFailed = true;
            if (m_Recipient is vp_FPPlayerEventHandler)
            {
                (m_Recipient as vp_FPPlayerEventHandler).HUDText.Send(FailMessage);
            }
        }
    }
예제 #14
0
    /// <summary>
    ///
    /// </summary>
    protected virtual void Awake()
    {
        // store the first player event handler found in the top of our transform hierarchy
        m_Player = (vp_PlayerEventHandler)transform.root.GetComponentInChildren(typeof(vp_PlayerEventHandler));

        if (Weapons != null)
        {
            StartWeapon = Mathf.Clamp(StartWeapon, 0, Weapons.Count);
        }
    }
예제 #15
0
    /// <summary>
    /// tries to enable 'State' on the player
    /// </summary>
    protected override bool TryGive(vp_PlayerEventHandler player)
    {
        // prevent the player from picking up the item again until any
        // currently running speed timer has run its course
        if (m_Timer.Active)
        {
            return(false);
        }

        if (string.IsNullOrEmpty(State))
        {
            return(false);
        }

        // --- proper way of doing speed ---

        // for something like this we use the State Manager and vp_Timer!
        // in the powerup demo folder you will find a controller preset
        // named 'ControllerMegaSpeed.txt' which boosts player acceleration
        // and increases its push force on rigidbodies.
        // in the demo scene this has been added as a state named 'MegaSpeed'
        // to the controller component

        player.SetState(State);

        // restore state after 'Duration' seconds. if that's not set, uses
        // the powerup's 'RespawnDuration'
        vp_Timer.In(((Duration <= 0.0f) ? RespawnDuration : Duration), delegate()
        {
            player.SetState(State, false);
        }, m_Timer);

        // NOTE: binding the 'm_Timer' handle above makes sure this timer
        // is canceled and restarted if it's already running. if you allow
        // players to pick up multiple powerups, this will prevent a depleted
        // powerup from disabling the state if the player has enabled a new one
        // while the previous one is active (i.e. the timer will be restarted)

        // --- buggy way of doing speed ---

        // the below would also be a way of adding speed, but it would get messed up
        // if player pressed or released the 'Run' modifier key. speed would multiply
        // in case of several powerups and we would have to store the original controller
        // acceleration value in a 'Start' method. messy and error-prone. use states.

        //Player.Controller.MotorAcceleration *= 4.0f;
        //vp_Timer.In(Value, delegate()
        //{
        //    Player.Controller.MotorAcceleration *= 0.25f;	// ... or a stored original speed
        //});

        return(true);
    }
예제 #16
0
	/// <summary>
	/// try to interact with this object
	/// </summary>
	public override bool TryInteract(vp_PlayerEventHandler player)
	{
		
		if(Target == null)
			return false;
		
		if(m_Player == null)
			m_Player = player;
		
		PlaySound();
		
		Target.SendMessage(TargetMessage, SendMessageOptions.DontRequireReceiver);
		
		return true;
		
	}
예제 #17
0
    /// <summary>
    ///
    /// </summary>
    public override bool TryInteract(vp_PlayerEventHandler player)
    {
        if (ItemPickup == null)
        {
            return(false);
        }

        if (m_Player == null)
        {
            m_Player = player;
        }

        ItemPickup.TryGiveTo(m_Player.GetComponent <Collider>());

        return(true);
    }
예제 #18
0
    /// <summary>
    /// determines if this powerup is allowed to start slow motion.
    /// NOTE: actual slomo implementation occurs in Update
    /// </summary>
    protected override bool TryGive(vp_PlayerEventHandler player)
    {
        m_Player = player;

        // prevent the player from picking up the item again until any
        // currently running slomo timer has run its course
        if (m_Depleted || Time.timeScale != 1.0f)
        {
            return(false);
        }

        // nothing more happens here the actual slomo logic is done in
        // Update, since it needs to call 'vp_TimeUtility.FadeTimeScale'
        // every frame

        return(true);
    }
예제 #19
0
    /// <summary>
    /// try to interact with this object
    /// </summary>
    public override bool TryInteract(vp_PlayerEventHandler player)
    {
        if (Target == null)
        {
            return(false);
        }

        if (m_Player == null)
        {
            m_Player = player;
        }

        PlaySound();

        Target.SendMessage(TargetMessage, SendMessageOptions.DontRequireReceiver);

        return(true);
    }
예제 #20
0
	/// <summary>
	/// 
	/// </summary>
	public override bool TryInteract(vp_PlayerEventHandler player)
	{
		
		if(!enabled)
			return false;

		if (!(player is vp_FPPlayerEventHandler))
			return false;

		if(Time.time < m_CanClimbAgain)
			return false;
		
		if(m_IsClimbing)
		{
			m_Player.Climb.TryStop();
			return false;
		}
		
		if(m_Player == null)
			m_Player = player;
		
		if(m_Player.Interactable.Get() != null)
			return false;
		
		if(m_Controller == null)
			m_Controller = m_Player.GetComponent<vp_FPController>();

		if (m_Player.Velocity.Get().magnitude > MinVelocityToClimb)
			return false;
		
		if(m_Camera == null)
			m_Camera = m_Player.GetComponentInChildren<vp_FPCamera>();
		
		if(Sounds.AudioSource == null)
			Sounds.AudioSource = m_Player.GetComponent<AudioSource>();
		
		m_Player.Register(this);
		
		m_Player.Interactable.Set(this); // sets what the player is currently interacting with
		
		return m_Player.Climb.TryStart();
		
	}
    /// <summary>
    /// try to press this platform switch. this will have effect
    /// in singleplayer, but only in multiplayer if we're the
    /// master / server. sounds will always play and timers will
    /// be maintained in case of a master client handover
    /// </summary>
    public override bool TryInteract(vp_PlayerEventHandler player)
    {
        if (Platform == null)
        {
            return(false);
        }

        if (m_Player == null)
        {
            m_Player = player;
        }

        if (Time.time < m_Timeout)
        {
            return(false);
        }

        PlaySound();

        // only try to actually operate the platform if we're the master.
        // if we're just a client the master should detect the trigger enter
        // too, and should activate the platform remotely
        if (vp_Gameplay.IsMaster)
        {
            Platform.SendMessage("GoTo", Platform.TargetedWaypoint == 0 ? 1 : 0, SendMessageOptions.DontRequireReceiver);
        }
        else if (InteractType == vp_InteractType.Normal)
        {
            this.SendMessage("ClientTryInteract");
        }

        m_Timeout = Time.time + SwitchTimeout;

        m_IsSwitched = !m_IsSwitched;

        return(true);
    }
예제 #22
0
 public override bool TryInteract(vp_PlayerEventHandler player)
 {
     return(base.TryInteract(player));
 }
예제 #23
0
    /// <summary>
    /// Checks to see if we have a player capable of interacting
    /// with this object, and if so starts or stops grabbing.
    /// </summary>
    public override bool TryInteract(vp_PlayerEventHandler player)
    {
        if (!(player is vp_FPPlayerEventHandler))
        {
            return(false);
        }

        if (m_Player == null)
        {
            m_Player = player;
        }

        if (player == null)
        {
            return(false);
        }

        if (m_Controller == null)
        {
            m_Controller = m_Player.GetComponent <vp_FPController>();
        }

        if (m_Controller == null)
        {
            return(false);
        }

        if (m_Camera == null)
        {
            m_Camera = m_Player.GetComponentInChildren <vp_FPCamera>();
        }

        if (m_Camera == null)
        {
            return(false);
        }

        if (m_WeaponHandler == null)
        {
            m_WeaponHandler = m_Player.GetComponentInChildren <vp_WeaponHandler>();
        }

        if (m_Audio == null)
        {
            m_Audio = m_Player.GetComponent <AudioSource>();
        }

        m_Player.Register(this);

        if (!m_IsGrabbed)
        {
            StartGrab();             // start the grab
        }
        else
        {
            StopGrab();             // if object grabbed, stop the grab
        }
        // set this object as the one the player is currently
        // interacting with
        m_Player.Interactable.Set(this);

        // if we have a grab state crosshair, set it
        if (GrabStateCrosshair != null)
        {
            FPPlayer.Crosshair.Set(GrabStateCrosshair);
        }
        else
        {
            FPPlayer.Crosshair.Set(new Texture2D(0, 0));
        }

        return(true);
    }
예제 #24
0
 public override void OnReset()
 {
     itemName = "";
     agent    = null;
 }
예제 #25
0
 public override void OnReset()
 {
     weaponName = "";
     agent      = null;
 }
예제 #26
0
 public override void OnAwake()
 {
     if (agent == null) {
         agent = gameObject.GetComponent<vp_PlayerEventHandler>();
     }
 }
예제 #27
0
 /// <summary>
 /// This should be overriden and starts the interaction
 /// </param>
 public virtual bool TryInteract(vp_PlayerEventHandler player)
 {
     return(false);        // if not overridden, just prevent interaction
 }
예제 #28
0
 public override void OnReset()
 {
     weaponName = "";
     agent = null;
 }
예제 #29
0
 public override void OnReset()
 {
     weaponIndex = 0;
     agent = null;
 }
	/// <summary>
	/// 
	/// </summary>
	protected virtual void Awake()
	{
		
		// store the first player event handler found in the top of our transform hierarchy
		m_Player = (vp_PlayerEventHandler)transform.root.GetComponentInChildren(typeof(vp_PlayerEventHandler));

		if(Weapons != null)
			StartWeapon = Mathf.Clamp(StartWeapon, 0, Weapons.Count);

	}
예제 #31
0
 public override void OnReset()
 {
     itemName = "";
     agent = null;
 }
예제 #32
0
	/// <summary>
	/// This should be overriden and starts the interaction
	/// </param>
	public virtual bool TryInteract(vp_PlayerEventHandler player)
	{
		
		return false; // if not overridden, just prevent interaction
		
	}
예제 #33
0
	/// <summary>
	/// this is triggered when an object enters the collider and
	/// InteractType is set to trigger
	/// </summary>
	protected virtual void OnTriggerEnter(Collider col)
	{
		
		// only do something if the trigger is of type Trigger
		if (InteractType != vp_InteractType.Trigger)
			return;

		// see if the colliding object was a valid recipient
		foreach(string s in RecipientTags)
		{
			if(col.gameObject.tag == s)
				goto isRecipient;
		}
		return;
		isRecipient:

		m_Player = col.gameObject.GetComponent<vp_PlayerEventHandler>();

		if (m_Player == null)
			return;
		
		// calls the TryInteract method which is hopefully on the inherited class
		TryInteract(m_Player);
		
	}
예제 #34
0
 public override void OnReset()
 {
     agent = null;
 }
    /// <summary>
    /// creates a copy of the currently selected UFPS player gameobject
    /// - stripped of all its 1st person functionality. the new object
    /// can be used for AI or multiplayer remote players
    /// </summary>
    public static void Generate()
    {
        GameObject target = Selection.activeObject as GameObject;

        if ((target == null) || (!vp_Utility.IsActive(target)) || (target.GetComponentInChildren <vp_FPController>() == null) && (target.GetComponentInChildren <vp_FPCamera>() == null))
        {
            EditorUtility.DisplayDialog("Failed to run wizard", "Please select the main gameobject of a 1st person player in the Hierarchy view (make sure it's active) and try again.", "OK");
            return;
        }

        if (!EditorUtility.DisplayDialog("Generate Remote Player?", "This wizard will create a copy of the selected player object - stripped of all its 1st person functionality. This new object can be used for AI or multiplayer remote players.\n\nNOTE: Only default UFPS classes will be processed.", "OK", "Cancel"))
        {
            return;
        }

        DecideCopyStates(target);

        string name = target.name + "(Remote)";

        // generate - and operate upon - a copy of the target
        target      = (GameObject)GameObject.Instantiate(target);
        target.name = target.name.Replace("(Clone)", "");

        try
        {
            // layer likely should no longer be 'LocalPlayer', so default to 'RemotePlayer'
            target.gameObject.layer = vp_Layer.RemotePlayer;

            // convert weapons
            ConvertWeaponsTo3rdPerson(target);

            // find any charactercontroller and convert it into a capsulecollider with a rigidbody
            CharacterController ch = target.GetComponentInChildren <CharacterController>();
            if (ch != null)
            {
                if (ch.transform.GetComponent <Rigidbody>() == null)
                {
                    CapsuleCollider ca = ch.gameObject.AddComponent <CapsuleCollider>();
                    ca.radius = ch.radius;
                    ca.height = ch.height;
                    ca.center = ca.center;
                    Rigidbody r = ch.gameObject.AddComponent <Rigidbody>();
                    r.useGravity             = false;
                    r.isKinematic            = true;
                    r.collisionDetectionMode = CollisionDetectionMode.ContinuousDynamic;
                }
            }

            // convert 1st person controller
            vp_FPController fpController = target.GetComponent <vp_FPController>();
            if (fpController != null)
            {
                vp_CapsuleController cController = target.AddComponent <vp_CapsuleController>();
                vp_EditorUtility.CopyValuesFromDerivedComponent(fpController, cController, true, false, null);                  // TEST: fpcontroller is not derived from capsulecontroller! see note in 'GenerateStatesAndPresetsFromDerivedComponent'
                if (m_CopyStates && !string.IsNullOrEmpty(m_StatePath))
                {
                    vp_EditorUtility.GenerateStatesAndPresetsFromDerivedComponent(fpController, cController, m_StatePath);
                }
            }

            // convert weapon handler
            vp_FPWeaponHandler fpWHandler = target.GetComponent <vp_FPWeaponHandler>();
            if (fpWHandler != null)
            {
                vp_WeaponHandler wHandler = target.AddComponent <vp_WeaponHandler>();
                vp_EditorUtility.CopyValuesFromDerivedComponent(fpWHandler, wHandler, true, false, null);
            }

            // convert damage handler
            vp_FPPlayerDamageHandler fpDHandler = target.GetComponent <vp_FPPlayerDamageHandler>();
            if (fpDHandler != null)
            {
                vp_PlayerDamageHandler dHandler = target.AddComponent <vp_PlayerDamageHandler>();
                vp_EditorUtility.CopyValuesFromDerivedComponent(fpDHandler, dHandler, true, true, null);
            }

            // convert event handler
            vp_FPPlayerEventHandler fpEHandler = target.GetComponent <vp_FPPlayerEventHandler>();
            if (fpEHandler != null)
            {
                vp_PlayerEventHandler eHandler = target.AddComponent <vp_PlayerEventHandler>();
                vp_EditorUtility.CopyValuesFromDerivedComponent(fpEHandler, eHandler, true, false, null);
            }

            // convert body animator
            vp_FPBodyAnimator fpBAnimator = target.GetComponentInChildren <vp_FPBodyAnimator>();
            if (fpBAnimator != null)
            {
                vp_BodyAnimator bAnimator = fpBAnimator.gameObject.AddComponent <vp_BodyAnimator>();
                vp_EditorUtility.CopyValuesFromDerivedComponent(fpBAnimator, bAnimator, true, true, null);
            }

            // delete 'remoteplayer-illegal' components
            DeleteComponentsOfType(target.transform, typeof(vp_FPCamera));                      // these first due to dependencies
            DeleteComponentsOfType(target.transform, typeof(vp_FPController));                  // these first due to dependencies
            DeleteComponentsOfTypes(target.transform, new System.Type[]
            {
                typeof(Camera),
                typeof(AudioListener),
                typeof(vp_FPInput),
                typeof(vp_SimpleCrosshair),
                typeof(vp_FootstepManager),
                typeof(vp_FPInteractManager),
                typeof(vp_SimpleHUD),
                typeof(vp_PainHUD),
                typeof(vp_FPEarthquake),
                typeof(CharacterController),
                typeof(vp_FPWeaponHandler),
                typeof(vp_FPPlayerDamageHandler),
                typeof(vp_FPPlayerEventHandler),
                typeof(vp_FPBodyAnimator)
            });

            Transform weaponCamera = vp_Utility.GetTransformByNameInChildren(target.transform, "WeaponCamera", true);
            if (weaponCamera != null)
            {
                GameObject.DestroyImmediate(weaponCamera.gameObject);
            }

            target.name = name;
        }
        catch (System.Exception e)
        {
            Debug.Log(e);
            target.name = target.name + " (CONVERSION FAILED - see error log)";
        }
    }
예제 #36
0
	/// <summary>
	/// Checks to see if we have a player capable of interacting
	/// with this object, and if so starts or stops grabbing.
	/// </summary>
	public override bool TryInteract(vp_PlayerEventHandler player)
	{

		if (!(player is vp_FPPlayerEventHandler))
			return false;

		if (m_Player == null)
			m_Player = player;

		if (player == null)
			return false;

		if (m_Controller == null)
			m_Controller = m_Player.GetComponent<vp_FPController>();

		if (m_Controller == null)
			return false;

		if (m_Camera == null)
			m_Camera = m_Player.GetComponentInChildren<vp_FPCamera>();

		if (m_Camera == null)
			return false;

		if (m_WeaponHandler == null)
			m_WeaponHandler = m_Player.GetComponentInChildren<vp_WeaponHandler>();

		if (m_Audio == null)
			m_Audio = m_Player.GetComponent<AudioSource>();

		m_Player.Register(this);

		if (!m_IsGrabbed)
			StartGrab(); // start the grab
		else
			StopGrab(); // if object grabbed, stop the grab

		// set this object as the one the player is currently
		// interacting with
		m_Player.Interactable.Set(this);

		// if we have a grab state crosshair, set it
		if (GrabStateCrosshair != null)
			FPPlayer.Crosshair.Set(GrabStateCrosshair);
		else
			FPPlayer.Crosshair.Set(new Texture2D(0, 0));

		return true;

	}
예제 #37
0
 public override void OnReset()
 {
     weaponIndex = 0;
     agent       = null;
 }
예제 #38
0
 public override void OnReset()
 {
     agent = null;
 }
예제 #39
0
 /// <summary>
 /// IMPORTANT: this method must be overridden by the implementing powerup class.
 /// see 'vp_HealthPowerup', 'vp_SpeedPowerup' and 'vp_SlomoPowerup' for examples
 /// </summary>
 protected virtual bool TryGive(vp_PlayerEventHandler player)
 {
     return(true);
 }