Пример #1
0
    public override Construction.Placement DoPlacement(Construction.Target target)
    {
        Quaternion quaternion1 = target.socket.rotation;

        if (target.socket.male && target.socket.female)
        {
            quaternion1 = Quaternion.op_Multiply(target.socket.rotation, Quaternion.Euler(180f, 0.0f, 180f));
        }
        Transform  transform          = ((Component)target.entity).get_transform();
        Matrix4x4  localToWorldMatrix = transform.get_localToWorldMatrix();
        Vector3    vector3_1          = ((Matrix4x4) ref localToWorldMatrix).MultiplyPoint3x4(target.socket.position);
        Quaternion quaternion2;

        if (this.useFemaleRotation)
        {
            quaternion2 = Quaternion.op_Multiply(transform.get_rotation(), quaternion1);
        }
        else
        {
            Vector3 vector3_2 = new Vector3((float)vector3_1.x, 0.0f, (float)vector3_1.z);
            Vector3 vector3_3;
            ((Vector3) ref vector3_3).\u002Ector((float)target.player.eyes.position.x, 0.0f, (float)target.player.eyes.position.z);
            Vector3 vector3_4 = vector3_3;
            Vector3 vector3_5 = Vector3.op_Subtraction(vector3_2, vector3_4);
            quaternion2 = Quaternion.op_Multiply(Quaternion.LookRotation(((Vector3) ref vector3_5).get_normalized()), quaternion1);
        }
        Construction.Placement placement   = new Construction.Placement();
        Quaternion             quaternion3 = Quaternion.op_Multiply(quaternion2, Quaternion.Inverse(this.rotation));
        Vector3 vector3_6 = Quaternion.op_Multiply(quaternion3, this.position);

        placement.position = Vector3.op_Subtraction(vector3_1, vector3_6);
        placement.rotation = quaternion3;
        return(placement);
    }
    public override Construction.Placement DoPlacement(Construction.Target target)
    {
        Quaternion quaternion;
        Quaternion quaternion1 = target.socket.rotation;

        if (target.socket.male && target.socket.female)
        {
            quaternion1 = target.socket.rotation * Quaternion.Euler(180f, 0f, 180f);
        }
        Transform transforms = target.entity.transform;
        Vector3   vector3    = transforms.localToWorldMatrix.MultiplyPoint3x4(target.socket.position);

        if (!this.useFemaleRotation)
        {
            Vector3 vector31 = new Vector3(vector3.x, 0f, vector3.z);
            Vector3 vector32 = new Vector3(target.player.eyes.position.x, 0f, target.player.eyes.position.z);
            Vector3 vector33 = vector31 - vector32;
            quaternion = Quaternion.LookRotation(vector33.normalized) * quaternion1;
        }
        else
        {
            quaternion = transforms.rotation * quaternion1;
        }
        Construction.Placement placement   = new Construction.Placement();
        Quaternion             quaternion2 = quaternion * Quaternion.Inverse(this.rotation);

        placement.position = vector3 - (quaternion2 * this.position);
        placement.rotation = quaternion2;
        return(placement);
    }
    public override bool DoCheck(Construction.Placement place)
    {
        Vector3 position           = Vector3.op_Addition(place.position, Quaternion.op_Multiply(place.rotation, this.worldPosition));
        List <BuildingBlock> list1 = (List <BuildingBlock>)Pool.GetList <BuildingBlock>();
        double sphereRadius        = (double)this.sphereRadius;
        List <BuildingBlock> list2 = list1;
        int layerMask = ((LayerMask) ref this.layerMask).get_value();
        QueryTriggerInteraction queryTriggers = this.queryTriggers;

        Vis.Entities <BuildingBlock>(position, (float)sphereRadius, list2, layerMask, queryTriggers);
        bool flag = list1.Count > 0;

        if (flag && this.wantsCollide)
        {
            // ISSUE: cast to a reference type
            Pool.FreeList <BuildingBlock>((List <M0>&) ref list1);
            return(true);
        }
        if (flag && !this.wantsCollide)
        {
            // ISSUE: cast to a reference type
            Pool.FreeList <BuildingBlock>((List <M0>&) ref list1);
            return(false);
        }
        // ISSUE: cast to a reference type
        Pool.FreeList <BuildingBlock>((List <M0>&) ref list1);
        return(!this.wantsCollide);
    }
    public override bool DoCheck(Construction.Placement place)
    {
        Vector3           position     = Vector3.op_Addition(place.position, Quaternion.op_Multiply(place.rotation, this.worldPosition));
        List <BaseEntity> list1        = (List <BaseEntity>)Pool.GetList <BaseEntity>();
        double            sphereRadius = (double)this.sphereRadius;
        List <BaseEntity> list2        = list1;
        int layerMask = ((LayerMask) ref this.layerMask).get_value();
        QueryTriggerInteraction queryTriggers = this.queryTriggers;

        Vis.Entities <BaseEntity>(position, (float)sphereRadius, list2, layerMask, queryTriggers);
        foreach (object obj in list1)
        {
            bool flag = obj.GetType().IsAssignableFrom(((object)this.searchType).GetType());
            if (flag && this.wantsCollide)
            {
                // ISSUE: cast to a reference type
                Pool.FreeList <BaseEntity>((List <M0>&) ref list1);
                return(true);
            }
            if (flag && !this.wantsCollide)
            {
                // ISSUE: cast to a reference type
                Pool.FreeList <BaseEntity>((List <M0>&) ref list1);
                return(false);
            }
        }
        // ISSUE: cast to a reference type
        Pool.FreeList <BaseEntity>((List <M0>&) ref list1);
        return(!this.wantsCollide);
    }
    public override bool DoCheck(Construction.Placement place)
    {
        Vector3           position     = Vector3.op_Addition(place.position, Quaternion.op_Multiply(place.rotation, this.worldPosition));
        List <BaseEntity> list1        = (List <BaseEntity>)Pool.GetList <BaseEntity>();
        double            sphereRadius = (double)this.sphereRadius;
        List <BaseEntity> list2        = list1;
        int layerMask = ((LayerMask) ref this.layerMask).get_value();
        QueryTriggerInteraction queryTriggers = this.queryTriggers;

        Vis.Entities <BaseEntity>(position, (float)sphereRadius, list2, layerMask, queryTriggers);
        foreach (Component component1 in list1)
        {
            PlantEntity component2 = (PlantEntity)component1.GetComponent <PlantEntity>();
            if (Object.op_Implicit((Object)component2) && this.wantsCollide)
            {
                // ISSUE: cast to a reference type
                Pool.FreeList <BaseEntity>((List <M0>&) ref list1);
                return(true);
            }
            if (Object.op_Implicit((Object)component2) && !this.wantsCollide)
            {
                // ISSUE: cast to a reference type
                Pool.FreeList <BaseEntity>((List <M0>&) ref list1);
                return(false);
            }
        }
        // ISSUE: cast to a reference type
        Pool.FreeList <BaseEntity>((List <M0>&) ref list1);
        return(!this.wantsCollide);
    }
    public override bool DoCheck(Construction.Placement place)
    {
        Vector3           position     = Vector3.op_Addition(place.position, Quaternion.op_Multiply(place.rotation, this.worldPosition));
        List <BaseEntity> list1        = (List <BaseEntity>)Pool.GetList <BaseEntity>();
        double            sphereRadius = (double)this.sphereRadius;
        List <BaseEntity> list2        = list1;
        int layerMask = ((LayerMask) ref this.layerMask).get_value();
        QueryTriggerInteraction queryTriggers = this.queryTriggers;

        Vis.Entities <BaseEntity>(position, (float)sphereRadius, list2, layerMask, queryTriggers);
        foreach (BaseEntity baseEntity in list1)
        {
            BaseEntity ent  = baseEntity;
            bool       flag = ((IEnumerable <BaseEntity>) this.entityTypes).Any <BaseEntity>((Func <BaseEntity, bool>)(x => (int)x.prefabID == (int)ent.prefabID));
            if (flag && this.wantsCollide)
            {
                // ISSUE: cast to a reference type
                Pool.FreeList <BaseEntity>((List <M0>&) ref list1);
                return(true);
            }
            if (flag && !this.wantsCollide)
            {
                // ISSUE: cast to a reference type
                Pool.FreeList <BaseEntity>((List <M0>&) ref list1);
                return(false);
            }
        }
        // ISSUE: cast to a reference type
        Pool.FreeList <BaseEntity>((List <M0>&) ref list1);
        return(!this.wantsCollide);
    }
