internal TotemPole(ref CCTotem.Configuration TotemConfiguration) { this.Configuration = TotemConfiguration; this.TotemicFigures = new CCTotem.TotemicFigure[8]; this.TotemicFigureEnds = CCTotem.TotemicFigure.CreateAllTotemicFigures(this); this.Contraction = CCTotem.Contraction.Define(this.Configuration.poleContractedHeight, this.Configuration.poleExpandedHeight); }
private TotemicFigure(CCTotem.Direction Down) : this(Down.TotemicFigure.TotemPole, Down.TotemicFigure.BottomUpIndex + 1) { CCTotem.Direction direction; float bottomUpIndex = (float)this.BottomUpIndex / (float)this.TotemPole.Configuration.numSlidingTotemicFigures; float single = (this.TotemPole.Configuration.numSlidingTotemicFigures != 1 ? (float)(this.BottomUpIndex - 1) / (float)(this.TotemPole.Configuration.numSlidingTotemicFigures - 1) : bottomUpIndex); float single1 = Mathf.Lerp(this.TotemPole.Configuration.poleBottomBufferAmount, this.TotemPole.Configuration.poleContractedHeight - this.TotemPole.Configuration.figureSkinnedHeight, single); float single2 = Mathf.Lerp(this.TotemPole.Configuration.poleBottomBufferAmount, this.TotemPole.Configuration.poleExpandedHeight - this.TotemPole.Configuration.figureSkinnedHeight, bottomUpIndex); this.TotemContractionBottom = CCTotem.Contraction.Define(single1, single2); this.TotemContractionTop = CCTotem.Contraction.Define(single1 + this.TotemPole.Configuration.figureSkinnedHeight, single2 + this.TotemPole.Configuration.figureSkinnedHeight); CCTotem.Direction direction1 = new CCTotem.Direction(this); direction = (this.BottomUpIndex >= this.TotemPole.Configuration.numRequiredTotemicFigures - 1 ? CCTotem.Direction.None : new CCTotem.Direction(new CCTotem.TotemicFigure(direction1))); this.TotemicRoute = new CCTotem.Route(Down, direction1, direction); }
public CCTotem.MoveInfo Move(Vector3 motion, float height) { CCTotem.Expansion expansion = this.Contraction.ExpansionForValue(height); height = expansion.Value; CollisionFlags collisionFlagsMask = this.TotemicFigureEnds.Bottom.MoveSweep(motion) & this.TotemicFigureEnds.Bottom.CollisionFlagsMask; this.grounded = this.TotemicFigureEnds.Bottom.CCDesc.isGrounded; int num = 0; for (int i = this.Configuration.numRequiredTotemicFigures - 1; i >= 1; i--) { Vector3 sweepMovement = this.TotemicFigures[num].SweepMovement; collisionFlagsMask = collisionFlagsMask | this.TotemicFigures[i].MoveSweep(sweepMovement) & this.TotemicFigures[i].CollisionFlagsMask; num = i; } if (this.TotemicFigures[num].SweepMovement != this.TotemicFigures[0].SweepMovement) { Vector3 vector3 = this.TotemicFigures[num].SweepMovement; for (int j = 0; j < this.Configuration.numRequiredTotemicFigures; j++) { Vector3 sweepMovement1 = vector3 - this.TotemicFigures[j].SweepMovement; collisionFlagsMask = collisionFlagsMask | this.TotemicFigures[j].MoveSweep(sweepMovement1) & this.TotemicFigures[j].CollisionFlagsMask; } } this.Point.Bottom = this.TotemicFigures[0].BottomOrigin; CCTotem.Ends <CCTotem.TotemicFigure> totemicFigureEnds = this.TotemicFigureEnds; this.Point.Top = totemicFigureEnds.Top.TopOrigin; CCTotem.Contraction contraction = this.Contraction; this.Expansion = contraction.ExpansionForValue(this.Point.Top.y - this.Point.Bottom.y); if (this.Expansion.Value != expansion.Value) { Vector3 bottom = this.Point.Bottom + new Vector3(0f, expansion.Value, 0f); CollisionFlags collisionFlag = this.TotemicFigureEnds.Top.MoveWorldTopTo(bottom); CCTotem.Ends <CCTotem.TotemicFigure> end = this.TotemicFigureEnds; collisionFlagsMask = collisionFlagsMask | collisionFlag & end.Top.CollisionFlagsMask; Vector3 topOrigin = this.TotemicFigureEnds.Top.TopOrigin; CCTotem.Contraction contraction1 = this.Contraction; expansion = contraction1.ExpansionForValue(topOrigin.y - this.Point.Bottom.y); for (int k = this.Configuration.numRequiredTotemicFigures - 2; k > 0; k--) { CCTotem.TotemicFigure totemicFigures = this.TotemicFigures[k]; Vector3 value = this.Point.Bottom; float single = value.y; CCTotem.Expansion expansion1 = totemicFigures.TotemContractionBottom.ExpansionForFraction(expansion.FractionExpanded); value.y = single + expansion1.Value; collisionFlagsMask = collisionFlagsMask | totemicFigures.MoveWorldBottomTo(value) & totemicFigures.CollisionFlagsMask; } CCTotem.Ends <CCTotem.TotemicFigure> totemicFigureEnds1 = this.TotemicFigureEnds; this.Point.Top = totemicFigureEnds1.Top.TopOrigin; this.Expansion = expansion; } float cCDesc = this.CCDesc.effectiveSkinnedHeight; Vector3 cCDesc1 = this.CCDesc.worldSkinnedBottom; Vector3 vector31 = this.CCDesc.worldSkinnedTop; Vector3 bottomOrigin = this.TotemicFigures[0].BottomOrigin - cCDesc1; this.CCDesc.ModifyHeight(this.Expansion.Value, false); CollisionFlags collisionFlag1 = this.CCDesc.Move(bottomOrigin); Vector3 cCDesc2 = this.CCDesc.worldSkinnedBottom; Vector3 vector32 = cCDesc2 - cCDesc1; if (bottomOrigin != vector32) { Vector3 vector33 = vector32 - bottomOrigin; for (int l = 0; l < this.Configuration.numRequiredTotemicFigures; l++) { collisionFlagsMask = collisionFlagsMask | this.TotemicFigures[l].MoveSweep(vector33) & this.TotemicFigures[l].CollisionFlagsMask; } this.Point.Bottom = this.TotemicFigures[0].BottomOrigin; CCTotem.Ends <CCTotem.TotemicFigure> end1 = this.TotemicFigureEnds; this.Point.Top = end1.Top.TopOrigin; CCTotem.Contraction contraction2 = this.Contraction; this.Expansion = contraction2.ExpansionForValue(this.Point.Top.y - this.Point.Bottom.y); this.CCDesc.ModifyHeight(this.Expansion.Value, false); cCDesc2 = this.CCDesc.worldSkinnedBottom; vector32 = cCDesc2 - cCDesc1; } Vector3 cCDesc3 = this.CCDesc.worldSkinnedTop; Vector3 vector34 = cCDesc3 - vector31; Vector3 cCDesc4 = this.CCDesc.transform.position; CCTotem.Configuration configuration = this.Configuration; CCTotem.PositionPlacement positionPlacement = new CCTotem.PositionPlacement(cCDesc2, cCDesc3, cCDesc4, configuration.poleExpandedHeight); return(new CCTotem.MoveInfo(collisionFlag1, collisionFlagsMask, height, vector32, vector34, positionPlacement)); }