Ejemplo n.º 1
0
    /// <summary>
    ///  Sets the wall material to the one with the highest material
    /// </summary>
    private void SetWallMaterial()
    {
        WallMaterial wallMaterial = null;
        int          priority     = -1;

        List <Collider2D> colliders = null;

        if (this.hasWallLeft)
        {
            colliders = this.wallSlideColliderLeft.colliders;
        }
        else
        {
            colliders = this.wallSlideColliderRight.colliders;
        }

        foreach (Collider2D collider in colliders)
        {
            ObjectMaterial material = collider.gameObject.GetComponent <ObjectMaterial>();
            if (material.wallMaterial.priority > priority)
            {
                wallMaterial = material.wallMaterial;
            }
        }

        this.wallMaterial = wallMaterial;
    }
Ejemplo n.º 2
0
    public bool UpgradeObjectByAddition(ObjectMaterial materialToAdd)
    {
        if (materialToAdd == ObjectMaterial.None)
        {
            return(false);
        }

        if (IsUpgradeAllowed(materialToAdd))
        {
            for (int i = 0; i < 3; i++)
            {
                if ((ObjectMaterial)VectorMaterial[i] == ObjectMaterial.None)
                {
                    // Try to upgrade using a clone of the material
                    var tempVector = VectorMaterial;
                    tempVector[i] = (int)materialToAdd;
                    var go = mergeableObjectManager.GetObjectFromMaterial(tempVector);
                    if (go != null)
                    {
                        // Upgrade is valid
                        VectorMaterial = tempVector;
                        UpdateModel(go, true);
                        return(true);
                    }

                    break;
                }
            }
        }
        return(false);
    }
Ejemplo n.º 3
0
    // play footstep audio during animation events
    void FootstepAudio(RaycastHit hit)
    {
        ObjectMaterial obMat = hit.collider.GetComponent <ObjectMaterial>();

        if (obMat != null)
        {
            if (obMat.Material == ObjectMaterial.MaterialType.grass)
            {
                randomizePitch(playerSound);
                playerSound.PlayOneShot(grassfootsteps);
            }
            else if (obMat.Material == ObjectMaterial.MaterialType.wood)
            {
                randomizePitch(playerSound);
                playerSound.PlayOneShot(woodfootsteps);
            }
            else if (obMat.Material == ObjectMaterial.MaterialType.stone)
            {
                randomizePitch(playerSound);
                playerSound.PlayOneShot(stonefootsteps);
            }
            else if (obMat.Material == ObjectMaterial.MaterialType.water)
            {
                randomizePitch(playerSound);
                playerSound.PlayOneShot(waterfootsteps);
            }
        }
    }
Ejemplo n.º 4
0
    public override bool StopAnimOnHit(CJObject hit_obj, Collider coll = null)
    {
        ObjectMaterial component = coll.GetComponent <ObjectMaterial>();

        if (hit_obj == null && (component == null || !ObjectMaterial.IsMaterialHard(component.m_ObjectMaterial)))
        {
            return(false);
        }
        if (hit_obj != null && hit_obj.GetComponent <AI>() != null)
        {
            return(false);
        }
        if (coll != null)
        {
            Item component2 = coll.gameObject.GetComponent <Item>();
            if (component2 != null)
            {
                if (component2.m_Info != null && component2.m_Info.m_Health <= 0f)
                {
                    this.m_ComboScheduled        = false;
                    this.m_ReleaseComboScheduled = false;
                    this.m_ReleaseCombo          = false;
                    this.m_ComboBlocked          = true;
                    return(false);
                }
                if (component2.m_IsPlant)
                {
                    return(false);
                }
            }
            return(true);
        }
        return(true);
    }