Пример #7
0
 public override bool DoCheck(Construction.Placement place)
 {
     if (SocketMod_TerrainCheck.IsInTerrain(Vector3.op_Addition(place.position, Quaternion.op_Multiply(place.rotation, this.worldPosition))) == this.wantsInTerrain)
     {
         return(true);
     }
     Construction.lastPlacementError = this.fullName + ": not in terrain";
     return(false);
 }
Пример #8
0
 public override bool DoCheck(Construction.Placement place)
 {
     if (this.wantsCollide == GamePhysics.CheckSphere(Vector3.op_Addition(place.position, Quaternion.op_Multiply(place.rotation, this.worldPosition)), this.sphereRadius, ((LayerMask) ref this.layerMask).get_value(), (QueryTriggerInteraction)0))
     {
         return(true);
     }
     Construction.lastPlacementError = "Failed Check: Sphere Test (" + this.hierachyName + ")";
     return(false);
 }
 public override bool DoCheck(Construction.Placement place)
 {
     if ((double)Vector3Ex.DotDegrees(this.worldNormal, Quaternion.op_Multiply(place.rotation, Vector3.get_up())) < (double)this.withinDegrees)
     {
         return(true);
     }
     Construction.lastPlacementError = "Failed Check: AngleCheck (" + this.hierachyName + ")";
     return(false);
 }
