Example #1
0
    void Awake()
    {
        GameObject track = GameObject.Find("Track");

        if (track)
        {
            currentTrack = track.GetComponent <TrackComponent>();
            Debug.Log("found track");
        }
        if (currentTrack)
        {
            var     start    = currentTrack.GetPoint(0);
            var     forward  = currentTrack.GetForward(0);
            var     rotation = Quaternion.LookRotation(forward, Vector3.up);
            var     matrix   = Matrix4x4.TRS(Vector3.zero, rotation, Vector3.one);
            Vector3 up       = matrix.GetColumn(1);
            var     position = start + up * 100;

            RaycastHit hit;
            if (!Physics.Raycast(new Ray(start, up), out hit))
            {
                return;
            }


            transform.position = hit.point + up;
            transform.up       = up;
            transform.forward  = forward;
        }
    }
Example #2
0
        public void InitTrackDustSystem(NodeAddedEvent evt, [Combine] TrackDustInitNode tank, SingleNode <MapDustComponent> mapDust)
        {
            TrackComponent     track     = tank.track;
            TrackDustComponent trackDust = tank.trackDust;

            trackDust.leftTrackDustDelay  = new float[track.LeftTrack.rays.Length];
            trackDust.rightTrackDustDelay = new float[track.RightTrack.rays.Length];
            CollisionDustBehaviour collisionDustBehaviour = tank.hullInstance.HullInstance.AddComponent <CollisionDustBehaviour>();

            collisionDustBehaviour.mapDust = mapDust.component;
            if (tank.Entity.HasComponent <CollisionDustComponent>())
            {
                tank.Entity.GetComponent <CollisionDustComponent>().CollisionDustBehaviour = collisionDustBehaviour;
            }
            else
            {
                tank.Entity.AddComponent(new CollisionDustComponent(collisionDustBehaviour));
            }
        }
Example #3
0
 public void TryEmitFromTracks(UpdateEvent evt, TrackDustUpdateNode tankNode, [JoinAll] SingleNode <MapDustComponent> mapDustNode)
 {
     if (tankNode.cameraVisibleTrigger.IsVisibleAtRange(30f))
     {
         TrackComponent         component     = tankNode.track;
         TrackDustComponent     trackDust     = tankNode.trackDust;
         ChassisConfigComponent chassisConfig = tankNode.chassisConfig;
         float            maxRayLength        = chassisConfig.MaxRayLength;
         Track            leftTrack           = component.LeftTrack;
         Track            rightTrack          = component.RightTrack;
         MapDustComponent mapDust             = mapDustNode.component;
         float[]          leftTrackDustDelay  = trackDust.leftTrackDustDelay;
         float[]          rightTrackDustDelay = trackDust.rightTrackDustDelay;
         int numRaysPerTrack = chassisConfig.NumRaysPerTrack;
         for (int i = 0; i < numRaysPerTrack; i += 2)
         {
             this.TryEmitFromSuspensionRay(maxRayLength, leftTrack, mapDust, leftTrackDustDelay, i);
             this.TryEmitFromSuspensionRay(maxRayLength, rightTrack, mapDust, rightTrackDustDelay, i);
         }
     }
 }
Example #4
0
 public void AnimateWheelsAndTracksRotation(TimeUpdateEvent evt, AliveChassisAnimationNode node)
 {
     if (node.cameraVisibleTrigger.IsVisibleAtRange(50f))
     {
         ChassisAnimationComponent chassisAnimation = node.chassisAnimation;
         TrackComponent            track            = node.track;
         TrackController           leftTrack        = node.chassisTrackController.LeftTrack;
         TrackController           rightTrack       = node.chassisTrackController.RightTrack;
         float maxSpeed  = node.effectiveSpeed.MaxSpeed;
         float deltaTime = evt.DeltaTime;
         this.CalculateTrackAnimationSpeed(track.LeftTrack, node, maxSpeed, deltaTime);
         chassisAnimation.LeftTrackPosition += (track.LeftTrack.animationSpeed * deltaTime) * 0.5f;
         leftTrack.UpdateWheelsRotation(chassisAnimation.LeftTrackPosition);
         this.CalculateTrackAnimationSpeed(track.RightTrack, node, maxSpeed, deltaTime);
         chassisAnimation.RightTrackPosition += (track.RightTrack.animationSpeed * deltaTime) * 0.5f;
         rightTrack.UpdateWheelsRotation(chassisAnimation.RightTrackPosition);
         if (chassisAnimation.TracksMaterial != null)
         {
             float   num4   = -chassisAnimation.RightTrackPosition * chassisAnimation.tracksMaterialSpeedMultiplyer;
             Vector2 vector = new Vector2((-chassisAnimation.LeftTrackPosition * chassisAnimation.tracksMaterialSpeedMultiplyer) % 1f, num4 % 1f);
             chassisAnimation.TracksMaterial.SetVector(TankMaterialPropertyNames.TRACKS_OFFSET, vector);
         }
     }
 }