Ejemplo n.º 5
0
    private void MakeHitSound(GameObject obj, ItemID item_id)
    {
        if (this.m_AudioSource == null)
        {
            this.m_AudioSource = base.gameObject.AddComponent <AudioSource>();
            this.m_AudioSource.outputAudioMixerGroup = GreenHellGame.Instance.GetAudioMixerGroup(AudioMixerGroupGame.Player);
        }
        ObjectMaterial component = obj.GetComponent <ObjectMaterial>();

        if (component)
        {
            AudioClip specificSound = this.GetSpecificSound(item_id, component.m_ObjectMaterial);
            if (specificSound)
            {
                this.m_AudioSource.PlayOneShot(specificSound);
                return;
            }
        }
        if (component)
        {
            int       index = UnityEngine.Random.Range(0, this.m_AudioClipsHit[(int)component.m_ObjectMaterial].Count);
            AudioClip clip  = this.m_AudioClipsHit[(int)component.m_ObjectMaterial][index];
            this.m_AudioSource.PlayOneShot(clip);
        }
        else
        {
            int       index2 = UnityEngine.Random.Range(0, this.m_AudioClipsHit[0].Count);
            AudioClip clip2  = this.m_AudioClipsHit[0][index2];
            this.m_AudioSource.PlayOneShot(clip2);
        }
    }
Ejemplo n.º 6
0
 // for cliffs hit
 public WeaponHitData(Vector2D hitPosition)
 {
     this.WorldObject = null;
     this.IsCliffsHit = true;
     this.FallbackProtoWorldObject = null;
     this.FallbackTilePosition     = (Vector2Ushort)hitPosition;
     this.HitPoint = (hitPosition - this.FallbackTilePosition.ToVector2D()).ToVector2F();
     this.FallbackObjectMaterial = ObjectMaterial.Stone;
 }
Ejemplo n.º 7
0
    /// <summary>
    ///  Sets the ground material to the one with the highest material
    /// </summary>
    private void SetGroundMaterial()
    {
        GroundMaterial groundMaterial = null;
        int            priority       = -1;

        foreach (Collider2D collider in this.onGroundCollider.colliders)
        {
            ObjectMaterial material = collider.gameObject.GetComponent <ObjectMaterial>();
            if (material.groundMaterial.priority > priority)
            {
                groundMaterial = material.groundMaterial;
            }
        }

        this.groundMaterial = groundMaterial;
    }
Ejemplo n.º 8
0
        public WeaponHitSparksPreset Add(
            ObjectMaterial material,
            double texturePivotY,
            TextureAtlasResource texture,
            Color?lightColor                   = null,
            bool useScreenBlending             = false,
            bool allowRandomizedHitPointOffset = true)
        {
            var frames = ClientComponentSpriteSheetAnimator.CreateAnimationFrames(texture);

            this.HitSparksPreset[material] = new HitSparksEntry(frames,
                                                                lightColor,
                                                                useScreenBlending,
                                                                texturePivotY,
                                                                allowRandomizedHitPointOffset);
            return(this);
        }
Ejemplo n.º 9
0
        public static float GetMaterialIndex(ObjectMaterial material)
        {
            if (material == ObjectMaterial.Lambertian)
            {
                return(1.0f);
            }
            else if (material == ObjectMaterial.Metal)
            {
                return(2.0f);
            }
            else if (material == ObjectMaterial.Refractive)
            {
                return(3.0f);
            }

            return(1.0f);
        }
Ejemplo n.º 10
0
    private void AttackTarget(GameObject target, MeleeAttackInfo info)
    {
        if (!isServer)
        {
            return;
        }

        if (target.GetComponent <Health>() != null)
        {
            target.GetComponent <Health>().Damage(new DamageBase(gameObject, info.Damage));
            ObjectMaterial objectMaterial = target.GetComponent <ObjectMaterial>();
            RpcDamage(target, info, objectMaterial.HitParticleColorMin, objectMaterial.HitParticleColorMax);
        }

        if (target.GetComponent <Kickable>() != null)
        {
            target.GetComponent <Kickable>()
            .Kick(new Vector2((int)gameObject.transform.localScale.x * info.Kick.x, info.Kick.y));
        }
    }