Пример #10
0
 public override bool DoCheck(Construction.Placement place)
 {
     if (SocketMod_TerrainCheck.IsInTerrain(place.position + (place.rotation * this.worldPosition)) == this.wantsInTerrain)
     {
         return(true);
     }
     Construction.lastPlacementError = string.Concat(this.fullName, ": not in terrain");
     return(false);
 }
 public override bool DoCheck(Construction.Placement place)
 {
     if (this.worldNormal.DotDegrees(place.rotation * Vector3.up) < this.withinDegrees)
     {
         return(true);
     }
     Construction.lastPlacementError = string.Concat("Failed Check: AngleCheck (", this.hierachyName, ")");
     return(false);
 }
 public override bool DoCheck(Construction.Placement place)
 {
     if (WaterLevel.Test(Vector3.op_Addition(place.position, Quaternion.op_Multiply(place.rotation, this.worldPosition))) == this.wantsInWater)
     {
         return(true);
     }
     Construction.lastPlacementError = "Failed Check: InWater (" + this.hierachyName + ")";
     return(false);
 }
Пример #13
0
 public override bool DoCheck(Construction.Placement place)
 {
     if (WaterLevel.Test(place.position + (place.rotation * this.worldPosition)) == this.wantsInWater)
     {
         return(true);
     }
     Construction.lastPlacementError = string.Concat("Failed Check: InWater (", this.hierachyName, ")");
     return(false);
 }
 public override bool DoCheck(Construction.Placement place)
 {
     if (this.DoCheck(place.position, place.rotation))
     {
         return(true);
     }
     Construction.lastPlacementError = "Failed Check: IsInArea (" + this.hierachyName + ")";
     return(false);
 }
    public override bool DoCheck(Construction.Placement place)
    {
        Vector3 vector3 = place.position + (place.rotation * this.worldPosition);

        if (this.wantsCollide == GamePhysics.CheckSphere(vector3, this.sphereRadius, this.layerMask.@value, QueryTriggerInteraction.UseGlobal))
        {
            return(true);
        }
        Construction.lastPlacementError = string.Concat("Failed Check: Sphere Test (", this.hierachyName, ")");
        return(false);
    }
