Click here to Skip to main content
15,884,537 members
Articles / Web Development / XHTML

SilverStunts - A data driven game in Silverlight

Rate me:
Please Sign up or sign in to vote.
4.85/5 (11 votes)
31 Dec 2007BSD16 min read 70.1K   774   57  
The article discusses the concepts of data driven web games. An example game 'SilverStunts' is presented and described in technical details.
using System;
using System.Collections.Generic;
using System.Text;

using Physics.Util;
using Physics.Primitives;
using Physics.Surfaces;

namespace Physics.Constraints
{
	/**
	 * Physics - 2D Dynamics Engine
	 * Release 0.1 alpha 
	 * SpringConstraint class
	 * Copyright 2007 Chris Cavanagh
	 * 
	 * Based on Flade source code by Alec Cove.
	 * 
	 * Physics is free software; you can redistribute it and/or modify
	 * it under the terms of the GNU General Public License as published by
	 * the Free Software Foundation; either version 2 of the License, or
	 * (at your option) any later version.
	 *
	 * Physics is distributed in the hope that it will be useful,
	 * but WITHOUT ANY WARRANTY; without even the implied warranty of
	 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	 * GNU General Public License for more details.
	 *
	 * You should have received a copy of the GNU General Public License
	 * along with Physics; if not, write to the Free Software
	 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
	 */
    public class SpringConstraint : Constraint, IConstraint
	{
		private Particle p1;
		private Particle p2;
		private double restLength;
		
		private double stiffness;
		private bool visible;

		public SpringConstraint( Particle p1, Particle p2 )
		{
			this.p1 = p1;
			this.p2 = p2;
			restLength = p1.Curr.Distance( p2.Curr );

			stiffness = 0.5;
			visible = true;
		}		
		
		public void Resolve()
		{
			Vector delta = p1.Curr.MinusNew( p2.Curr );
			double deltaLength = p1.Curr.Distance( p2.Curr );

			double diff = ( deltaLength - restLength ) / deltaLength;
			Vector dmd = delta.Mult( diff * stiffness );

			p1.Curr.Minus( dmd );
			p2.Curr.Plus( dmd );
		}

		public double RestLength { get { return restLength; } set { restLength = value; } }
		public double Stiffness { get { return stiffness; } set { stiffness = value; } }
		public bool Visible { get { return visible; } set { visible = value; } }
		public Particle P1 { get { return p1; } }
		public Particle P2 { get { return p2; } }
	}
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The BSD License


Written By
Web Developer
Czech Republic Czech Republic
I'm a former game developer. I'm excited about web technologies.
Currently, I work on rich internet application powered by ExtJS (client) and Ruby on Rails (server).

Comments and Discussions