Ejemplo n.º 11
0
        public WeaponHitData(IWorldObject worldObject, Vector2F hitPoint)
        {
            this.WorldObject = worldObject;
            this.IsCliffsHit = false;
            this.FallbackProtoWorldObject = worldObject.ProtoWorldObject;
            this.FallbackTilePosition     = worldObject.TilePosition;
            this.HitPoint = hitPoint;

            if (worldObject is ICharacter character)
            {
                this.FallbackObjectMaterial = ((IProtoCharacterCore)character.ProtoCharacter)
                                              .SharedGetObjectMaterialForCharacter(character);
            }
            else if (worldObject.ProtoWorldObject is IProtoWorldObjectWithSoundPresets protoWorldObjectWithSoundPresets)
            {
                this.FallbackObjectMaterial = protoWorldObjectWithSoundPresets
                                              .ObjectMaterial;
            }
            else
            {
                this.FallbackObjectMaterial = ObjectMaterial.HardTissues;
            }
        }
Ejemplo n.º 12
0
    public EObjectMaterial GetMaterial()
    {
        Vector3    vector     = base.transform.position + Vector3.up * 0.2f;
        int        num        = Physics.RaycastNonAlloc(vector, Vector3.down * 0.5f, Being.s_RaycastCache);
        float      num2       = float.MaxValue;
        GameObject gameObject = null;

        for (int i = 0; i < num; i++)
        {
            if (Being.s_RaycastCache[i].distance < num2)
            {
                num2       = Being.s_RaycastCache[i].distance;
                gameObject = Being.s_RaycastCache[i].collider.gameObject;
            }
        }
        if (gameObject == null)
        {
            return(EObjectMaterial.Unknown);
        }
        if (gameObject.layer == LayerMask.NameToLayer("Water"))
        {
            return(EObjectMaterial.Water);
        }
        ObjectMaterial component = gameObject.GetComponent <ObjectMaterial>();

        if (component != null)
        {
            return(component.m_ObjectMaterial);
        }
        if (gameObject.GetComponent <Terrain>() == null)
        {
            return(EObjectMaterial.Unknown);
        }
        TerrainData terrainData = Terrain.activeTerrain.terrainData;
        int         num3        = (int)(vector.x / terrainData.size.x * (float)terrainData.alphamapWidth);
        int         num4        = (int)(vector.z / terrainData.size.z * (float)terrainData.alphamapHeight);

        if (num3 > terrainData.alphamapWidth || num4 > terrainData.alphamapHeight)
        {
            return(EObjectMaterial.Grass);
        }
        float[,,] alphamaps = terrainData.GetAlphamaps(num3, num4, 1, 1);
        int   num5 = -1;
        float num6 = float.MinValue;

        for (int j = 0; j < terrainData.alphamapLayers; j++)
        {
            if (alphamaps[0, 0, j] > num6)
            {
                num6 = alphamaps[0, 0, j];
                num5 = j;
            }
        }
        if (num5 < 0)
        {
            return(EObjectMaterial.Unknown);
        }
        switch (num5)
        {
        case 0:
            return(EObjectMaterial.DryLeaves);

        case 1:
            return(EObjectMaterial.Grass);

        case 2:
            return(EObjectMaterial.Unknown);

        case 3:
            return(EObjectMaterial.Grass);

        case 4:
            return(EObjectMaterial.Mud);

        case 5:
            return(EObjectMaterial.Soil);

        case 6:
            return(EObjectMaterial.Stone);

        case 7:
            return(EObjectMaterial.Sand);

        default:
            return(EObjectMaterial.Unknown);
        }
    }
    public void OnPlantDestroy()
    {
        base.enabled = true;
        if (!this.m_DontDestroy)
        {
            base.gameObject.AddComponent <TinyPhysicsObject>();
        }
        Rigidbody rigidbody = base.gameObject.AddComponentWithEvent <Rigidbody>();

        if (rigidbody)
        {
            rigidbody.collisionDetectionMode = CollisionDetectionMode.Continuous;
        }
        Collider collider = base.gameObject.GetComponent <Collider>();

        if (collider == null)
        {
            if (this.m_UseApproxBoxCollider)
            {
                BoxCollider boxCollider = base.gameObject.AddComponent <BoxCollider>();
                boxCollider.size    = base.GetComponent <Renderer>().bounds.size * 0.5f;
                boxCollider.center -= new Vector3(0f, boxCollider.size.y * 0.5f, 0f);
                collider            = boxCollider;
            }
            else
            {
                MeshCollider meshCollider = base.gameObject.AddComponent <MeshCollider>();
                meshCollider.convex = true;
                collider            = meshCollider;
                PhysicsDampener physicsDampener = base.gameObject.AddComponent <PhysicsDampener>();
                physicsDampener.m_MaxYUpVelocity       = 1f;
                physicsDampener.m_MaxVelocityMagnitude = 2f;
            }
        }
        this.ReplaceShader(base.gameObject);
        ObjectMaterial objectMaterial = base.GetComponent <ObjectMaterial>();

        if (objectMaterial == null)
        {
            objectMaterial = base.gameObject.AddComponent <ObjectMaterial>();
        }
        objectMaterial.m_ObjectMaterial = EObjectMaterial.Bush;
        base.gameObject.layer           = this.m_Layer;
        if (this.m_ActivateScripts)
        {
            MonoBehaviour[] components = base.GetComponents <MonoBehaviour>();
            for (int i = 0; i < components.Length; i++)
            {
                components[i].enabled = true;
            }
        }
        else
        {
            ReplicationComponent component = base.GetComponent <ReplicationComponent>();
            if (component)
            {
                component.enabled = true;
            }
        }
        base.transform.parent = null;
        this.DisableCollisionWithPlayer(collider);
        this.DisableCollisionWithOtherChunks(collider);
        base.gameObject.SetActive(true);
        if (base.ReplIsOwner())
        {
            this.ReplSetDirty();
        }
        this.m_PlantDestroyed = true;
    }