Пример #16
0
    public override Construction.Placement DoPlacement(Construction.Target target)
    {
        if (!Object.op_Implicit((Object)target.entity) || !Object.op_Implicit((Object)((Component)target.entity).get_transform()))
        {
            return((Construction.Placement)null);
        }
        Vector3    worldPosition = target.GetWorldPosition();
        Quaternion worldRotation = target.GetWorldRotation(true);

        if (this.rotationDegrees > 0)
        {
            Construction.Placement placement = new Construction.Placement();
            float num1 = float.MaxValue;
            float num2 = 0.0f;
            for (int index = 0; index < 360; index += this.rotationDegrees)
            {
                Quaternion quaternion1 = Quaternion.Euler(0.0f, (float)(this.rotationOffset + index), 0.0f);
                Vector3    direction   = ((Ray) ref target.ray).get_direction();
                Quaternion quaternion2 = worldRotation;
                Vector3    vector3     = Quaternion.op_Multiply(Quaternion.op_Multiply(quaternion1, quaternion2), Vector3.get_up());
                float      num3        = Vector3.Angle(direction, vector3);
                if ((double)num3 < (double)num1)
                {
                    num1 = num3;
                    num2 = (float)index;
                }
            }
            for (int index = 0; index < 360; index += this.rotationDegrees)
            {
                Quaternion quaternion1 = Quaternion.op_Multiply(worldRotation, Quaternion.Inverse(this.rotation));
                Quaternion quaternion2 = Quaternion.op_Multiply(Quaternion.op_Multiply(Quaternion.Euler(target.rotation), Quaternion.Euler(0.0f, (float)(this.rotationOffset + index) + num2, 0.0f)), quaternion1);
                Vector3    vector3     = Quaternion.op_Multiply(quaternion2, this.position);
                placement.position = Vector3.op_Subtraction(worldPosition, vector3);
                placement.rotation = quaternion2;
                if (this.CheckSocketMods(placement))
                {
                    return(placement);
                }
            }
        }
        Construction.Placement placement1 = new Construction.Placement();
        Quaternion             quaternion = Quaternion.op_Multiply(worldRotation, Quaternion.Inverse(this.rotation));
        Vector3 vector3_1 = Quaternion.op_Multiply(quaternion, this.position);

        placement1.position = Vector3.op_Subtraction(worldPosition, vector3_1);
        placement1.rotation = quaternion;
        if (!this.TestRestrictedAngles(worldPosition, worldRotation, target))
        {
            return((Construction.Placement)null);
        }
        return(placement1);
    }
    public override Construction.Placement DoPlacement(Construction.Target target)
    {
        if (!target.entity || !target.entity.transform)
        {
            return(null);
        }
        Vector3    worldPosition = target.GetWorldPosition();
        Quaternion worldRotation = target.GetWorldRotation(true);

        if (this.rotationDegrees > 0)
        {
            Construction.Placement placement = new Construction.Placement();
            float single  = Single.MaxValue;
            float single1 = 0f;
            for (int i = 0; i < 360; i += this.rotationDegrees)
            {
                Quaternion quaternion = Quaternion.Euler(0f, (float)(this.rotationOffset + i), 0f);
                Vector3    vector3    = target.ray.direction;
                Vector3    vector31   = (quaternion * worldRotation) * Vector3.up;
                float      single2    = Vector3.Angle(vector3, vector31);
                if (single2 < single)
                {
                    single  = single2;
                    single1 = (float)i;
                }
            }
            for (int j = 0; j < 360; j += this.rotationDegrees)
            {
                Quaternion quaternion1 = worldRotation * Quaternion.Inverse(this.rotation);
                Quaternion quaternion2 = Quaternion.Euler(target.rotation);
                Quaternion quaternion3 = Quaternion.Euler(0f, (float)(this.rotationOffset + j) + single1, 0f);
                Quaternion quaternion4 = (quaternion2 * quaternion3) * quaternion1;
                placement.position = worldPosition - (quaternion4 * this.position);
                placement.rotation = quaternion4;
                if (this.CheckSocketMods(placement))
                {
                    return(placement);
                }
            }
        }
        Construction.Placement placement1  = new Construction.Placement();
        Quaternion             quaternion5 = worldRotation * Quaternion.Inverse(this.rotation);

        placement1.position = worldPosition - (quaternion5 * this.position);
        placement1.rotation = quaternion5;
        if (!this.TestRestrictedAngles(worldPosition, worldRotation, target))
        {
            return(null);
        }
        return(placement1);
    }
