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; } }
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)); } }
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); } } }
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); } } }