Ejemplo n.º 14
0
 private bool IsUpgradeAllowed(ObjectMaterial materialToAdd)
 {
     return(CountUnOccupiedMaterials(ref VectorMaterial) >= 1);
 }
Ejemplo n.º 15
0
    public void OnDestroyPlant()
    {
        if (DestroyablePlant.s_StandardShader == null)
        {
            DestroyablePlant.s_StandardShader = Shader.Find("Custom/WindLeavesC2Standard_not_moving");
        }
        if (DestroyablePlant.m_Layer == -1)
        {
            DestroyablePlant.m_Layer = LayerMask.NameToLayer("SmallPlant");
        }
        List <MeshCollider> list = new List <MeshCollider>();
        Dictionary <ItemReplacer, ItemReplacer> dictionary = new Dictionary <ItemReplacer, ItemReplacer>();

        for (int i = 0; i < this.m_Chunks.Count; i++)
        {
            if (!(this.m_Chunks[i] == null) && this.m_Chunks[i].activeSelf)
            {
                PlantFruit component = this.m_Chunks[i].GetComponent <PlantFruit>();
                if (component)
                {
                    ItemID item_id = (ItemID)Enum.Parse(typeof(ItemID), component.m_InfoName);
                    ItemsManager.Get().CreateItem(item_id, true, this.m_Chunks[i].transform);
                }
                else
                {
                    GameObject gameObject = UnityEngine.Object.Instantiate <GameObject>(this.m_Chunks[i], this.m_Chunks[i].transform.position, this.m_Chunks[i].transform.rotation);
                    if (!this.m_DontDestroy)
                    {
                        gameObject.AddComponent <TinyPhysicsObject>();
                    }
                    gameObject.AddComponent <Rigidbody>();
                    MeshCollider meshCollider = gameObject.AddComponent <MeshCollider>();
                    meshCollider.convex = true;
                    this.ReplaceShader(gameObject);
                    ObjectMaterial objectMaterial = gameObject.AddComponent <ObjectMaterial>();
                    objectMaterial.m_ObjectMaterial = EObjectMaterial.Bush;
                    gameObject.layer = DestroyablePlant.m_Layer;
                    list.Add(meshCollider);
                    if (this.m_CopyScripts)
                    {
                        this.CopyComponents(this.m_Chunks[i], gameObject);
                    }
                    ItemReplacer component2 = this.m_Chunks[i].GetComponent <ItemReplacer>();
                    ItemReplacer component3 = gameObject.GetComponent <ItemReplacer>();
                    if (component2 && component3)
                    {
                        dictionary[component2] = component3;
                    }
                    this.DisableCollisionWithPlayer(meshCollider);
                }
            }
        }
        for (int j = 0; j < list.Count; j++)
        {
            for (int k = j + 1; k < list.Count; k++)
            {
                Physics.IgnoreCollision(list[j], list[k], true);
            }
        }
        this.SetupItemReplacer(dictionary);
    }