Пример #18
0
    private bool TestPlacingThroughRock(ref Construction.Placement placement, Construction.Target target)
    {
        RaycastHit raycastHit;
        OBB        oBB     = new OBB(placement.position, Vector3.one, placement.rotation, this.bounds);
        Vector3    center  = target.player.GetCenter(true);
        Vector3    vector3 = target.ray.origin;

        if (Physics.Linecast(center, vector3, 65536, QueryTriggerInteraction.Ignore))
        {
            return(false);
        }
        if (Physics.Linecast(vector3, (oBB.Trace(target.ray, out raycastHit, Single.PositiveInfinity) ? raycastHit.point : oBB.ClosestPoint(vector3)), 65536, QueryTriggerInteraction.Ignore))
        {
            return(false);
        }
        return(true);
    }
Пример #19
0
 public virtual bool CheckSocketMods(Construction.Placement placement)
 {
     foreach (SocketMod socketMod in this.socketMods)
     {
         socketMod.ModifyPlacement(placement);
     }
     foreach (SocketMod socketMod in this.socketMods)
     {
         if (!socketMod.DoCheck(placement))
         {
             if (socketMod.FailedPhrase.IsValid())
             {
                 Construction.lastPlacementError = "Failed Check: (" + socketMod.FailedPhrase.translated + ")";
             }
             return(false);
         }
     }
     return(true);
 }
Пример #20
0
    private bool TestPlacingThroughRock(
        ref Construction.Placement placement,
        Construction.Target target)
    {
        OBB obb;

        ((OBB) ref obb).\u002Ector(placement.position, Vector3.get_one(), placement.rotation, this.bounds);
        Vector3 center    = target.player.GetCenter(true);
        Vector3 origin    = ((Ray) ref target.ray).get_origin();
        Vector3 vector3_1 = origin;

        if (Physics.Linecast(center, vector3_1, 65536, (QueryTriggerInteraction)1))
        {
            return(false);
        }
        RaycastHit raycastHit;
        Vector3    vector3_2 = ((OBB) ref obb).Trace(target.ray, ref raycastHit, float.PositiveInfinity) ? ((RaycastHit) ref raycastHit).get_point() : ((OBB) ref obb).ClosestPoint(origin);

        return(!Physics.Linecast(origin, vector3_2, 65536, (QueryTriggerInteraction)1));
    }
    public override bool DoCheck(Construction.Placement place)
    {
        Vector3 vector3           = place.position + (place.rotation * this.worldPosition);
        List <BuildingBlock> list = Pool.GetList <BuildingBlock>();

        Vis.Entities <BuildingBlock>(vector3, this.sphereRadius, list, this.layerMask.@value, this.queryTriggers);
        bool count = list.Count > 0;

        if (count && this.wantsCollide)
        {
            Pool.FreeList <BuildingBlock>(ref list);
            return(true);
        }
        if (count && !this.wantsCollide)
        {
            Pool.FreeList <BuildingBlock>(ref list);
            return(false);
        }
        Pool.FreeList <BuildingBlock>(ref list);
        return(!this.wantsCollide);
    }
    public override void ModifyPlacement(Construction.Placement place)
    {
        Vector3           vector3 = place.position + (place.rotation * this.worldPosition);
        List <BaseEntity> list    = Pool.GetList <BaseEntity>();

        Vis.Entities <BaseEntity>(vector3, this.outerRadius * 2f, list, -1, QueryTriggerInteraction.Collide);
        foreach (BaseEntity baseEntity in list)
        {
            if (baseEntity.isServer != this.isServer)
            {
                continue;
            }
            AttractionPoint[] attractionPointArray = this.prefabAttribute.FindAll <AttractionPoint>(baseEntity.prefabID);
            if (attractionPointArray == null)
            {
                continue;
            }
            AttractionPoint[] attractionPointArray1 = attractionPointArray;
            for (int i = 0; i < (int)attractionPointArray1.Length; i++)
            {
                AttractionPoint attractionPoint = attractionPointArray1[i];
                if (attractionPoint.groupName == this.groupName)
                {
                    Vector3 vector31 = baseEntity.transform.position + (baseEntity.transform.rotation * attractionPoint.worldPosition);
                    Vector3 vector32 = vector31 - vector3;
                    float   single   = vector32.magnitude;
                    if (single <= this.outerRadius)
                    {
                        Quaternion quaternion = QuaternionEx.LookRotationWithOffset(this.worldPosition, vector31 - place.position, Vector3.up);
                        float      single1    = Mathf.InverseLerp(this.outerRadius, this.innerRadius, single);
                        place.rotation = Quaternion.Lerp(place.rotation, quaternion, single1);
                        vector3        = place.position + (place.rotation * this.worldPosition);
                        vector32       = vector31 - vector3;
                        place.position = place.position + (vector32 * single1);
                    }
                }
            }
        }
        Pool.FreeList <BaseEntity>(ref list);
    }
Пример #23
0
    public override bool DoCheck(Construction.Placement place)
    {
        bool              flag;
        Vector3           vector3 = place.position + (place.rotation * this.worldPosition);
        List <BaseEntity> list    = Pool.GetList <BaseEntity>();

        Vis.Entities <BaseEntity>(vector3, this.sphereRadius, list, this.layerMask.@value, this.queryTriggers);
        List <BaseEntity> .Enumerator enumerator = list.GetEnumerator();
        try
        {
            while (enumerator.MoveNext())
            {
                BaseEntity current = enumerator.Current;
                bool       flag1   = this.entityTypes.Any <BaseEntity>((BaseEntity x) => x.prefabID == current.prefabID);
                if (!flag1 || !this.wantsCollide)
                {
                    if (!flag1 || this.wantsCollide)
                    {
                        continue;
                    }
                    Pool.FreeList <BaseEntity>(ref list);
                    flag = false;
                    return(flag);
                }
                else
                {
                    Pool.FreeList <BaseEntity>(ref list);
                    flag = true;
                    return(flag);
                }
            }
            Pool.FreeList <BaseEntity>(ref list);
            return(!this.wantsCollide);
        }
        finally
        {
            ((IDisposable)enumerator).Dispose();
        }
        return(flag);
    }
    public override void ModifyPlacement(Construction.Placement place)
    {
        Vector3           position = Vector3.op_Addition(place.position, Quaternion.op_Multiply(place.rotation, this.worldPosition));
        List <BaseEntity> list     = (List <BaseEntity>)Pool.GetList <BaseEntity>();

        Vis.Entities <BaseEntity>(position, this.outerRadius * 2f, list, -1, (QueryTriggerInteraction)2);
        foreach (BaseEntity baseEntity in list)
        {
            if (baseEntity.isServer == this.isServer)
            {
                AttractionPoint[] all = this.prefabAttribute.FindAll <AttractionPoint>(baseEntity.prefabID);
                if (all != null)
                {
                    foreach (AttractionPoint attractionPoint in all)
                    {
                        if (!(attractionPoint.groupName != this.groupName))
                        {
                            Vector3 vector3_1 = Vector3.op_Addition(((Component)baseEntity).get_transform().get_position(), Quaternion.op_Multiply(((Component)baseEntity).get_transform().get_rotation(), attractionPoint.worldPosition));
                            Vector3 vector3_2 = Vector3.op_Subtraction(vector3_1, position);
                            float   magnitude = ((Vector3) ref vector3_2).get_magnitude();
                            if ((double)magnitude <= (double)this.outerRadius)
                            {
                                Quaternion quaternion = QuaternionEx.LookRotationWithOffset(this.worldPosition, Vector3.op_Subtraction(vector3_1, place.position), Vector3.get_up());
                                float      num        = Mathf.InverseLerp(this.outerRadius, this.innerRadius, magnitude);
                                place.rotation = Quaternion.Lerp(place.rotation, quaternion, num);
                                position       = Vector3.op_Addition(place.position, Quaternion.op_Multiply(place.rotation, this.worldPosition));
                                Vector3 vector3_3 = Vector3.op_Subtraction(vector3_1, position);
                                place.position = Vector3.op_Addition(place.position, Vector3.op_Multiply(vector3_3, num));
                            }
                        }
                    }
                }
            }
        }
        // ISSUE: cast to a reference type
        Pool.FreeList <BaseEntity>((List <M0>&) ref list);
    }