Ejemplo n.º 16
0
    public EObjectMaterial GetMaterial()
    {
        Vector3 position = base.transform.position;

        RaycastHit[] array      = Physics.RaycastAll(position, Vector3.down * 0.5f);
        float        num        = float.MaxValue;
        GameObject   gameObject = null;

        for (int i = 0; i < array.Length; i++)
        {
            if (array[i].distance < num)
            {
                num        = array[i].distance;
                gameObject = array[i].collider.gameObject;
            }
        }
        if (gameObject == null)
        {
            return(EObjectMaterial.Unknown);
        }
        ObjectMaterial component = gameObject.GetComponent <ObjectMaterial>();

        if (component != null)
        {
            return(component.m_ObjectMaterial);
        }
        if (gameObject.GetComponent <Terrain>() == null)
        {
            return(EObjectMaterial.Unknown);
        }
        Terrain     activeTerrain = Terrain.activeTerrain;
        TerrainData terrainData   = activeTerrain.terrainData;
        int         num2          = (int)(position.x / terrainData.size.x * (float)terrainData.alphamapWidth);
        int         num3          = (int)(position.z / terrainData.size.z * (float)terrainData.alphamapHeight);

        if (num2 > terrainData.alphamapWidth || num3 > terrainData.alphamapHeight)
        {
            return(EObjectMaterial.Grass);
        }
        float[,,] alphamaps = terrainData.GetAlphamaps(num2, num3, 1, 1);
        int   num4 = -1;
        float num5 = float.MinValue;

        for (int j = 0; j < terrainData.alphamapLayers; j++)
        {
            if (alphamaps[0, 0, j] > num5)
            {
                num5 = alphamaps[0, 0, j];
                num4 = j;
            }
        }
        if (num4 < 0)
        {
            return(EObjectMaterial.Unknown);
        }
        switch (num4)
        {
        case 0:
            return(EObjectMaterial.DryLeaves);

        case 1:
            return(EObjectMaterial.Grass);

        case 2:
            return(EObjectMaterial.Unknown);

        case 3:
            return(EObjectMaterial.Grass);

        case 4:
            return(EObjectMaterial.Mud);

        case 5:
            return(EObjectMaterial.Soil);

        case 6:
            return(EObjectMaterial.Stone);

        case 7:
            return(EObjectMaterial.Sand);

        default:
            return(EObjectMaterial.Unknown);
        }
    }
Ejemplo n.º 17
0
    private void Hit(CJObject cj_object, Collider coll, Vector3 hit_pos, Vector3 hit_dir)
    {
        Item currentItem = this.m_Player.GetCurrentItem(Hand.Right);

        if (cj_object)
        {
            HumanAI humanAI   = null;
            AI      component = cj_object.GetComponent <AI>();
            if (component && component.IsHuman())
            {
                humanAI = (HumanAI)component;
            }
            if (humanAI)
            {
                if (humanAI.m_Hallucination && humanAI.m_HallucinationDisappearing)
                {
                    return;
                }
                this.HitHumanAI(humanAI, hit_pos, hit_dir);
                this.MakeHitSound(coll.gameObject, currentItem.m_Info.m_ID);
                this.m_AlreadyHit = true;
            }
            else
            {
                Fish component2 = cj_object.GetComponent <Fish>();
                if (component2 && component2.m_ID != AI.AIID.AngelFish && component2.m_ID != AI.AIID.DiscusFish && UnityEngine.Random.Range(0f, 1f) < 0.5f)
                {
                    this.m_AlreadyHit = true;
                }
                else if (base.m_ControllerType == PlayerControllerType.WeaponMelee && component2 && component2.m_ID != AI.AIID.AngelFish && component2.m_ID != AI.AIID.DiscusFish)
                {
                    component2.OnHitByItem(null, hit_pos);
                    this.MakeHitSound(coll.gameObject, currentItem.m_Info.m_ID);
                    this.m_AlreadyHit = true;
                }
            }
            if (component)
            {
                PlayerConditionModule.Get().GetDirtinessAdd(GetDirtyReason.Combat, null);
            }
            if (!this.m_AlreadyHit)
            {
                this.HitObject(cj_object, hit_pos, hit_dir);
            }
        }
        else
        {
            RagdollBone component3 = coll.gameObject.GetComponent <RagdollBone>();
            if (component3 && component3.m_ParentObject)
            {
                DeadBody component4 = component3.m_ParentObject.GetComponent <DeadBody>();
                if (component4)
                {
                    component4.OnTakeDamage(new DamageInfo
                    {
                        m_DamageItem = currentItem,
                        m_Damager    = base.gameObject,
                        m_Position   = hit_pos,
                        m_HitDir     = hit_dir,
                        m_Normal     = -hit_dir
                    });
                    this.m_AlreadyHit = true;
                }
            }
        }
        DamageInfo     damageInfo = new DamageInfo();
        ObjectMaterial component5;

        if (cj_object != null)
        {
            component5 = cj_object.gameObject.GetComponent <ObjectMaterial>();
        }
        else
        {
            component5 = coll.gameObject.GetComponent <ObjectMaterial>();
        }
        EObjectMaterial mat = (component5 == null) ? EObjectMaterial.Unknown : component5.m_ObjectMaterial;

        damageInfo.m_Damage     = currentItem.m_Info.m_DamageSelf * ObjectMaterial.GetDamageSelfMul(mat);
        damageInfo.m_DamageItem = currentItem;
        this.MakeHitSound(coll.gameObject, currentItem.m_Info.m_ID);
        currentItem.TakeDamage(damageInfo);
        this.OnHit();
    }
Ejemplo n.º 18
0
 public HitSparksEntry GetForMaterial(ObjectMaterial material)
 {
     return(this.HitSparksPreset.Find(material));
 }