Пример #25
0
    private static bool TestPlacingThroughWall(
        ref Construction.Placement placement,
        Transform transform,
        Construction common,
        Construction.Target target)
    {
        Vector3    vector3 = Vector3.op_Subtraction(placement.position, ((Ray) ref target.ray).get_origin());
        RaycastHit hit;

        if (!Physics.Raycast(((Ray) ref target.ray).get_origin(), ((Vector3) ref vector3).get_normalized(), ref hit, ((Vector3) ref vector3).get_magnitude(), 2097152))
        {
            return(true);
        }
        StabilityEntity entity = hit.GetEntity() as StabilityEntity;

        if (Object.op_Inequality((Object)entity, (Object)null) && Object.op_Equality((Object)target.entity, (Object)entity) || (double)((Vector3) ref vector3).get_magnitude() - (double)((RaycastHit) ref hit).get_distance() < 0.200000002980232)
        {
            return(true);
        }
        Construction.lastPlacementError = "object in placement path";
        transform.set_position(((RaycastHit) ref hit).get_point());
        transform.set_rotation(placement.rotation);
        return(false);
    }
Пример #26
0
    public virtual bool CheckSocketMods(Construction.Placement placement)
    {
        int i;

        SocketMod[] socketModArray = this.socketMods;
        for (i = 0; i < (int)socketModArray.Length; i++)
        {
            socketModArray[i].ModifyPlacement(placement);
        }
        socketModArray = this.socketMods;
        for (i = 0; i < (int)socketModArray.Length; i++)
        {
            SocketMod socketMod = socketModArray[i];
            if (!socketMod.DoCheck(placement))
            {
                if (socketMod.FailedPhrase.IsValid())
                {
                    Construction.lastPlacementError = string.Concat("Failed Check: (", socketMod.FailedPhrase.translated, ")");
                }
                return(false);
            }
        }
        return(true);
    }
Пример #27
0
    private static bool TestPlacingThroughWall(ref Construction.Placement placement, Transform transform, Construction common, Construction.Target target)
    {
        RaycastHit raycastHit;
        Vector3    vector3 = placement.position - target.ray.origin;

        if (!Physics.Raycast(target.ray.origin, vector3.normalized, out raycastHit, vector3.magnitude, 2097152))
        {
            return(true);
        }
        StabilityEntity entity = raycastHit.GetEntity() as StabilityEntity;

        if (entity != null && target.entity == entity)
        {
            return(true);
        }
        if (vector3.magnitude - raycastHit.distance < 0.2f)
        {
            return(true);
        }
        Construction.lastPlacementError = "object in placement path";
        transform.position = raycastHit.point;
        transform.rotation = placement.rotation;
        return(false);
    }
 public override bool DoCheck(Construction.Placement place)
 {
     return(true);
 }
Пример #29
0
 public virtual void ModifyPlacement(Construction.Placement place)
 {
 }
Пример #30
0
 public virtual bool DoCheck(Construction.Placement place)
 {
     return(false);
 }