Ejemplo n.º 19
0
        public static void ClientAddHitSparks(
            IReadOnlyWeaponHitSparksPreset hitSparksPreset,
            WeaponHitData hitData,
            IWorldObject hitWorldObject,
            IProtoWorldObject protoWorldObject,
            Vector2D worldObjectPosition,
            int projectilesCount,
            ObjectMaterial objectMaterial,
            bool randomizeHitPointOffset,
            bool randomRotation,
            DrawOrder drawOrder,
            double scale = 1.0,
            double animationFrameDuration = 2 / 60.0)
        {
            var sceneObject = Api.Client.Scene.CreateSceneObject("Temp_HitSparks");

            sceneObject.Position = worldObjectPosition;
            var hitPoint = hitData.HitPoint.ToVector2D();

            if (!hitData.IsCliffsHit)
            {
                // move hitpoint a bit closer to the center of the object
                hitPoint = WeaponSystem.SharedOffsetHitWorldPositionCloserToObjectCenter(
                    hitWorldObject,
                    protoWorldObject,
                    hitPoint,
                    isRangedWeapon: randomizeHitPointOffset);
            }

            var sparksEntry = hitSparksPreset.GetForMaterial(objectMaterial);

            if (projectilesCount == 1 &&
                randomizeHitPointOffset &&
                sparksEntry.AllowRandomizedHitPointOffset)
            {
                // randomize hitpoint a bit by adding a little random offset
                var maxOffsetDistance = 0.2;
                var range             = maxOffsetDistance * RandomHelper.NextDouble();
                var angleRad          = 2 * Math.PI * RandomHelper.NextDouble();
                var randomOffset      = new Vector2D(range * Math.Cos(angleRad),
                                                     range * Math.Sin(angleRad));

                hitPoint += randomOffset;
            }

            var componentSpriteRender = Api.Client.Rendering.CreateSpriteRenderer(
                sceneObject,
                positionOffset: hitPoint,
                spritePivotPoint: (0.5, sparksEntry.PivotY),
                drawOrder: drawOrder);

            componentSpriteRender.DrawOrderOffsetY = -hitPoint.Y;
            componentSpriteRender.Scale            = (float)scale * Math.Pow(1.0 / projectilesCount, 0.35);

            if (sparksEntry.UseScreenBlending)
            {
                componentSpriteRender.BlendMode = BlendMode.Screen;
            }

            if (randomRotation)
            {
                componentSpriteRender.RotationAngleRad = (float)(RandomHelper.NextDouble() * 2 * Math.PI);
            }

            var componentAnimator = sceneObject.AddComponent <ClientComponentSpriteSheetAnimator>();
            var hitSparksEntry    = sparksEntry;

            componentAnimator.Setup(
                componentSpriteRender,
                hitSparksEntry.SpriteSheetAnimationFrames,
                frameDurationSeconds: animationFrameDuration,
                isLooped: false);

            var totalAnimationDuration = animationFrameDuration * componentAnimator.FramesCount;
            var totalDurationWithLight = 0.15 + totalAnimationDuration;

            if (hitSparksEntry.LightColor.HasValue)
            {
                // create light spot (even for melee weapons)
                var lightSource = ClientLighting.CreateLightSourceSpot(
                    sceneObject,
                    color: hitSparksEntry.LightColor.Value,
                    spritePivotPoint: (0.5, 0.5),
                    size: 7,
                    // we don't want to display nickname/healthbar for the firing character, it's too quick anyway
                    logicalSize: 0,
                    positionOffset: hitPoint);

                ClientComponentOneShotLightAnimation.Setup(lightSource, totalDurationWithLight);
            }

            componentSpriteRender.Destroy(totalAnimationDuration);
            componentAnimator.Destroy(totalAnimationDuration);

            sceneObject.Destroy(totalDurationWithLight);
        }
Ejemplo n.º 20
0
    private void Hit(CJObject cj_object, Collider coll, Vector3 hit_pos, Vector3 hit_dir)
    {
        Item currentItem = this.m_Player.GetCurrentItem(Hand.Right);

        if (cj_object)
        {
            HumanAI component = cj_object.GetComponent <HumanAI>();
            if (component)
            {
                if (component.m_Hallucination && component.m_HallucinationDisappearing)
                {
                    return;
                }
                this.HitHumanAI(component, hit_pos, hit_dir);
                this.MakeHitSound(coll.gameObject, currentItem.m_Info.m_ID);
                this.m_AlreadyHit = true;
                return;
            }
            else
            {
                this.HitObject(cj_object, hit_pos, hit_dir);
            }
        }
        else
        {
            RagdollBone component2 = coll.gameObject.GetComponent <RagdollBone>();
            if (component2 && component2.m_Parent)
            {
                DeadBody component3 = component2.m_Parent.GetComponent <DeadBody>();
                if (component3)
                {
                    component3.OnTakeDamage(new DamageInfo
                    {
                        m_DamageItem = currentItem,
                        m_Damager    = base.gameObject,
                        m_Position   = hit_pos,
                        m_HitDir     = hit_dir,
                        m_Normal     = -hit_dir
                    });
                    return;
                }
            }
        }
        DamageInfo     damageInfo = new DamageInfo();
        ObjectMaterial component4;

        if (cj_object != null)
        {
            component4 = cj_object.gameObject.GetComponent <ObjectMaterial>();
        }
        else
        {
            component4 = coll.gameObject.GetComponent <ObjectMaterial>();
        }
        EObjectMaterial mat = (!(component4 == null)) ? component4.m_ObjectMaterial : EObjectMaterial.Unknown;

        damageInfo.m_Damage     = currentItem.m_Info.m_DamageSelf * ObjectMaterial.GetDamageSelfMul(mat);
        damageInfo.m_DamageItem = currentItem;
        this.MakeHitSound(coll.gameObject, currentItem.m_Info.m_ID);
        currentItem.TakeDamage(damageInfo);
        this.OnHit();
    }